在软件中对 Wow 和 Flutter 信号进行 IQ FM 解调

信息处理 声音的 正交 特别提款权 调频
2022-02-27 04:20:50

背景:

我有一个记录设备,它展示了 Wow 和 Flutter,或周期性频率偏差。我使用此设备从磁带胶片上录制校准的 3.15kHz 测试音,以在我的 PC 上生成 .wav 文件。

在理想情况下,对 .wav 文件中包含的数据进行 FFT 会导致在 3.15kHz 处出现单个尖峰。在现实世界中,由于机械误差,如磁头刮擦、膜辊偏心、电机振动等,都会导致该频率出现偏差,这些都会导致胶带薄膜加速或略微减速。

这些偏差称为 Wow 和 Flutter,并显示为由 3.15kHz 测试音调频率调制的误差。

我想做的事:

假设我有 .wav 文件,以 48kHz 采样。假设它包含一个载波频率为 3.15kHz 的 FM 波形和一个带宽约为 200Hz 的消息信号。

我想构建一个python脚本来分析和解调信号,只给我200Hz的信号。我已经在互联网上尝试了几种模型来模拟 PLL、斜率检测器等。但是这些都是硬编码的,难以理解,我似乎无法将它们塑造成在我的应用程序中使用。

我想尝试实现一个 IQ FM 解调器,但我无法找到一个很好的参考来说明如何通过 IQ 信号调制 FM 波,而且我绝对找不到用于解调的。

如果我正在尝试做的事情有任何问题或障碍,有人可以指出我正确的方向并立即让我知道吗?

2个回答

频率是相位的导数(或一阶差分)。要获得可以从中获取相位角的 IQ 信号,首先将波形文件样本乘以 3.15kHz 的余弦和频率为 3.15kHz 的正弦波。这会将您的信号外差到基带 IQ。使用 IQ 数组的 atan2 来获得角度数组,取连续角度之间的第一个差异,并注意相位差的大跳跃可能需要展开到更小的范围。然后是低通滤波器(截止频率为 200 Hz)。那是一个简化的 FM 解调器。看看这看起来是否接近您正在寻找的东西。

在这篇文章中有几个 FM 解调器解决方案,我们这里的许多人已经回复了这可能会对您有所帮助:https ://electronics.stackexchange.com/questions/293706/fsk-demodulation-using-dsp/293723?noredirect=1#评论675738_293723

除了该链接中包含的内容之外,鉴于您在 I 和 Q 信号中所描述的内容,并且如果您确实在对数据进行后处理并且没有尝试进行有效的实施,我可能会执行以下操作:

进行单面下转换以通过 mutliplying 删除您的运营商ej2π3150t. 这会将您现在以 3.15 KHz 为中心的调制信号移动到 DC。

您需要了解信号的调制带宽,然后在进行实际 FM 解调之前低通该基带信号(此步骤很重要,因为解调过程是一个高通,会放大更高频率的内容!)。您的实际带宽将取决于调制指数(这是调制信号的速率与信号幅度导致频率偏离的量之比:fmodfdev)。我认为您指定的 200 Hz 是调制信号的速率,所以关于带宽的问题是调制信号在频率上拉动您的载波频率有多远?有关粗略估计的更多详细信息,请参见 Carson 规则,这基本上是将调制速率添加到频率偏差以获得总带宽。通过这种方法或检查信号频谱确定带宽后,您希望对下变频信号进行低通滤波,使其合理地接近该带宽(单面),以最大限度地减少影响测量的带外失真。

然后通过使用 Phase = ATAN2(Q,I) 查看信号的展开平均相位,检查您没有明显的残余频率偏移(因为您的载波可能与您想象的不完全一样),如果在 Matlab 中展开(相位)。取一个移动平均线,以便您可以观察趋势-您的频率误差(因为除非您同步,否则我们无法与您的确切载波进行下转换)将是该趋势线的斜率(dϕdt)。使用我们用于下变频的相同指数旋转来消除大部分残余频率误差(只是在这种情况下,频率偏移会小得多,您需要根据趋势线的方向选择正数或负数。目标是明显地使相位的总体趋势变平,但不需要完全变平,因为任何残余斜率都只是频率偏移,这意味着最终解调信号中的直流偏移。

一旦趋势线合理地变平,您可以通过简单地取导数(数字差分连续样本)将此相位与时间的关系转换为频率与时间的关系,然后低通过最终结果。