FIR滤波器在c++
FIR filter in c++
目前我正试图实现FIR低通滤波器。在MATLAB中计算FIR系数。现在我需要在c++中实现FIR算法。
我定义了一个类为filter, FIR函数为:
double * Filter::FIR (double x[])
{
unsigned int jj;
unsigned int pp;
double sum;
pp = 0;
// input values
memcpy(&_x_sign, &x, sizeof(x));
for (pp = 0; pp < order+1; pp++)
{
sum = 0 ;
for (jj = 0; jj < order+1; jj++)
{
sum += _b[jj] * _x_sign[pp - jj];
}
_y_sign[pp] = sum;
}
return (_y_sign);
}
_x_sign作为数组在循环中(pp - jj)为负数时不起作用。我如何修改我的FIR滤波器?
我看到你正试图做一个卷积,如果你想通过索引数组外避免段错误,你需要改变表达式。例如,您可以使用instead of
_x_sign[pp -jj]
pp>jj? _x_sign[pp - jj] : 0
在这种情况下,您可以通过使用三元操作符(如果jj大于pp,则不会计算_x_sign[pp - jj])来避免在内存外进行索引
您也可以使用
更改for的限制for (jj = 0; jj < order+1&& jj< pp+1; jj++)
{
sum += _b[jj] * _x_sign[pp - jj];
}
第二个解决方案更好,因为您可以避免在无用时创建更大的循环。
相关文章:
- 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滤波器无结果
- 高斯滤波器核值
- 应用medianBlur以及拉普拉斯和阈值滤波器
- 滤波器卷积反射边界
- 傅里叶变换高斯滤波器误差