guodongliang 发表于 2009-1-9 20:06

整周期采样的信号为何还有频谱泄漏?

正弦信号序列,整数个周期。做fft后,频谱不是理想的单一谱线。程序(512点FFT):
fs=20;
t=0:1/fs:1;
% 信号1
x1=sin(2*pi*t);
% 信号波形
subplot(2,2,1)
stem(x1);
title('正弦信号,初相0')
xlabel('序列(n)')
grid on
% fft谱分析
number = 512;
%number = length(x1)
Y = fft(x1,number);
f = fs*(0:(number/2-1))/number;
subplot(2,2,2)
plot(f,abs(Y(1:number/2)));hold
%stem(f,abs(Y(1:number/2)));
title('正弦信号的FFT')
xlabel('频率Hz')
grid on
% 信号2
t=0:1/fs:2;
x2=sin(2*pi*t);
% 信号2波形
subplot(2,2,3)
stem(x2);
title('正弦信号,初相0')
xlabel('序列(n)')
grid on
Y = fft(x2,number);
f = fs*(0:(number/2-1))/number;
% fft谱分析
subplot(2,2,4)
plot(f,abs(Y(1:number/2)));hold
%stem(f,abs(Y(1:number/2)));
title('正弦信号的FFT')
xlabel('频率Hz')
grid on

图形如下,请教其原因?

ChaChing 发表于 2009-1-9 21:08

回复 楼主 guodongliang 的帖子

LZ的不够512补零了! 试试
t=0:1/fs:30; x2=sin(2*pi*t);

S0704082 发表于 2009-1-9 21:14

回复 楼主 guodongliang 的帖子

原因是信号的频率不在离散的频率格点上,也就是说,FFT在频域是离散的,离散的频率wk=2*pi*k/N;在频域的离散频谱成为栅栏效应,你的程序中的频率为1Hz,而频率分辨率为20/512=0.0391Hz,只有信号的频率为频率分辨率的整数倍,没有泄露

guodongliang 发表于 2009-1-10 10:47

刚才进行了实验。两位高手都有道理:
若fs=20Hz,取FFT点数N=20,则信号1、信号2 都没有泄漏。(信号频率是频率分辨率fs/N=20/20的整数倍);
若fs=20Hz,取FFT点数N=200,则信号1有泄漏、信号2取t=0:fs:10 或者更长时没有泄漏。(信号频率是频率分辨率fs/N=20/200的整数倍);
说明:(1)保证频率分辨率fs/N与信号频率的整数倍关系;
         (2)信号序列点数大于等于FFT点数。
         才没有泄漏。
原程序虽然貌似整周期 ,但真正决定整周期的是FFT的点数,条件“信号频率fk是频率分辨率fs/N的整数倍”就是整周期条件。(fk=m*(fs/N),m为正整数,点数N=m*(fs/fk))
   非常感谢两位!:loveliness:

ChaChing 发表于 2009-1-10 19:19

实际应用上, 不就是不晓得信号频率, 那怎样能确定"信号频率是频率分辨率的整数倍"?
个人观点, 实用上仅能尽可能注意频率分辨率足够, 无补零...等

S0704082 发表于 2009-1-10 22:10

回复 5楼 ChaChing 的帖子

不是整周期采样的情况,可以通过校正公式得到准确的计算结果

ChaChing 发表于 2009-1-11 14:19

回复 6楼 S0704082 的帖子

我的意思是我怎样能确定"已经整周期采样"?
外行人的直觉! 或许改天有兴趣研究研究!

jidianwangliang 发表于 2009-6-7 21:46

一直不是很理解dft的频谱泄漏问题,原则上信号截短就会造成频谱泄漏,也许是正弦信号和dft的特殊性,将信号序列的dft作为序列的频谱,只在频率处有值,其他频率处为零吧,
整周期采样只能用在教学和认识问题上把,工程上是不是可以找出基频啊

jidianwangliang 发表于 2009-6-7 21:54

原帖由 guodongliang 于 2009-1-10 10:47 发表 http://www.chinavib.com/forum/images/common/back.gif
刚才进行了实验。两位高手都有道理:
若fs=20Hz,取FFT点数N=20,则信号1、信号2 都没有泄漏。(信号频率是频率分辨率fs/N=20/20的整数倍);
若fs=20Hz,取FFT点数N=200,则信号1有泄漏、信号2取t=0:fs:10 或者更 ...
呵呵,都没有泄漏吧,
仔细看看,N=20和200时,在1hz处值不为零,在2,3,4,。。处都为零,所以之于dft来说,都没有泄漏,
但是频谱是有泄漏的,图中的包络是序列的dtft,它是有泄漏的

VibrationMaster 发表于 2009-6-8 19:47

泄露的概念应该修正了,参考
http://forum.vibunion.com/forum/thread-75167-1-1.html

jidianwangliang 发表于 2009-6-12 08:50

用矩形窗截断信号,再用sinc函数和截断前的信号的进行卷积,画出图来之后,泄漏"这个概念似乎就解决了,又有人说整周期采样就不会有泄漏,真的是这样嘛,我觉得不妥当,我可以认为dft只是一种算法,一个数学的公式,不要被它号称“变换”的外衣迷惑住,是因为计算机只能处理有限长和离散的信号,我们不得已而采用的一种近似的算法,其实截断了就有了泄漏,只是在dft下我们又整周期采样了,利用dft这个算法我们得到了我们想要的参数(这就是幸运的地方,在dft的频谱下信号的频率处的频谱值和原来既没有采样也没有截断的原始信号一样),这是没有泄漏吗,我想不是吧,楼上的VibrationMaster老师的一些观点我很赞成,也希望多多交流啊,以上也是我的个人的看法,望大牛们指正

hyl2323 发表于 2009-6-15 11:31

这个东西我研究过:
t=0:1/fs:1,你采集的数据多了最后一个点,不是整周期。t=1那个点要去掉。

longxiaolong 发表于 2012-5-6 12:41

很受益!!!{:{13}:}

吟枫舞墨 发表于 2013-5-6 00:35

其实我也一直想问的是 泄漏产生的原因 究竟是由于截断处的不连续性造成的 还是窗函数本身的频带无限造成的。。。
页: [1]
查看完整版本: 整周期采样的信号为何还有频谱泄漏?