📄 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 + -