随机二进制数据的 FFT

信息处理 频率 傅里叶变换
2021-12-29 22:08:44

我正在尝试理解 FFT 和二进制数据。

假设我有一系列随机二进制数据,以 400Hz 的重复率(间隔时间为 0.0025s)测量。我总共有 12489 个点,对应的总测量时间约为 31 秒。

我希望能够更多地了解我期望这些数据的 FFT 是什么样子。

我想了解一些事情的重要性:

  • FFT 后数据的平均幅度应该是多少?
  • 不是随机的,而是由 1,0,1,0,1,0 个数据(12489 个点)组成的二进制数据的最大幅度的意义是什么。这如何帮助我找到我的 y 尺度?
4个回答

我自己也有类似的问题,所以我创建了一个 html 演示来测试它。

我认为您可能会发现它有助于理解 FFT 实际在做什么,因为您还可以阅读和编辑源代码。

https://seanwasere.gitlab.io/FFTBinary

FFT二进制演示

该演示正在对二进制数据进行 FFT 分析。1 和 0

在我的演示中,我有 1024 位,我将它们转换为 8 位 wav,然后使用浏览器内置的音频 api fft 分析功能对其进行分析。Firefox 浏览器在我的情况下效果最好。

8位wav是

  • 1个频道
  • 采样率 48000
  • 1024 位 = 0.021333333333333332 秒长
  • 1s 和 0s 实际上在幕后转换为 256s 和 128s

在用户界面中有 4 个面板

  • 第一个是绘制为频谱图的二进制数据的 FFT 结果,
  • 第二个是绘制为波形的 FFT 结果。它本质上是三角形尖峰或正方形,具体取决于序列 0,1,0 或 0,1,1,0。
  • 第三幅图是在 FFT 分析之前转换为波形的实际二进制数据的视图。
  • 第 4 个面板是您的选项,您可以
    • 通过使用模数设置为每 N 位有一个“1”,
    • 和/或播放随机的 1 和 0,我称之为二进制白噪声。
    • 设置 FFT 缓冲区大小,较小的数字(例如 128)给出较低质量的输出,但计算速度要快得多。

源代码是 MIT,因此您可以使用它。

首先:当您实际上是指DFT (离散傅里叶变换)时,不要说 FFT (FFT 只是一种有效计算 DFT 的算法)。

第二:随机数据的傅里叶变换(随机过程)很难使用/解释。您应该首先尝试了解确定性数据的 DFT。

第三:在大多数典型应用中,您不会对“完整信号”(12489 个样本=31 秒)进行傅里叶变换,而是将其分割为短“帧”并获取每帧的 DTF。

FFT 后数据的平均幅度应该是多少?

您必须记住,DFT 不是真实的,而是一个复杂的信号。如果您只对大小感兴趣,当然您可以取它的(平方)绝对值。现在,如果信号是随机的,这相当于得到一个周期图,它是 对信号频谱密度的估计。随机信号的“频谱”(非随机)是傅立叶变换,不是信号本身的,而是自相关函数的。非正式地,它测量信号在每个频带中具有多少“能量”。

所以,你的问题的答案并不简单。唯一可以提供帮助的简单属性是Parseval 定理:这表示频谱图的均方值等于信号的均方值(“总能量”),经过适当归一化。

另一个属性(对于确定性信号)是 DFT 的零频率值是信号的平均值,经过适当归一化。

不是随机的,而是由 1,0,1,0,1,0 个数据(12489 个点)组成的二进制数据的最大幅度的意义是什么。

这样的信号几乎所有的能量都在最高频率(加上一个零频率分量,由其平均值 = 1/2 给出。因此,除了频率零和 k = N / 2(对应于最大频率)。

输出将取决于创建二进制点的随机定律的确切类型。

对于采样信号的平均和最大幅度,您可以应用Parseval 的恒等式,该恒等式表明输入信号的能量被保留(在一维中高达 $2 π 常数因子)。在分析中只有一个非零频率的情况下获得最大峰值。2π constant factor in 1D). The maximum peak is obtained in the case where there is only one non-null frequency in the analysis.

在数据是随机的一般情况下,Wiener-Khinchin 定理告诉您功率谱的幅度应该是多少,因为它是自相关函数。

在您的情况下,数据本质上是以 400 Hz 采样的 200 Hz 正弦曲线,即: $$ x[n] = x(n T_s) = 0.5\cos(2\pi (200)t) + 0.5 \bigg|_ {t = n T_s} = 0.5\cos(\pi n) + 0.5 $$

x[n]=x(nTs)=0.5cos(2π(200)t)+0.5|t=nTs=0.5cos(πn)+0.5

在这种情况下,您将在频谱中看到一个直流分量 (0 Hz) 和一个 200 Hz 分量。

直流分量的幅度将为 12489/2,因为您只是将 0.5 与 12489 相加。观察到的 200 Hz 分量的幅度将取决于 FFT 长度。如果将零填充到大于 12489 的偶数,则 200 Hz 分量的高度也将为 12489/2。