确定水槽中水波的 FFT 长度(波浪设施)

信息处理 fft 采样 频率 解析度
2022-02-21 18:12:56

很快,我将在一个波浪设备(水槽)中为我的硕士论文进行实验。我想分析波谱(振幅和能量密度)。

造波器的时间步长(或“精度”)默认为 dt = 0.001 s。

测量仪器(波计)的采样频率为 100 Hz(之前为 25 Hz)。

我将从双色波开始,它或多或少可以被视为确定性的。我想尽可能地防止频谱泄漏。

不同实验的基频不同:波周期约为 2.5 秒的短波。造波器包括束缚波(次谐波),波周期 Tbound 比双色波列中短波的差频高一倍。

到目前为止,以前的学生已经将 FFT 长度设置为 2 的幂。根据我的阅读,这对于 FFT 的现代实现是不必要的。

以前学生的一个例子:

Fs = 25赫兹,

N = D*Fs = 2^13(2 的幂)

这导致实验持续时间为 D = N/Fs = 327.68 s

频谱分辨率为 df = 1/D = 0.00305175781 Hz。

为了避免频谱泄漏,如果我是正确的,我所有的波分量的频率应该是这个数字的倍数。

由于我已将我的波形计设置为 100 Hz 的采样频率,我想知道是否可以将我的持续时间增加到 D = 1000 s,因此 N = 100*1000 并且不是 2 的幂。

得到的光谱分辨率为:df = 1/D = 0.001 Hz,我将把所有波分量的频率四舍五入到这个数字的倍数。

1个回答

所以,最好的消息首先:

奈奎斯特是你的朋友!只要您的采样率足够高,带限模拟信号中包含的所有信息都可以用数字化信号来表示。

换句话说:你不能采样太快,即使采样率和信号频率的比例不合理,你也不会丢失信息。

因此,您可以先遵循示例,然后再提问哲学¹。

那么,是的,如果您希望您的周期信号在您的 DFT 中占据奇异区间,则 DFT 长度需要是您的周期的整数倍。是的,现在 FFT 可以用更少的限制长度来实现²。您的10N=2N5N当然是 FFTW 涵盖的。

我想鼓励您不仅将 DFT 视为频率估计器。

MUSIC 能够计算任意频率的频谱(即,这是一种算法,你可以问“嘿,f=0.123141414288 的幅度是多少?”)而不是给你一个频率均匀的幅度矢量,如果你知道你'正在寻找频谱中固定数量的“峰值”,ESPRIT 可能是你的事。这些算法的准确性不受频率正交基的限制,而是取决于您估计信号自相关的能力——您可以通过添加更多观察来提高自相关。

所以,也许你想做以下事情:

  • 将 DFT 应用于您的信号,以“粗略了解”您的能量在频率中的位置
  • 使用 MUSIC 以非常精细的分辨率围绕这些感兴趣的频率生成(伪)频谱
  • 一旦您知道频谱中预期有多少音调,就可以将 ESPRIT 投入到问题中,以准确找到信号中的主要频率数量


¹:我需要制作“SDR:先打样,然后再提问”的 T 恤。

²:FFTW 文档(据我所知)并没有真正具体说明,但在半句话中声称事情最适合可以分解为主要因素的长度7; 主页上某处引用的一篇论文提到,您最多可以有两个因子 11 和一个因子 13,以获得优化的 FFT。该信息来自我的脑后,可能是错误的或过时的,即使完全错误:通过矩阵向量乘法完成的绝对幼稚的 DFT不会给您的 PC 带来难以承受的负载。
因此,只需使用您需要的 DFT 长度,除非您需要转换的向量有数百万个值。
并且,直接来自 fftw.org 主页:任意大小的转换。(具有较小素数的尺寸是最好的,但 FFTW 使用 O(N log N) 算法,即使是素数。)
所以,假设你正在做106变换,而 FFTW 不能做得更好O(NlogN),这将是每个转换数百万个浮点运算的顺序。假设您的 PC 已经使用了大约 20 年,并且每秒可以处理 1000 万次这样的数据——您是否需要担心?