1. 加窗可防止频谱泄漏,窗函数的各种特衡此性可参考:www.virtins.com/doc/D1003/Evaluation_of_Various_Window_Functions_using_Multi-Instrument_D1003.pdf
若想最大限度地将某个频率的能量集中到其频率所对应的谱线困数附近可选KAISER 6窗函数。
2. 去VIRTINS TECHNOLOGY的网站免费下载multi-instrument后,在其\DAQDAOAPIs目录下有个TestDAQVC例程,其中包含一个专门用于信号处理与分析的vtSPA.dll,其API中包括一个加窗函数,double SPA_Windowing( double *DataInEU, int WindowType, DWORD DataCount, BOOL FilterFlag )可供调用。 具体说明参考:咐尺迅www.virtins.com/Signal-Processing-and-Analysis-APIs.pdf
有55种窗函数可供调用。
%% Hanning FFThw=hann(N,'periodic')
Xh=fft(x.*hw')
Xh=Xh(1:N/2)*2
Xhabs=abs(Xh)
for i= 1 : m
[Amax,index]=TriFind(Xhabs,floor((i*f0-15)/fsN),ceil((i*f0+15)/fsN))% 搜索区域极大值及其下标
if(index==-1)
Fn(i,4) = 0
An(i,4) = 0
Pn(i,4) = 0
else
% 下面是插值部分
if(Xhabs(index-1) >Xhabs(index+1))
a2 = Xhabs(index-1) / Xhabs(index)
r2 = (2-a2)/(1+a2)
k02 = index -1
else
a2 = Xhabs(index) / Xhabs(index+1)
r2 = (2-a2)/(1+a2)
k02 = index
end
Fn(i,4) = (k02+r2-1)*fs/N
An(i,4) = 2*pi*r2*(1-r2*r2)*Xhabs(k02)/(N*sin(r2*pi))
Pn(i,4) = phase(Xh(k02))-pi*r2
Pn(i,4) = mod(Pn(i,4),pi)
if(abs(r2)<0.000001)||(abs(r2-1)<0.000001)
% Fn(i,4) = (index-1)*fs/N
An(i,4) = 2*Amax/N
end
Fn_err(i,4) = (Fn(i,4) - Fn(i,2))/Fn(i,4)
An_err(i,4) = (An(i,4) - An(i,2))/An(i,4)
Pn_err(i,4) = (Pn(i,4) - Pn(i,2))/Pn(i,4)
end
end
% 这弯昌是我写的氏饥部分代码,歼闹返你参考下吧
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)