原创
fft采用不同分析点数为什么幅值会不一样呢? 频谱校正
2011-6-14 15:40
12409
13
13
分类:
测试测量
同一采样率
M=fft(Y,256);
M=fft(Y,512);
M=fft(Y,1024);
采用不同的点数,应该只是分辨率不同而已啊,怎么结果用1024点明显比256点,512点小呢?多谢!
----------------------------
你的信号是平稳信号吗?
-----------------------------
谢谢!我的信号只是一般的正弦信号,就导致了这样的结果!能将一下或指导一下方向,平稳和非平稳,为什么会导致采样点数不一样,FFT后幅值不同呢?多谢!
还有一个问题,不同的采样率,fft后频率也不一样?比如50Hz的正弦信号,fs=1000时,50Hz处有峰值,fs=500时,25Hz有峰值,fs=2000时,100Hz处有峰值。就是出现峰值处在x轴上位置不变,但是采用不同采样率,x轴刻度在变,所以导致不同采样率,出现峰值的频率点不同。
---------------------------
不同的采样率,相同的点数的fft,会导致频率分辨率不一样,
会出现频谱栏栅效应,和频谱泄漏,会导致峰值出现的位置和幅度不一样.
建议论坛里面搜寻一下频率补偿,以及看看数字信号处理里面的频谱栏栅效应,和频谱泄漏的相关知识
--------------------------
这是我的程序
N=128 或256 或512 或1024
x=0:.001:1;
y=sin(2*pi*50*x);
M=fft(y,N);
Py=abs(M)*2/N;
f=fs*(0:N/2)/N; %fs采样率
plot(f,Py(1:N+1));
请麻烦试验一下,不同的N,fft幅值结果相差较大。
不同的fs,fft后幅值处频率值也随fs差异成倍。多谢!
那么在这里大概怎么进行频率补偿呢?希望在matlab里面给指个方向就行。多谢啊!
-----------------------------
引用:
原帖由 kmkeke 于 2008-12-18 15:10 发表
这是我的程序
N=128 或256 或512 或1024
x=0:.001:1;
y=sin(2*pi*50*x);
M=fft(y,N);
Py=abs(M)*2/N;
f=fs*(0:N/2)/N; %fs采样率
plot(f,Py(1:N+1));
请麻烦试验一下,不同的N,fft幅值结果相差较大。
不同的fs,fft后幅值处频率值也随fs差异成倍。多谢!
那么在这里大概怎么进行频率补偿呢?希望在matlab里面给指个方向就行。多谢啊!
楼主的主要问题是泄漏的问题,楼主的信号是50,但是在FFT变换后,没有一根谱线落在50上,所以看到的只是泄漏出来的部分(可以从下图中看到)。同时在1024时,信号长只有1001,所以Py=abs(M)*2/N;中除1024也是不合适的。我把程序稍改一下,得到的图如下。
x=0:.001:1; fs=1000;
y=sin(2*pi*50*x);
N=64;
for k=1 : 4
N=N*2;
M=fft(y,N);
Py=abs(M)*2/N;
f=fs*(0:N/2)/N; %fs采样率
subplot (4,1,k);
stem(f,Py(1:N/2+1));
xlim([0 100]);
title(['N=' num2str(N)]);
end
------------------------
太感谢了!请问该怎么修正呢?希望能指导个方向!
------------------
可以用修正法,求出在50处的幅值。
---------------------------
请问大概怎么修正法啊!不好意思!这个没知道怎么弄?查资料好像有用窗函数的?但是不知道从哪里开始。
--------------------------
九种频谱校正法
----------------------------
对,是频谱校正方法。在本论坛上有不少讨论。版主yangzj曾给过一个MATLAB校正的程序,同时zhwang554也用全相位的校正法给出了相应的程序。可在论坛上找一下。
文章评论(0条评论)
登录后参与讨论