witty01 发表于 2008-1-14 10:33

为什么这段校正的程序的结果不是想要的?

这是从论坛里面下载的一段程序,自己改了改,不过结果却不对,不知道是什么原因
fs=100;
N=1024;
PHI=pi/3;
Ampl=1;
Freq=11.9;                                        %cycles in record
TV=(0:N-1)/fs;                                    %时间矢量
DatVec=Ampl*cos(Freq*TV*2*pi+PHI);                %被分析信号
FV=fft(DatVec)/N*2;                               %傅立叶变换,矩形窗
df=fs/length(FV);                                 %频率分辨率
w=(0:N-1)*df;                                     %频率横坐标
figure
subplot(221);plot(TV,DatVec);
subplot(222);plot(w(1:N/2),abs(FV(1:N/2)));       %
grid on
=max(abs(FV));                           %找到最高的那个谱线
%加矩形窗的解析校正--1
FreqShift1=SpecCorr(FV,MI,N,1)

计算结果:
FreqShift1 =
   -0.1440

从图中看,FreqShift1 =-0.01才对啊,这个是什么原因?

songzy41 发表于 2008-1-14 14:08

程序中没有看出有什么错,而是楼主对于VibrationMaster的原程序还没有了解。VibrationMaster给出的函数SpecCorr,返还时为变量PeakShift,该PeakShift不是频率值,而是最大值位置的位移值。在楼主的程序中,最大值的位置在MI中,所以修正后最大值的位置在
MI+FreqShift1
该位置对应的频率为
(MI-1+FreqShift1)*df=11.9
与程序设置值完全一致。

[ 本帖最后由 songzy41 于 2008-1-14 14:14 编辑 ]

witty01 发表于 2008-1-15 09:44

:@) ,我也知道是自己的理解出现了点偏差,谢谢宋老师的指点。

VibrationMaster在那个文章里面说FreqShift的单位是FFT的分辨率,我把这个给忽略了,以为直接就是偏差呢,就直接用11.9141-0.144,
可以用11.9141-0.144/1024*100=11.9000
非常感谢您:victory:
页: [1]
查看完整版本: 为什么这段校正的程序的结果不是想要的?