有没有从一组信号中提取参考 sin/cos 的好方法?

信息处理 matlab 信号分析 频率
2022-01-30 02:23:05

为了从一组采样信号中去除纯干扰,如果我知道干扰的确切频率,我可以简单地使用 I/Q 解调技术(即相量投影)来计算它并从信号中去除它兴趣。但我没有干扰的纯版本,所以我需要从数据中推导出它。

我知道这与时钟恢复有关,但由于信号记录长度有限,任何控制回路(例如,PLL 或 DLL)都会有问题。

到目前为止,我只是简单地将一个特别长的带通滤波、限制、带通滤波、I 参考的归一化序列以及之后的全通滤波/希尔伯特变换和 Q 参考的归一化组合在一起。它似乎有效,但它太过分了。如果有多个干扰源,情况就会变得复杂。

是否有更好/更简单的方法来提取这些参考?

如果不是,那么简单的带通滤波器有什么好的选择?(因为这些要求非常严格。)

如果这是在实时系统(连续数据流)中实现的,您会选择 PLL/DLL 路线,还是这种技术足够好甚至等效?


尽管消除这些类型干扰的最常用方法是使用陷波滤波器,但此类滤波器的脉冲响应中的振铃对于许多应用来说是不可接受的。

对于存在有意冲动的大型伪影的应用程序尤其如此。

1个回答

实现所需结果的最佳方法是估计干扰音的参数并将其从时域中的信号中移除。

为了让您开始了解如何进行此操作,我建议您阅读我的这两篇文章:

这需要逐帧完成,因此有一大堆实现细节可以发挥作用。我现在真的很忙,所以我稍后会回来进行更全面的解释。

对于两个 bin 频率公式,为了获得最佳结果,您需要将帧长度定义为整数 + 半个周期数。这样你只需要计算两个 DFT 箱。幅度/相位方法仅适用于两个箱,但您可能需要为此做四个。

鉴于您所说,这种方法应该是非常合理的。


我会陈述这一事实,因为您每个周期有 250 个样本。因此,假设您的目标是 2 1/2 个周期,这意味着帧长度为 625 个样本。该范围内的任何大小都会将干扰箱牢固地放在箱 2 和箱 3 之间(基于零的索引),而这些是您需要的唯一 DFT 箱,因此仅通过 FFT 计算两个箱的完整 DFT 效率低下。您拥有的持续时间越长,您在频率之间获得的 bin 分离越多,但除非音调稳定,否则 DFT 的工作效果较差。DFT 关心的只是样本数,而不是底层时间尺度。

频率的正确单位是每帧的周期数,它对应于 bin 索引或每个样本的周期数,您给出的值为 1/250。

示例代码来了,进一步的解释也来了。您需要考虑帧,在一组单独的缓冲区中构建干扰音的副本,因为您需要有重叠的缓冲区。更多细节也即将公布。


仍在处理我的两个 bin 编码。希望你也是。

您想将信号视为一系列帧。对于每一帧,您都将读取干扰音。有些帧会是好的读取,有些帧会是坏的读取,重要的是要有一个指标来告诉你每次读取的质量,这样你就可以设置一个阈值。

您将读取频率,并且幅度和相位最好以笛卡尔复数形式完成。您将希望在良好帧的跨度上插入这些值,以便为您提供参数以生成干扰信号的副本,以便您可以从信号中减去它。

正如我之前所说,可以通过在时域中通过平均帧重叠帧来完成重建,或者更好的方法是对正弦函数中的角度进行更高程度的近似。

这种方法对于缓慢变化的纯音应该很有效。(可能是音乐压缩算法的基础?)