?? threefft.m
字號:
%該函數根據輸入信號,已及信號個數,來判斷有無窄帶信號,并估計其參數。
%Rife法的改進
function [freq,pha,amp]=ThreeFFT(x0,dt)
%dt=5e-9;
m=length(x0);
t=0:m-1;
g1=exp(j*2*pi*t/(3*m));
x1=x0.*g1;
g2=exp(-j*2*pi*t/(3*m));
x2=x0.*g2;
absfftx0=abs(fft(x0));absfftx0(1)=0;absfftx0(m)=0;
absfftx1=abs(fft(x1));absfftx1(1)=0;absfftx1(m)=0;
absfftx2=abs(fft(x2));absfftx2(1)=0;absfftx2(m)=0;
%Rife法估計不足f
[b1,n1]=max(absfftx0);
b2=absfftx0(n1+1);
b3=absfftx0(n1-1);
if b2>=b3
fx0=(n1-1+1*b2/(b1+b2))/(m*dt);
else
fx0=(n1-1-1*b3/(b1+b3))/(m*dt);
end
[b1,n1]=max(absfftx1);
b2=absfftx1(n1+1);
b3=absfftx1(n1-1);
if b2>=b3
fx1=(n1-1+1*b2/(b1+b2))/(m*dt);
else
fx1=(n1-1-1*b3/(b1+b3))/(m*dt);
end
[b1,n1]=max(absfftx2);
b2=absfftx2(n1+1);
b3=absfftx2(n1-1);
if b2>=b3
fx2=(n1-1+1*b2/(b1+b2))/(m*dt);
else
fx2=(n1-1-1*b3/(b1+b3))/(m*dt);
end
divide=1/(m*dt);%量化頻率
distx0=abs(rem(fx0,divide)-0.5*divide);
distx1=abs(rem(fx1,divide)-0.5*divide);
distx2=abs(rem(fx2,divide)-0.5*divide);
temp=[distx0,distx1,distx2];
[val,pos]=min(temp);
if pos==1
freq=fx0;
elseif pos==2
freq=fx1-1/(3*m*dt);
else
freq=fx2+1/(3*m*dt) ;
end
ti=dt*(0:m-1);
weight=x0;
fsignal=weight*exp( -j*2*pi*freq*ti).';
pha=0;
%pha=fixnum(atan1(fsignal),-pi,pi);
%amp=abs(fsignal)/m;
amp=0;
return;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -