annotate aim-mat/modules/bmm/dcgc/EqualFreqScale.m @ 4:537f939baef0 tip

various bug fixes and changed copyright message
author Stefan Bleeck <bleeck@gmail.com>
date Tue, 16 Aug 2011 14:37:17 +0100
parents 74dedb26614d
children
rev   line source
tomwalters@0 1 %
tomwalters@0 2 % Calculation of Equal Frequency scale on ERB/Mel/Log/Linear scale
tomwalters@0 3 % Toshio IRINO
tomwalters@0 4 % 5 Oct 2001
tomwalters@0 5 %
tomwalters@0 6 % function [Frs] = EqualFreqScale(NameScale,NumCh,RangeFreq),
tomwalters@0 7 % INPUT: NameScale: 'ERB', 'mel', 'log', 'linear'
tomwalters@0 8 % NumCh: Number of channels
tomwalters@0 9 % RangeFreq: Frequency Range
tomwalters@0 10 % OUTPUT: Frs: Fr vector
tomwalters@0 11 % WFval: Warped Freq. value
tomwalters@0 12 %
tomwalters@0 13 function [Frs, WFvals] = EqualFreqScale(NameScale,NumCh,RangeFreq),
tomwalters@0 14
tomwalters@0 15 if nargin <3, help EqualFreqScale; end;
tomwalters@0 16 if diff(RangeFreq) < 0,
tomwalters@0 17 help EqualFreqScale;
tomwalters@0 18 error('RangeFreq(1) should be less than RangeFreq(2).');
tomwalters@0 19 end;
tomwalters@0 20
tomwalters@0 21 if strcmp(lower(NameScale),'linear') == 1,
tomwalters@0 22 RangeWF = RangeFreq;
tomwalters@0 23 dWF = diff(RangeWF)/(NumCh-1);
tomwalters@0 24 WFvals = RangeWF(1):dWF:RangeWF(2)+eps*1000;
tomwalters@0 25 Frs = WFvals;
tomwalters@0 26
tomwalters@0 27 elseif strcmp(lower(NameScale),'mel') == 1,
tomwalters@0 28 RangeWF = Freq2Mel(RangeFreq);
tomwalters@0 29 dWF = diff(RangeWF)/(NumCh-1);
tomwalters@0 30 WFvals = RangeWF(1):dWF:RangeWF(2)+eps*1000;
tomwalters@0 31 Frs = Mel2Freq(WFvals);
tomwalters@0 32
tomwalters@0 33 elseif strcmp(lower(NameScale),'erb') == 1,
tomwalters@0 34 RangeWF = Freq2ERB(RangeFreq);
tomwalters@0 35 dWF = diff(RangeWF)/(NumCh-1);
tomwalters@0 36 WFvals = RangeWF(1):dWF:RangeWF(2)+eps*1000;
tomwalters@0 37 Frs = ERB2Freq(WFvals);
tomwalters@0 38
tomwalters@0 39 elseif strcmp(lower(NameScale),'log') == 1,
tomwalters@0 40 if min(RangeFreq) < 50,
tomwalters@0 41 disp([ 'min(RangeFreq) < 50. Replaced by 50.' ]);
tomwalters@0 42 RangeFreq(1) = 50;
tomwalters@0 43 end;
tomwalters@0 44 RangeWF = log10(RangeFreq);
tomwalters@0 45 dWF = diff(RangeWF)/(NumCh-1);
tomwalters@0 46 WFvals = RangeWF(1):dWF:RangeWF(2)+eps*1000;
tomwalters@0 47 Frs = 10.^WFvals;
tomwalters@0 48
tomwalters@0 49 else
tomwalters@0 50 help EqualFreqScale;
tomwalters@0 51 error('Specify NameScale correctly');
tomwalters@0 52 end;
tomwalters@0 53