annotate aim-mat/modules/bmm/dcgc/Fp2toFr1.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 % 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