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
|