你知道一些实现IIR滤波器的C++库吗?我需要一些类似于Matlab的滤波器(B,A,X)函数。虽然这不是必要的,我更喜欢IIR直接形式2的实现。
ckocjqey1#
有octave,一个开源的MatLab克隆,你可以使用它的实现(但它可能需要你使用它的特殊矩阵类型)。搜索“C++ IIR filter”会找到一堆其他项目,例如:
关于这一主题还有各种各样的书籍,例如:
一般来说,IIR滤波器的实现非常简单。数值鲁棒性和计算机硬件的有效使用则比较困难,但它们需要您的特定应用知识(例如重采样等),因此并不真正适合库实现。
ws51t4hk2#
你也可以试试GNURAIO(gnuradio.org),它包含各种软件定义无线电的组件(包括IIR滤波器)。它最初都是C++,现在是一堆用C编写的模块,带有python绑定,但你应该仍然可以直接使用C代码。
lrl1mhuk3#
你可以在sourceforge上试试SPUC项目,他们确实有一些DSP函数,但是文档很少。
ctrmrzij4#
gtkIOStream在C++中有IIR和IIRCascade类,非常容易使用。例如,首先示例化IIR class,然后加载A和B向量(注意,如果加载A和B矩阵,则指定了一组要并行应用的过滤器):
IIR iir; iir.reset(B, A);
然后将输入(x)过滤为输出(y):
iir.process(x, y);
here提供了使用IIR类的完整示例。如果需要级联IIR滤波器,则可以使用IIRCascade class。首先,示例化该类,并使用矩阵B和A重置滤波器系数,这两个矩阵指定了要依次应用于同一输入信号的多个滤波器:
IIRCascade iir; iir.reset(B, A);
同样,处理过程很简单:
here提供了使用IIRCascade类的完整示例。
4条答案
按热度按时间ckocjqey1#
有octave,一个开源的MatLab克隆,你可以使用它的实现(但它可能需要你使用它的特殊矩阵类型)。
搜索“C++ IIR filter”会找到一堆其他项目,例如:
关于这一主题还有各种各样的书籍,例如:
一般来说,IIR滤波器的实现非常简单。数值鲁棒性和计算机硬件的有效使用则比较困难,但它们需要您的特定应用知识(例如重采样等),因此并不真正适合库实现。
ws51t4hk2#
你也可以试试GNURAIO(gnuradio.org),它包含各种软件定义无线电的组件(包括IIR滤波器)。它最初都是C++,现在是一堆用C编写的模块,带有python绑定,但你应该仍然可以直接使用C代码。
lrl1mhuk3#
你可以在sourceforge上试试SPUC项目,他们确实有一些DSP函数,但是文档很少。
ctrmrzij4#
gtkIOStream在C++中有IIR和IIRCascade类,非常容易使用。例如,首先示例化IIR class,然后加载A和B向量(注意,如果加载A和B矩阵,则指定了一组要并行应用的过滤器):
然后将输入(x)过滤为输出(y):
here提供了使用IIR类的完整示例。
如果需要级联IIR滤波器,则可以使用IIRCascade class。首先,示例化该类,并使用矩阵B和A重置滤波器系数,这两个矩阵指定了要依次应用于同一输入信号的多个滤波器:
同样,处理过程很简单:
here提供了使用IIRCascade类的完整示例。