我是靠谱客的博主 怕黑黄豆,最近开发中收集的这篇文章主要介绍频谱泄露栅栏效应及其解决方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  1. DFT中时域补零,频域对于单周期的FFT会更加细致,因为本来的DTFT就是对补零的部分取零的,补零反而能使DFT的采样更精细,何乐而不为呢?当然,补零对周期信号的DFT是一定存在影响的,毕竟周期变了。但注意这仅仅是对周期信号,而不是我们取的单周信号本身。
    参见知乎李狗嗨的回答,注意回答里面说的波形分辨率就是我说的频率分辨力。而FFT分辨率和视觉分辨率我都没提到。
  2. 如果周期信号不是恰好取的一个周期,比如取了一个半周期(或者更普通的,补零把周期补的给变了),DFT就会出现错位的现象,也就是会出现和我们想要的频谱不同的现象
  3. 频谱泄露:
    所谓频谱泄露,不如叫频谱失真更合适,解释见代码
Freq=1;
length=Fs/Freq-1;%取满一个周期
t=(0:(length))/Fs;%这里从不从零开始都无所谓,总长度为length(记住FFT分辨率始终就是Fs/length)
a=20*sin(2*pi*Freq*t);
plot(t,a);
xlabel('t(s)');
b=fft(a);
Frequence1 = Fs*(0:(length))/(length+1);%这里的频域是从零开始,所以显然频域取横轴有必要从0开始
figure(2);
stem(Frequence1,abs(b)/(length));
xlabel('f(Hz)');
ylabel('FFTAmplitude');%验证得到,对于正好取了一周期的周期信号并不会存在频谱泄露,所谓频谱泄露实际上就是所取信号不是正好一周期,导致被重复得信号不是原信号,从而频谱改变,而这个频谱就是所谓“频谱泄露”,我认为不如叫频谱失真更合适

  1. 频率分辨力与栅栏效应:
    接上考虑单频信号,频率分辨力由Sa函数主瓣宽度决定,主瓣宽度为1/N的常数倍,N为截断信号的长度。所以补零不会改善频率分辨力,因为补零的极限就是得到 截断信号(N点)的DTFT, 但是DTFT实际上由于截断已经相当于卷积了窗函数的DTFT;频率分辨力由窗函数的DTFT决定也即N决定
    作者:水木八刀
    链接:https://www.zhihu.com/question/288857925/answer/463072771
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    因为窗函数的DTFT是个sinc,而sinc仅仅在自己的中心取1,每过1/N就取零,分辨率顶天就是1/N。所以说,补零不会影响频率分辨力,因为截断所用的门函数就是N位,补零也是N位,不会变的。所以说影响频率分辨力的是时域窗长度,而不是FFT点数,补零做到的FFT做到的只不过是把时域周期提上去(既然时域周期提上去了,那频谱必然就会变,你想想,周期都变了啊),这也就是让频谱采样率高一点,平滑一点,而且平滑的还是那个被截断的、有限长的信号的频谱,再平滑也是失真的。
    但补零真的百无一用吗?我想不是,如果两个频率靠的比较近,数据又不够长,频域分辨率就不太够(也就是栅栏效应),DFT根本就显示不了两个频率的区别,但是呢,DTFT这时候实际上又能指示出一些信息,怎么办呢?补零,补到DTFT的雏形显现,就可以看出一些信息了。
  2. 频谱泄露的解决方法:
    首先我们要认清,周期信号的频谱是由很多个冲激串组成的,加矩形窗实际上就是这很多个冲激串对sinc频移,下面代码验证了多了100个点实际上周期信号的冲激串构成就完全变了。千万注意是每个冲激串都对sinc进行频移。
    那怎么解决呢?最好的办法自然是取到整数个周期。对于窗函数的方法我则有疑问,下面是我对老师发的问题。:
    老师您好,我在频谱泄露的解决方法这里遇到了问题,频谱泄露是由于所取有限长信号不是周期整数倍,如果我取了正好一个正弦信号的1.5个周期,对它进行DFT,很显然这时的周期信号已经变成了以1.5个周期为最长周期的信号,已经不是原来的正弦信号了,这时频谱也会发生改变,会区别于之前的冲激串变成另外的冲激串,会对所加窗函数的频谱进行频移,问题来了,矩形窗函数的频域是sinc函数,中心取1,在其他频点取零,汉明窗的频域仅在中心频点和其左右各一个频点取正值,在其余处取零,这两个窗用起来有什么区别吗?难道因为汉明窗在左右两个频点处取正值抑制了频谱泄露?
    老师,时域上我能理解,汉明窗在时域上两端值小,很显然就是抑制了边缘的突变,使其更贴近原来的函数,但是频域上我怎么也想不通

    老师回复我了,下面是我的解答:如果从原信号的角度来考虑(我的思路局限性),我们加一个门函数,实际上就是正弦函数对门函数频移,每次平移到的位置都一样,当我们,当门函数取不同的N的时候,1/N随之改变,造成sinc的过零点不再与每个n点一一对应,导致在除中心频点的位置表露出非零值,而汉明窗则不会,他本来两边就是零,可以降低旁瓣泄露。老师就是老师,一句话说透。
Freq=1;
length=Fs/Freq-1+100;%取满一个周期多一百个点
t=(0:(length))/Fs;%这里从不从零开始都无所谓
a=20*sin(2*pi*Freq*t);
plot(t,a);
xlabel('t(s)');
b=fft(a);
Frequence1 = Fs*(0:(length))/(length+1);%这里的频域是从零开始,所以显然频域取横轴有必要从0开始
figure(2);
stem(Frequence1,abs(b)/(length));
xlabel('f(Hz)');
ylabel('FFTAmplitude');

最后

以上就是怕黑黄豆为你收集整理的频谱泄露栅栏效应及其解决方法的全部内容,希望文章能够帮你解决频谱泄露栅栏效应及其解决方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部