tomwalters@0
|
1 % Fp2toFr1
|
tomwalters@0
|
2 % derives fr1 from the given fp2
|
tomwalters@0
|
3 %
|
tomwalters@0
|
4 % function [fr1,fp1] = Fp2toFr1(n,b1,c1,b2,c2,frat,fp2)
|
tomwalters@0
|
5 %
|
tomwalters@0
|
6 % Author: Masashi Unoki
|
tomwalters@0
|
7 % Created: 3 July 2002
|
tomwalters@0
|
8 % Updated: 15 July 2002
|
tomwalters@0
|
9 % Revised: 9 Oct. 2003 (checked & renamed variables)
|
tomwalters@0
|
10 % Copyright (c) 2002, AIS-Lab. JAIST
|
tomwalters@0
|
11 %
|
tomwalters@0
|
12 function [fr1,fp1] = Fp2toFr1(n,b1,c1,b2,c2,frat,fp2)
|
tomwalters@0
|
13 if nargin < 1; help Fp2toFr1; end;
|
tomwalters@0
|
14
|
tomwalters@0
|
15 SR=24000;
|
tomwalters@0
|
16 Nfft=1024*2;
|
tomwalters@0
|
17
|
tomwalters@0
|
18 %%%%%%% Coefficients: ERB(fr1)=alp1*fr1+alp0 %%%%%%%
|
tomwalters@0
|
19 alp1=24.7*4.37/1000;
|
tomwalters@0
|
20 alp0=24.7;
|
tomwalters@0
|
21
|
tomwalters@0
|
22 %%%%%%% Coefficients: fr2=bet1*fr2+bet0 %%%%%%%
|
tomwalters@0
|
23 bet1=frat*(1+c1*b1*alp1/n);
|
tomwalters@0
|
24 bet0=frat*c1*b1*alp0/n;
|
tomwalters@0
|
25
|
tomwalters@0
|
26 %%%%%%% Coefficients: ERB(fr2)=zet1*fr1+zet0 %%%%%%%
|
tomwalters@0
|
27 zet1=alp1*bet1;
|
tomwalters@0
|
28 zet0=alp1*bet0+alp0;
|
tomwalters@0
|
29
|
tomwalters@0
|
30 %%%%%%% D1*fr1^3 + D2*fr1^2 + D3*fr1 + D4 = 0 %%%%%%%
|
tomwalters@0
|
31
|
tomwalters@0
|
32 D1=((b2^2*zet1^2+bet1^2)*(c1*b1*alp1+n) + (c2*b2*zet1)*(b1^2*alp1^2+1));
|
tomwalters@0
|
33 D2=((b2^2*zet1^2+bet1^2)*(c1*b1*alp0-n*fp2) ...
|
tomwalters@0
|
34 + (2*b2^2*zet1*zet0-2*bet1*(fp2-bet0))*(c1*b1*alp1+n) ...
|
tomwalters@0
|
35 + (c2*b2*zet1)*(2*b1^2*alp1*alp0-2*fp2) + (c2*b2*zet0)*(b1^2*alp1^2+1));
|
tomwalters@0
|
36 D3=((2*b2^2*zet1*zet0-2*bet1*(fp2-bet0))*(c1*b1*alp0-n*fp2) ...
|
tomwalters@0
|
37 + (b2^2*zet0^2+(fp2-bet0)^2)*(c1*b1*alp1+n)...
|
tomwalters@0
|
38 +(c2*b2*zet1)*(b1^2*alp0^2+fp2^2) + (c2*b2*zet0)*(2*b1^2*alp1*alp0-2*fp2) );
|
tomwalters@0
|
39 D4=(b2^2*zet0^2+(fp2-bet0)^2)*(c1*b1*alp0-n*fp2) ...
|
tomwalters@0
|
40 + (c2*b2*zet0)*(b1^2*alp0^2+fp2^2);
|
tomwalters@0
|
41
|
tomwalters@0
|
42 q=roots([D1 D2 D3 D4]);
|
tomwalters@0
|
43 candFr1=q(imag(q)==0);
|
tomwalters@0
|
44
|
tomwalters@0
|
45 LenFr1=length(candFr1);
|
tomwalters@0
|
46 if (LenFr1 > 1) % finding the maximum peak of |Gcc(f)|
|
tomwalters@0
|
47 GccAtFp2=zeros(1,LenFr1);
|
tomwalters@0
|
48 for m=1:LenFr1
|
tomwalters@0
|
49 fr1m=candFr1(m);
|
tomwalters@0
|
50 fr2m=bet1*fr1m+bet0;
|
tomwalters@0
|
51 [GcFrsp1, freq1]=GammaChirpFrsp(fr1m,SR,n,b1,c1,0,Nfft);
|
tomwalters@0
|
52 [dummy ERBw2] = Freq2ERB(fr2m);
|
tomwalters@0
|
53 AsymFuncFrsp = exp(c2*atan2((freq1 - fr2m),(b2*ERBw2)));
|
tomwalters@0
|
54 GcFrsp = GcFrsp1.*AsymFuncFrsp;
|
tomwalters@0
|
55 GcFrsp = GcFrsp/max(GcFrsp);
|
tomwalters@0
|
56 [dummy,pos]=min(abs(freq1-fp2));
|
tomwalters@0
|
57 GccAtFp2(m)=GcFrsp(pos);
|
tomwalters@0
|
58 end
|
tomwalters@0
|
59 [dummy,pos]=max(GccAtFp2);
|
tomwalters@0
|
60 fr1=candFr1(pos);
|
tomwalters@0
|
61 else
|
tomwalters@0
|
62 fr1=candFr1;
|
tomwalters@0
|
63 end
|
tomwalters@0
|
64
|
tomwalters@0
|
65 fp1=fr1+c1*b1*(alp1*fr1+alp0)/n;
|
tomwalters@0
|
66
|
tomwalters@0
|
67 return
|