C代码:
/*
C语言实现FIR滤波器-时域暴力卷积方法
y(n) = E(m=0->N-1) x(m)*h(n-m);
p_input : 待滤波数据
p_output : 滤波输出数据
data_len : 数据长度
p_fir_para : h(t)参数
fir_para_len : h(t)长度
*/
void c_fir(float* p_input, float* p_output, uint16_t data_len, float* p_fir_para,uint16_t fir_para_len)
{
memset(p_output, 0, sizeof(float) * data_len); //输出清零
for (uint16_t i = 0; i < data_len; i++)
{
if (i < fir_para_len)
{
for (uint16_t j = 0; j <= i; j++)
{
p_output[i] += p_fir_para[j] * p_input[i - j];
}
}
else if(i >= fir_para_len)
{
for (uint16_t j = 0; j < fir_para_len; j++)
{
p_output[i] += p_fir_para[j] * p_input[i - j]; //卷积和
}
}
}
}
matlab代码:
%滤波参数,这里只用简单的平均滤波器,具体的系统函数设计非一日之