计算iir滤波器的w个系数
calculating w coefficients for iir filter
我正试图将我在Matlab中设计的IIR滤波器实现到一个c++程序中,以从波形文件中过滤掉不需要的信号。Matlab中的fdatoil生成了这个C头以供使用(它是一个带阻滤波器):
#include "tmwtypes.h"
/*
* Expected path to tmwtypes.h
* C:Program Files (x86)MATLABR2013a Studentexternincludetmwtypes.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输出。如果有人对这些值应该用于进行所有这些转换的顺序有任何见解,这将是一个很大的帮助。
到目前为止,我开发并尝试的所有方法都无法生成有效的波形文件,头值都可以正确转换,但媒体播放器无法评估其他所有方法。
谢谢。
IIR过滤器是这样工作的:假设样本A和ceof的数组名为"c",则结果数组B为:B[i]=(A[i]*c[0])+(B[i-1]*c[1])+…+(B[n]*c[n])
请注意,只有最新的元素取自A。这更容易在原地完成,只需在移动时更新A即可。这些过滤系数非常剧烈,你确定你做对了吗?第一个也是对称的,这可能表明它是FIR滤波器。
在我看来,您有一个三极IIR滤波器,其系数为N阶实现(与一系列2阶部分相反)。由于这是带阻(或带通),多项式阶数是极点计数的两倍。
我不知道你所说的W值是什么意思,除非你试图评估这个滤波器的频率响应。
要计算Y值,如您所说,请参阅此链接以获取有关实现IIR筛选器的代码。请特别参阅N阶实现代码。
http://www.iowahills.com/A7ExampleCodePage.html
BTW:我假设这些是N阶系数,并对它们进行了模拟。我在0.05 Pi时得到了10 dB的陷波。听起来不错吧?
其中B6=0.9915141178644。。。b0=0.9915141178644
a6=0.9831002459245。。。a0=1
此外,你可能想在上发布这样的问题
https://dsp.stackexchange.com/
- C++ OpenCV 卡尔曼滤波器构造函数错误
- OpenCV的卡尔曼滤波器过渡矩阵如何处理时间(如t和t^2)进行运动预测?
- 如何使用中值滤波器算法去除胡椒噪声
- 用于检测特定频率的直接显示滤波器
- Opencv 平均滤波器提供的输出与 Matlab 平均滤波器不同
- 使用Kalman滤波器来filt噪声,而不会延迟OpenCV C
- 使用哪个 pcl 滤波器对点云进行下采样
- 按类型参数进行GTEST滤波器测试
- 卡尔曼滤波器 - 零预测点
- 将信号转换为梯形(梯形滤波器)
- 字符数组中的滤波器unicode字符
- 如何在C/C++中使用FFmpeg API覆盖滤波器
- 实现了用于滤波器设计的remez交换算法
- 如何在 VTK 中投射滤波器的输出,C++与 QT 一起使用?
- Gabor滤波器C (OPENCV):错误
- QSQLTableModel滤波器无结果
- 高斯滤波器核值
- 计算iir滤波器的w个系数
- IIR滤波器的优化
- IIR低通滤波器在c++中的实现