离散频谱的比值校正法
在下帖子中讨论了“Matlab中FFT求正玹序列的振幅”https://www.ilovematlab.cn/thread-50611-1-1.html 我在帖子中指出了当“正弦信号的频率不与FFT后的某条谱线相合”,可用校正法来求正弦信号的频率。在这里提供一个比值校正法的程序,它已编写成一个函数,该方法的理论可参看以下附件。
function Z=Specorr(x,fs,N,nx1,nx2,method)
[nx,mx]=size(x);
if mx==1, x=x';end
[nx,mx]=size(x);
if mx
x=[x zeros(1,N-mx)];
else
x=x(1:N);
end
w=hann(N,'periodic');
if method==2
xf=fft(x.*w');
xf=xf(1:N/2)/N*4;
WindowType=2;
else
xf=fft(x);
xf=xf(1:N/2)/N*2;
WindowType=1;
end
ddf=fs/N;
n1=fix(nx1/ddf);
n2=round(nx2/ddf);
A=abs(xf);
[Amax,index]=max(A(n1:n2));
index=index+n1-1;
phmax=angle(xf(index));
<