C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 带通FIR滤波器大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要制作一个简单的带通音频滤波器.
现在我使用了这个简单的C类: http://www.cardinalpeak.com/blog/a-c-class-to-implement-low-pass-high-pass-and-band-pass-filters

它运作良好并切断了所需的乐队.但是当我尝试用小步骤改变上限或下限时,在某些极限值上我听到错误的结果 – 衰减或频率偏移(不对应电流限制)声音.

计算脉冲响应的函数

void Filter::designBPF()
{
    int n;
    float mm;

    for(n = 0; n < m_num_taps; n++){
        mm = n - (m_num_taps - 1.0) / 2.0;
        if( mm == 0.0 ) m_taps[n] = (m_phi - m_lambda) / M_PI;
        else m_taps[n] = (   sin( mm * m_phi ) -
                             sin( mm * m_lambda )   ) / (mm * M_PI);
    }

    return;
}

哪里

@H_903_12@m_lambda = M_PI * Fl / (Fs/2); m_phi = M_PI * Fu / (Fs/2);

Fs – 采样率(44.100)
F1 – 下限
福 – 上限

简单的过滤功能

float Filter::do_sample(float data_samplE)
{
    int i;
    float result;

    if( m_error_flag != 0 ) return(0);

    for(i = m_num_taps - 1; i >= 1; i--){
        m_sr[i] = m_sr[i-1];
    }   
    m_sr[0] = data_sample;

    result = 0;
    for(i = 0; i < m_num_taps; i++) result += m_sr[i] * m_taps[i];

    return result;
}

我需要使用任何窗口功能(布莱克曼等)吗?如果是,我该怎么做?
我试图将我的冲动响应乘以布莱克曼窗口:

@H_903_12@m_taps[n] *= 0.42 - 0.5 * cos(2.0 * M_PI * n / double(N - 1)) + 0.08 * cos(4.0 * M_PI * n / double(N - 1));

但结果是错误的.
我需要标准化水龙头吗?

解决方法

我找到了一个很好的免费实现FIR滤波器:
http://www.iowahills.com/A7ExampleCodePage.html

大佬总结

以上是大佬教程为你收集整理的c – 带通FIR滤波器全部内容,希望文章能够帮你解决c – 带通FIR滤波器所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。