STFT 对时变信号具有良好的时间和频率分辨率

信息处理 傅里叶变换 功率谱密度 窗函数 stft
2022-02-05 14:14:37

我试图确定频率随时间变化的噪声信号的主频率。理想情况下,我想尽可能快地检测到频率的变化——比如 50Hz 的更新率,但我也想尽可能接近实际的信号频率。我正在寻找的信号在 100Hz 和 300Hz 之间变化,我以 1Khz 对信号进行采样。

目前,我正在使用长度为 N 的 STFT,每 N/2 个样本应用一次(因此跳数大小为 N/2),并在输入上使用 Hanning 窗口。然后,我通过 Welch 的方法对 3 个重叠帧进行平均,以实现对我正在寻找的信号的最终估计。

我知道我可以获得的最大频率分辨率是 1000/N,所以我使用 Jain 的方法在 bin 之间进行插值。我也知道我可以获得的最大时间分辨率是 1000/N Hz。我知道这两个人很紧张。

有时信号丢失。为了检测到这一点,我正在计算标准偏差以及三个重叠帧的平均值,并使用该比率来确定“噪音”

我的问题是:

  • 这是一个有效的程序吗?
  • 考虑到输入信号的变化,在这种情况下使用 Welch 是否有效?
  • 我在平均正确的数据吗?
  • 时间分辨率真的是 1000/N 还是我可以在 1000/2N Hz 下产生更好的输出?
  • 更多重叠会有所帮助吗?如果有怎么办?
  • 我的噪音计算是否有效?

我非常依赖https://holometer.fnal.gov/GH_FFT.pdf

2个回答

我认为您将信号拆分为个STFT 间隔,重叠 50%,然后在每个间隔上使用 Welch 方法找到功率谱密度 (PSD)。x[n]N

如果这是正确的,我认为这种方法是有效的,

但我认为您可能会对“重叠”感到困惑,因为这里有两个在起作用。当您使用 Welch 的方法时,您将 STFT 间隔拆分为更小的间隔,从中计算周期图,然后对这些进行平均,为您提供该 STFT 间隔的 PSD。

所以这里有一些变量可以改变

  1. STFT 间隔的长度,N
  2. STFT 间隔的重叠
  3. 韦尔奇周期图的重叠

STFT 的长度越小,您的“时间分辨率”就越不平滑,因为您在更短的时间内进行平均,这将使您能够挑选出频率的突然变化,但更少的数据显然会产生某种负面影响(可能是较低的频率分辨率,但我不确定)

我认为您与 STFT 重叠的程度与此处的“时间分辨率”非常相关,因为您可以将其想象为,对于您窗口化的第一个间隔,您会在但是你可以很容易地将下一个间隔设为这两个明显重叠取决于,但最好只是想想你沿着并计算每个 PSD,因此从这个意义上说,您的“时间分辨率”可以与您的采样率相同,但通过重叠使其平滑。 [x[0]x[N]][x[1]x[N+1]]Nx[n]

周期图的重叠使频率分辨率平滑,但也降低了噪声

我不确定 Jains 方法是什么,但如果您想查看更高频率分辨率的方法,我会使用 Hilbert-Huang 变换查看瞬时频率,请参阅本文进行一些比较

我将尝试根据一些评论和我自己的进一步调查来回答我自己的问题

Is this a valid procedure?

它不是无效的,但它不一定能达到我正在寻找的结果。Welch 用于通过平均较短长度的 DFT 来提高 DFT 中的 SNR。您使用的 DFT 越短,结果越好,但反之亦然 - 您使用的较短长度的 DFT 越少,改进越可以忽略不计,对于我的情况 - 平均 3 个周期图,噪声的减少是1/3. 此外,连续平均 DFT 通过增加延迟来降低时间分辨率。就我而言,因为时间分辨率很重要,所以使用 Welch 基本上会适得其反。

Is using Welch in this context valid given that the input signal varies?

只要输入信号对于使用的短 DFT 的数量基本上是固定的 - 您使用的 DFT 越多,这种情况就越不可能成立。

Am I averaging the right data?

是的,但不足以产生影响

Is the time resolution really 1000/N or is the fact that I can produce 
output at 1000/2N Hz better?

我相信这种方法会使时间分辨率变得更糟

Would more overlap help? If so how?

Is my noise calculation valid?

是的,但是考虑到将噪声与信号区分开来的平均帧数很少,这将是棘手的。

所以总而言之,我最好使用短时傅立叶变换(STFT)并使用带有插值的重叠跳跃窗口来提高更新率并提高频率分辨率