【问题标题】:C++ FIR noise filterC++ FIR 噪声滤波器
【发布时间】:2015-09-02 05:55:28
【问题描述】:

我正在挖掘一些关于在 C++ 中从我的 IQ 数据样本中过滤噪声的信息。

我了解到这可以通过使用一个简单的过滤器来完成,该过滤器计算最后几个数据样本的平均值并将其应用于当前样本。

您对这种过滤有任何进一步的经验,或者您是否推荐使用一些现有的 FIR 过滤库?

感谢您的 cmets!

【问题讨论】:

  • 您需要更具体地了解噪声的性质、信号的性质以及最终目标是什么。
  • 我的工作与 SDR 电台有关。我正在使用 GNU 无线电软件通过我的加密狗捕获所有类型的无线电信号(无论调制方式)并将它们保存为二进制文件。包含 IQ 数据样本的二进制文件随后用作我的独立软件的输入,该软件执行其余的信号处理,并且应该能够过滤在传输过程中添加到信号中的噪声。
  • 听起来你需要先掌握一些基本理论,然后再开始尝试编写任何代码。我建议将问题移至dsp.stackexchange.com,因为它更适合该网站,您会在那里得到更好的答案。
  • 谢谢保罗,我不知道这个子域。会试试的。

标签: c++ filtering signal-processing


【解决方案1】:

不幸的是,这并不像“只需获取一些库,它就会为您完成所有工作”那么简单;数字滤波器是一个相当复杂的课题。

  1. 仅当您的测量以固定的时间间隔(在数字过滤器中称为“采样率”)时,才可以轻松地将数字过滤器应用于您的数据。否则(如果时间间隔不同),应用数字滤波器并非易事(我怀疑您可能需要 FFT 来执行此操作,但我在这里可能错了)。

  2. 数字滤波器(IIR 和 FIR)的有趣之处在于,只要您知道系数,就不需要库,自己编写很容易(例如,请参见此处的第一张图片:https://en.wikipedia.org/wiki/Finite_impulse_response:看起来很简单,对吧?);它正在寻找棘手的系数。

  3. 作为找出系数的先决条件,您需要对滤波器有很多了解:您需要知道您需要什么样的滤波器(如果是在解调之后 - 您可能需要低通,否则请参阅下面 MSalters 的评论),您需要了解“拐角频率”是什么,并且您需要了解如何将这些频率映射到您的样本(例如,您可以说您的样本每秒出现一次 - 或任何其他速率,但此选择会影响您所需的“拐角频率”)。一旦您对“在数字滤波器方面需要什么”有了这种理解 - 查找系数非常容易,您可以在 MatLab 中完成,或者使用在线计算器,在 Google 中查找“数字滤波器计算器”。

【讨论】:

  • 感谢您的解释 :) 我在接收端的采样率始终是固定的。但我将不得不多读一些关于其余部分的内容。
  • 我不确定低通滤波器是否适合过滤 FM 信号中的噪声,更不用说更复杂的调制了。在任何情况下,低通滤波器只适合解调之后。在此之前,您需要一个带通滤波器。对于任何扩频技术,带通滤波器都需要非常宽,这意味着它仍然会通过大量噪声。
  • 我正在开发的应用程序不是为解调信号而设计的,它应该只能自动检测调制类型。基本上它应该能够决定输入信号何时被调制:AM、FM、CW、SSB、QAM(QPSK 等)、BPSK
  • @MSalters:是的,你是对的。将更新答案以使其清楚,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-05
相关资源
最近更新 更多