DFT - 用卷积去除谱域中的窗口效应

信息处理 fft 频谱 自由度 卷积
2022-01-08 10:50:14

我正在考虑 DFT 窗口主题,我想到了一个想法。DFT 将产生与所用窗口的频谱卷积的信号频谱,因此具有主瓣和旁瓣。

我认为可以通过再次对信号和窗口频谱幅度进行卷积来消除信号频谱上的窗口效应,并且它确实有效,如下图所示。

在此处输入图像描述

左边是使用汉宁窗生成的原始光谱。右边是由汉宁窗的 DFT 卷积的频谱。顶部是频谱本身,底部是 MATLABfindpeaks结果。

我从来没有读过任何关于这种技术的东西,但我很确定我在那里没有发明任何东西。所以我想知道在频谱上进行这种处理是否有好处,或者是否有我没有看到的缺点。

据我所见,这有助于峰值检测,正如我们在上一张图片中看到的那样。此外,正如我们在下面的 2 张图片中看到的那样,看起来光谱有点失真。

在此处输入图像描述 在此处输入图像描述

其中蓝色图是光谱,红色图是卷积后光谱。

  • 有没有想过这个?
  • 这种后 FFT 卷积是否会出现问题?
  • 有没有处理这个问题的论文?

编辑

您可以在此处找到将生成以下图表的脚本:

在此处输入图像描述

4个回答

实际上,您的建议有一个缺点:您显示的信号都非常清楚地划分为它们的频率分量,但一般来说,现实生活中的信号往往更嘈杂。

根据应用的不同,您需要尽可能多的泄漏衰减(转换频谱中信号频率的更高主瓣/更小的旁瓣),或者作为另一个示例,可能需要尽可能窄的主瓣。

在您的图中,可以看出用窗口平滑幅度谱与这些相反:主瓣变得越来越宽,而泄漏产物来自转换有限时间信号的功率增益。应用于噪声信号,这将产生明显的缺点。

但是,您的建议对于峰识别仍然非常有用!

忠实于“通过卷积去除频率域中的窗口效应”这一主题(尽管 OP 可能想要实现其他目标或类似目标),但我觉得要添加我对这个特定主题的个人经验的评论。

通常我需要在频域中删除一个 Hann 窗口,在默认使用 Hann 窗口帧的 STFT 框架中工作,以进行高级频谱处理,其中输入频谱被预期为非窗口(例如,重叠保存卷积或过滤)。

一句话:是的,你可以。尽管在数学上删除一个窗口(在时域或频域中)意味着重建永远丢失的数据,但实际上你可以用可能的最小损失来重建数据。

让我们看一个 Hann(升余弦)窗口。它的时域公式是 y=(1-cos(pi*x))/2,其中 x 的范围从零到并不包括一帧。其对应的频域表示为bin0=(0.5,0i),bin1=(-0.5,0i)。要消除其在时域中的影响,您可能只想将信号除以上述窗口函数。要在频域中做同样的事情,您可以简单地将要开窗的频谱与所述函数的倒数的频谱进行卷积。由于这个函数在两端都是零(实际上它在数学上只在第一点为零,除非舍入误差),为了避免无穷大,你可以简单地用一个大的值交换无穷大,比如 10000 左右。这种卷积的结果是未加窗的频谱。通过将其转换回时域,

不过,也许您不能删除矩形窗口,因为理论上将大面积信号乘以零所丢失的数据量是不可能恢复的。但我认为这取决于频谱内容。例如,如果它是一个普通正弦曲线的频谱,通过与一个函数的频谱进行卷积来去除矩形窗口模式,该函数的频谱是矩形为零的高值,而矩形是一的高值(即它的倒数),您仍然可以(基本上)获得正弦曲线的频谱来重建整个信号。

更新:我添加这个以防将来有人通过谷歌搜索可能会在这里结束。此外,这是我通过努力提出的关于高级光谱操作的非常具体的内容,据我所知,在任何地方都没有涉及。

可以通过频域中的一些非常简单的操作仅丢失第一个样本来移除汉恩窗,而无需借助卷积或转换到时域来除以倒数窗函数,这两个过程都涉及不必要的精度损失。

作为前提,仅从信息的角度来看,当您应用 Hann 窗口时

(1-cos(x*PI2/z))/2 0<=x<z

对于 z 个样本块,您只会丢失一个样本:第一个样本,因为只有在 x=0 时,窗口函数才为零,因此该样本将永远丢失。因此,如果您接受您将永远无法恢复第一个样本,那么以下伪代码将完美地删除以前在频域中应用的 Hann 窗口。

S[] 是半复频谱(仅正频率,从 bin 0 = DC 到 bin z/2 = Nyquist)到“去窗”。s 和 k 是实变量。M,P 和 TMP 是复变量。z 是帧大小。nb 是等于 z/2+1 的 bin 数

s=0
k=1
iterate cnt from nb-2 to 1
{
  s = s + im(S[cnt]) * k
  k=k+1
}


im(S[0]) = -2 * s / z
P=0
M=0
iterate cnt from 0 to nb-1
{
  TMP = S[cnt] * 4
  P = P + M
  S[cnt] = P
  M = M-TMP  
}

S[0] = S[0]/2
S[nb-1] = S[nb-1]/2

如前所述,第一个时域样本将保持未定义。如果需要,它的值可以很容易地被发现和更改,但仍保留在频域中,请记住,第一个时域样本的值等于频谱箱的所有实部的总和。

这种技巧只能应用于 Hann 窗,因为它的频谱只是由两个 bin 组成,一个 DC 和一个单一频率分量

这是一个很好的问题和很好的洞察力,我很确定其他人也有过。频域中的反卷积就像在时域中相乘,如果您在频域中对Hann窗的效果进行反卷积,则就像您在时域中除以 Hann 窗的效果一样。在 Hann 窗口变为零的尾部,除以一个太小的数字而不必担心。

通常会留下窗口效果,因为如果您要转换回来,您可能需要时域中的窗口效果。或者,如果您从不转换回来(这是分析或建模 alg,而不是修改 alg),那么您只对作为这些峰属性的参数感兴趣,您只需处理与已知卷积的已知效果内核,这可能会以确定的方式修改提取的参数。那么您只需在提取的参数中进行补偿。

最后,根据您在做什么,您可能需要考虑使用高斯窗口进行分析。具有非常小的旁瓣问题,并且在线性条件下(如滤波器),每个窗口正弦波在转换回时域时保持窗口形状。该窗口可以撤消,并在转换回时域后应用 Hann 窗口。

您用于平滑频谱的技术通常在分析频谱本身时使用,并且您不关心时域中的影响(例如,进行基于频率的信号检测或带宽测量)。甚至没有要求用于平滑的窗口与时域中使用的窗口相同。在 DFT 之前使用时域窗口的主要原因之一是最小化 DFT 在信号末端假设的环绕中的不连续性(DFT 本质上是圆形的)。频域平滑的目的是为了便于分析,例如峰值检测或带宽测量。一个窗口的“最佳”窗口可能不是另一个窗口的“最佳”窗口。事实上,我从未见过用于频谱平滑的窗口的 DFT。