【问题标题】:chebyshev low pass filter?切比雪夫低通滤波器?
【发布时间】:2011-06-18 18:10:39
【问题描述】:

我正在为 Windows 窗体项目寻找数字/模拟切比雪夫低通滤波器,最好使用 c#、c++ 或 c。伪代码也会很有帮助。

【问题讨论】:

  • 究竟是哪个过滤器? (顺序?)如果您知道参数,您可以使用诸如 FFTW (fftw.org) 之类的 fft 库来实现它
  • 这是作业吗?如果有,请明确说明。
  • 您在寻找什么样的过滤器实现:IIR(顺序?,哪种形式)、FIR、FFT 重叠保存/添加或???

标签: filter signal-processing


【解决方案1】:

这是一个使用 NMath 的 fft 的高效 c# 代码示例chebyshev filter。生成滤波器系数并不难,也可以通过在线或参考书轻松完成。

【讨论】:

  • 虽然 FFT 可以为某些过滤器提供有效的实现,但简单地执行 FFT -> 块乘法 -> IFFT 本身不太可能得到您想要的结果。如果您打算使用 FFT,您几乎肯定会想要处理滤波器稳定以及如何重叠来自多个 FFT 的结果。
【解决方案2】:

这是 Tony Fisher 的一个网络应用程序,它计算数字滤波器(常见的 FIR 和 IIR 类型)的系数,绘制滤波器幅度和相位响应,甚至创建一个 ANSI C 函数模板:

http://www-users.cs.york.ac.uk/~fisher/mkfilter

还有模拟滤波器设计:

http://www-users.cs.york.ac.uk/~fisher/lcfilter

【讨论】:

  • 感谢您的链接,但我不确定某些输入。你能给我一个计算贝塞尔滤波器系数的输入和输出的例子吗?
  • 应该有多少个系数?当我指定 3 阶时,它会生成 9 个数字:
  • 6.69292825e + 00 1.00000000E + 00 3.00000000E + 00 3.00000000E + 00 1.00000000E + 00 1.00000000E + 00 1.00000000E + 00 3.00000000E + 00 1.00000000E + 00 1.00000000E + 00 3.20403524C-03 -1.59857411C-02 -1.86380876S-02 -1.86380876S-02 -1.86380876S-02 -1.86380876S-02 -1.00000000E + 00我正在使用与 Paul R 建议的 butterworth 页面上的算法相同:stackoverflow.com/questions/344343/low-pass-filter-software 使用这些数字的正确方法是什么?
  • 注意:Fischer 先生去世了,这些链接现在会将您重定向到他在 Github 上的代码存储库。
【解决方案3】:

过滤器是切比雪夫的事实只是决定了过滤器系数。实际的实现几乎与系数无关。您需要一个像样的滤波器设计包来生成系数(因为系数取决于各种滤波器参数和选择的采样频率),然后由您决定如何实现实际滤波器,但有各种标准形式。

如果您认真对待这类事情,您可能需要一本或两本像样的 DSP 教科书。

【讨论】:

  • 谢谢!你的评论对我帮助很大。我完全不确定过滤器将如何在软件版本中实现。现在我正在尝试学习如何做一个贝塞尔滤波器,你对如何学习它有什么建议吗?
  • @Tony:同样的评论适用——您可以对 Butterworth、Chebyshev、Bessel、椭圆或任何其他类型的滤波器使用相同的实现——所有的变化都是系数(以及阶段)。通常,您使用滤波器设计包来生成系数,然后将它们插入。有关滤波器设计程序的一个示例,请参见 @eryksun 的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-29
  • 2011-05-29
  • 2019-04-29
  • 2015-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多