在c++中不受欢迎的巴特沃斯低通滤波图

9的观点(30天)
你好,
我想删除一个高频噪声的ECG数据使用巴特沃斯低通滤波器的归一化截止频率0.05赫兹,采样率为500。使用Matlab我可以能够消除噪音成功按照上述规范。当我使用相同的系数在我的c++代码,我没有得到期望的输出,而不是随机图。我一直的工作,导致但是我无能。谁能帮我在整理出来。提前谢谢。

答案(1)

Sivapriya Srinivasan
Sivapriya Srinivasan 2023年2月28日
我明白 能够 删除 高频噪声的ECG数据 使用 MATLAB ,但不能 使用c++实现相同的。
你可以 实现 巴特沃斯低通滤波器 过滤器使用数字信号处理库 这是一个示例代码 没有 心电图数据数组输入 :
#包括< iostream >
#包括向量> <
#包括< dsp.h >
#包括< cmath >
使用名称空间性病;
intmain () {
/ /数量在心电图数据样本
常量int N = 1000;
/ /归一化截止频率
常量双f0 = 0.05;
/ /采样率(赫兹)
常量双fs = 500.0;
/ /截止频率(赫兹)
常量fc = f0 * f / 2.0的两倍;
/ /你的心电图数据数组输入
ecg_data [N] = {};
/ /初始化巴特沃斯低通滤波器
/ /过滤系数
向量<双> b;
/ /订单过滤器
常量int订单= 4;
/ /计算滤波器系数
黄油(顺序、fc、fs、低通滤波器,b, a);
/ /过滤心电图数据
ecg_filtered [N];
(int i = 0;我< N;我+ +){
ecg_filtered[我]= 0;
/ /应用过滤器
(int j = 0;j < =秩序;j + +) {
如果(i - j > = 0) {
ecg_filtered[我]+ = b [j] * ecg_data (i, j);
}
如果(我- j - 1 > = 0) {
ecg_filtered[我]- = [j + 1] * ecg_filtered (i - j - 1);
}}}
/ /输出过滤心电图数据
(int i = 0;我< N;我+ +){
cout< < ecg_filtered[我]< < " ";
}
cout< < endl;
返回0;
}

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!