【发布时间】:2013-11-29 04:06:42
【问题描述】:
我正在尝试将我在 Matlab 中设计的 IIR 滤波器实现到 C++ 程序中,以从波形文件中过滤掉不需要的信号。 Matlab 中的 fdatool 生成了这个 C 头文件来使用(它是一个带阻滤波器):
#include "tmwtypes.h"
/*
* Expected path to tmwtypes.h
* C:\Program Files (x86)\MATLAB\R2013a Student\extern\include\tmwtypes.h
*/
const int al = 7;
const real64_T a[7] = {
0.9915141178644, -5.910578456199, 14.71918523779, -19.60023964796,
14.71918523779, -5.910578456199, 0.9915141178644
};
const int bl = 7;
const real64_T b[7] = {
1, -5.944230431733, 14.76096188047, -19.60009655976,
14.67733658492, -5.877069568864, 0.9831002459245
};
经过数小时的深入研究,我仍然无法找出使用这些值来确定 W 值的正确方法,以及如何使用这些 W 值来正确计算我的 Y 输出。如果有人对这些值应该用于进行所有这些转换的顺序有任何见解,那将是一个很大的帮助。
到目前为止,我开发和尝试的所有方法都不会生成有效的波形文件,标头值都可以正确转换,但媒体播放器无法评估除此之外的所有内容。
谢谢。
【问题讨论】:
-
也许这会有所帮助。 mathworks.com/help/matlab/ref/filter.html 或者您是否希望在 C++ 中实现它,因此不能使用 MATLAB 的内置函数?在这种情况下,您需要找到一个与 filter() 类似的 C++ IIR 库
-
我必须为这个项目用 C++ 实现它
-
我已经看过这些链接,但没有一个回答我的问题。一个已经工作的 c++ 程序可能会有所帮助,但我还没有找到任何有意义的高阶 IIR 滤波器的代码。我真的只是在寻找如何使用系数来查找 W 值以及如何使用这些系数来查找 Y(输出)值而不是一个正常运行的程序