抑制直流的良好FFT窗口功能是什么?


9

我正在使用FFT分析本质上是信号的功率包络(有关包含项目的信息,请参见此处),并且由于功率数始终为正,因此为了消除直流分量,我想使用一个窗口与通常的全正函数相比,正负函数为50/50。

我已经采用了“ 平顶 ”功能,消除了a0偏差并将其从余弦转换为正弦,但是我不确定这是最佳的(甚至是有意义的)。

有什么建议吗?


9
只是在开窗前减去均值?
endolith

Answers:


2

最常见的连续窗口函数(冯·汉恩等)的一阶导数将拒绝DC,但仍具有与原始窗口函数相似的幅频响应。因此,如果与阶段无关,则仍然可以使用原始的“好”标准进行窗口选择。


2
尽管此响应基本上是正确的,但更多是评论,因此对其进行扩展将非常有用。
声子

但是,它确实在一定程度上解决了我的问题。
Daniel R Hicks

1
是否有理由这样做,而不是仅在开窗前减去均值?
nibot 2012年

如果JasonR的答案是正确的,那么通过窗口函数拒绝DC(并且仍然获得良好的频谱估计)的想法将行不通。
nibot 2012年

@nibot:一个可能的原因可能是不可能进行加和减(例如,在某些固定的硬件管道或延迟中不可用。)
hotpaw2 2012年

7

如果您要对具有大直流分量的信号进行频谱分析,并且想要抑制该直流峰值,那么窗函数就不是您想要的。正如其他一些答案所指出的那样,高通滤波器(或者换句话说,陷波频率为零的陷波滤波器)是一种合适的解决方案。

要了解原因,您需要考虑将窗函数应用于每个DFT输出的频率响应。DFT定义为:

X[ķ]=ñ=0ñ-1个X[ñ]Ë-Ĵ2πñķñ

DFT如何工作的一种解释是,在f s之间的等间隔频率上的一组滤波器ñfsfs2。重铸以上总和,如下所示:fs2

X[k]=n=0N1xk[n]

哪里:

xk[n]=x[n]ej2πnkN

因此,通过首先取所述输入信号生成的第DFT输出X [ Ñ ]在频率和相乘通过复指数- 2 π ķkx[n]产生下变频信号xk[n]。然后,将所得信号在N样本窗口上求和,以产生DFT输出X[k]。这实际上是一个移动平均滤波器(有时称为棚车滤波器),其脉冲响应可以描述为:2πkNxk[n]NX[k]

b[n]={1, x=0,1,,N10, otherwise

可以通过对该脉冲响应进行离散时间傅立叶变换(DTFT)来找到棚车滤波器的幅度响应:

|H(f)|=|sin(Nπffs)sin(πffs)|

f

x[n]

X[k]=n=0N1w[n]x[n]ej2πnkN=n=0N1w[n]xk[n]

xk[n]

|HF|=|w ^F|

w ^Fw[ñ]X[ñ]

因此,如果您确实只想消除信号的DC分量,那么可以通过其他类型的预处理(而不是时域加窗)将其删除。例如,您可以使用截止频率非常低的线性高通滤波器,或者首先从信号中减去估计的平均值。在这些方法之间进行选择应基于系统具有的其他约束。


3

我认为使用窗口功能不是消除DC的好方法。正如endolith所提到的,一种常见的方法是在开窗之前减去均值。另一种选择是在分析之前对信号应用高通滤波器,例如,截止频率约为10 Hz。


如果信号不以模拟形式存在,则不应用高通滤波器。但我相信您(&endolith)正确的做法是减去均值,特别是如果还使用一个将端点拉至零的窗口时。(考虑到我正在分析低至0.01 Hz的信号,高通滤波器将需要较低的截止频率。)
Daniel R Hicks

2
为什么您认为需要模拟信号来应用高通滤波器?创建数字HPF当然是可能的。
杰森R

@JasonR-我承认我对这些事情一无所知(我的信号课程是40年前的,就在FFT之前,等等),但在我看来,要创建一个数字高通滤波器我首先必须产生信号的傅立叶变换。
Daniel R Hicks

1
根本不是这样。您可以生成高通滤波器,也可以生成低通,带通等。实际上,有一些技术可以将低通滤波器原型转换为具有类似响应的高通滤波器。大多数用于滤波器设计的软件(例如MATLAB)可用于制作所有类型的滤波器。
杰森R

1
我不确定您对实现高通滤波器是否需要差分的印象。差分是高通操作,但不适用于高通滤波器(由于其频率响应为斜坡,因此会放大经常存在噪声的较高频率)。在维基百科的文章对高通滤波器将是一个良好的开端。
杰森R
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.