当前位置:首页 > 公众号精选 > 嵌入式客栈
[导读][导读]:前面一篇文章关于IIR/移动平均滤波器设计的文章。本文来聊一聊陷波滤波器,该滤波器在混入谐波干扰时非常有用,算法简单,实现代价低。本文来一探其在机理、应用场景。 注:尽量在每篇文章写写摘要,方便阅读。信息时代,大家时间都很宝贵,如此亦可

[导读]:前面一篇文章关于IIR/移动平均滤波器设计的文章。本文来聊一聊陷波滤波器,该滤波器在混入谐波干扰时非常有用,算法简单,实现代价低。本文来一探其在机理、应用场景。

注:尽量在每篇文章写写摘要,方便阅读。信息时代,大家时间都很宝贵,如此亦可节约粉丝们的宝贵时间。

前文所说学习的倡导2W1H原则,思来想来并不全面,本文决定从What Why Where When How几个维度展开。我称之为4W1H学习法,借鉴管理学领域中的5W1H,起源于1932年,美国政治学家拉斯维尔提出“5W分析法”,后延伸出5W1H法。有兴趣的可以找来阅读,题外话技术人员读一些方法论管理学方面的书籍于做人做事个人认为是非常有益的。

梳状滤波器之What?

在信号处理中,梳状滤波器是通过向其自身添加信号的延迟而实现的,从而造成增强或削弱干扰的滤波器。梳状滤波器的频率响应由一系列规则间隔的凹口组成,从而呈现出梳状外观。其大体拓扑形式如下:

梳状滤波器有着大量不同形式的传递函数,其作用是对周期性信号增强或削弱周期性信号,本文主要介绍其中一种形式的Z传递函数

其中:

其信号流图如下:

梳状滤波器英文称为comb(梳子) filter,这个名字真是无与伦比的绝!为何?谈到滤波器一定会重点关注其对幅频响应曲线,梳状滤波器,正是描述其幅频响应的。而幅频响应从本质上讲是描述系统各频率能量的放大或者衰减。本文中谈到的滤波器就是一个系统,对其输入能量按频率不同进行放大或者衰减,从而起到过滤作用。

梳状滤波器之Why?

前面说到梳状滤波器其幅频响应样子和梳子长的很像,为啥长的像,来一探究竟:

其频率响应为:

现以采样率20000Hz,10阶,阻带带宽50Hz为例。其幅频响应曲线如下:

相频响应曲线为:

从幅频响应曲线可看出,其形状真是如梳子形状,当阶数越大,其齿数越多。这种形式的梳状滤波器对于2KHz,4KHz,6KHz,8KHz,10KHz信号是衰减作用,也即阻止该频率通过,阻带宽度为50Hz。前面谈到了我们可以对某些频率信号加强,而其他的信号衰减吸收。这里引申出其互补滤波器,其Z传递函数刚好有一点形式上的对称性:

其中b为:

此互补滤波器其幅频响应曲线为:

这两个滤波器其幅频响应曲线刚好是互补对称的。至此,从原理上已基本明了为什么称其为梳状滤波器。

梳状滤波器就其本质也是一种IIR滤波器,因为滤波器的输出反馈参与了滤波运算。

梳状滤波器之Where?

费这么大劲研究梳状滤波器,须的知道在什么地方可以去使用它,事实上梳状滤波器有着大量的应用场合:

  • 级联积分梳状(CIC)滤波器,通常用于插值和抽取操作期间的抗混叠,这些操作会更改离散时间系统的采样率。
  • PAL和NTSC电视解码器的芯片(也可能是软件滤波)实现的2D和3D梳状滤波器用以降低网点伪影干扰。
  • 音频信号处理,包括延迟,镶边和数字波导合成中大量应用。例如,如果将延迟设置为几毫秒,则可以使用梳状滤波器对圆柱空腔或振动弦中的声驻波的影响进行建模。
  • 在天文学中,天体梳滤波器有望将现有光谱仪的精度提高近一百倍。
  • 在声学方面,梳齿滤波会以某些不需要的方式出现。例如,当两个扬声器在距收听者不同距离处播放同一信号时,会对信号产生梳状滤波效果。在任何封闭的空间中,听众会听到直接声音和反射声音的混合声音。由于反射的声音路径较长,因此构成了直接声音的延迟版本,并创建了一个梳状滤波器,使两者在听众处合并。
  • 仪器仪表也常用梳状滤波器消除谐波干扰,或者选频放大。
  • ......

梳状滤波器之When?

个人观点:
  • 如遇到谐波干扰,在硬件很难解决时就可以考虑。

  • 在做图像处理时也可以考虑使用该滤波器进行精准重建。

  • 普通单片机系统

  • DSP仪器仪表系统中

接下来就是究竟怎么用C语言以及MATLAB实现的干货了,请继续......

梳状滤波器之How?

本文依然借助于matlab的fdatool进行设计示例:

将其重要设置标注如上,其他的与IIR一文类似,就不罗嗦举例了。将重要参数输入,点击设计就轻松设计出相应的滤波器参数了。这里以1000Hz采样率,40Hz带宽,20阶为例,设计出滤波器参数如下:

Generated by MATLAB(R) 8.4 and the Signal Processing Toolbox 6.22.
% Generated on: 05-Apr-2020 13:40:29

% Coefficient Format: Decimal

% Discrete-Time IIR Filter (real)     
% -------------------------------     
% Filter Structure    : Direct-Form II
% Numerator Length    : 21            
% Denominator Length  : 21            
% Stable              : Yes           
% Linear Phase        : No            

                                     
Numerator:                            
 0.38970091175151578                  
 0                                    
 0                                    
 0                                    
 0                                    
 0                                    
 0                                    
 0                                    
 0                                    
 0                                    
 0                                    
 0                                    
 0                                    
 0                                    
 0                                    
 0                                    
 0                                    
 0                                    
 0                                    
 0                                    
-0.38970091175151578                  
Denominator:                          
1                                     
0                                     
0                                     
0                                     
0                                     
0                                     
0                                     
0                                     
0                                     
0                                     
0                                     
0                                     
0                                     
0                                     
0                                     
0                                     
0                                     
0                                     
0                                     
0                                     
0.22059817649696845                            

C语言实现非常简单,由于梳状滤波器本质上是IIR滤波器,所以也可以直接利用前文ARM的库函数实现部署。由前面Z传递函数,很容易推导出其差分方程如下:

其互补滤波器差分方程为:

依据上面公式非常容易设计出C代码,这里将浮点数实现共享,如需定点实现也非常容易,代码如下:

#include <stdio.h>
#include <math.h>
#include <string.h>

/*长度应为阶数+1*/
#define CMF_RANK  20
typedef double E_SAMPLE;

typedef enum _E_CMF_TYPE{
    CMF_TYPE_STOP_BANDS,
    CMF_TYPE_PASS_BANDS
}E_CMF_TYPE;
/*定义移动平均寄存器历史状态*/
typedef struct _t_CMF
{

    E_SAMPLE x[CMF_RANK];
    E_SAMPLE y[CMF_RANK];
    double b;
    double r;
    E_CMF_TYPE type;
    int index;
}t_CMF;

void comb_filter_init(t_CMF * pCmf,double rho,E_CMF_TYPE type)
{
    memset(pCmf,0,sizeof(t_CMF));
    pCmf->index = CMF_RANK-1;
    pCmf->r = rho;
    pCmf->type = type;

    if(type==CMF_TYPE_STOP_BANDS)
        pCmf->b = (1+rho)/2;
    else
        pCmf->b = (1-rho)/2;
}

E_SAMPLE comb_filter(t_CMF * pCmf,E_SAMPLE xn)
{
    E_SAMPLE yn=0;
    int n_N;
    int i=0;

    n_N = pCmf->index;
    if(pCmf->type == CMF_TYPE_STOP_BANDS)
    {
        /*y[n] = bx[n]-bx[n-N]+ry[n-N]*/
        yn = pCmf->b*(xn-pCmf->x[n_N])+pCmf->r*pCmf->y[n_N];
    }
    else
    {
        /*y[n] = bx[n]+bx[n-N]+ry[n-N]*/
        yn = pCmf->b*(xn+pCmf->x[n_N])+pCmf->r*pCmf->y[n_N];
    }

    /*存储yn为下次迭代准备*/
    pCmf->y[n_N] = yn;
    pCmf->x[n_N] = xn;


    if(pCmf->index==0)
        pCmf->index = CMF_RANK-1;
    else
        pCmf->index--;

    return yn;
}

#define SAMPLE_RATE 1000.0f
#define SAMPLE_SIZE 512
#define PI 3.415926f
int main()
{
    E_SAMPLE rawSin[SAMPLE_SIZE];
    E_SAMPLE outSin[SAMPLE_SIZE];

    t_CMF cmf;

    FILE *pFile=fopen("./simulationSin.csv","wt+");
    if(pFile==NULL)
    {
        printf("simulationSin.csv opened failed");
        return -1;
    }

    for(int i=0;i<SAMPLE_SIZE;i++)
    {
        rawSin[i]  = 10*sin(2*PI*25*i/SAMPLE_RATE);//+rand()%10;
        rawSin[i] += 10*sin(2*PI*50*i/SAMPLE_RATE);
    }

    /*初始化*/
    comb_filter_init(&cmf,-0.22059817649696845,CMF_TYPE_STOP_BANDS);
    /*滤波*/
    for(int i=0;i<SAMPLE_SIZE;i++)
    {
        outSin[i]=comb_filter(&cmf,rawSin[i]);
    }

    for(int i=0;i<SAMPLE_SIZE;i++)
    {
        fprintf(pFile,"%f,",rawSin[i]);
    }

    fprintf(pFile,"\n");
    for(int i=0;i<SAMPLE_SIZE;i++)
    {
        fprintf(pFile,"%f,",outSin[i]);
    }

    /*初始化*/
    comb_filter_init(&cmf,-0.22059817649696845,CMF_TYPE_PASS_BANDS);
    /*滤波*/
    for(int i=0;i<SAMPLE_SIZE;i++)
    {
        outSin[i]=comb_filter(&cmf,rawSin[i]);
    }

    /*存储数据*/
    fprintf(pFile,"\n");
    for(int i=0;i<SAMPLE_SIZE;i++)
    {
        fprintf(pFile,"%f,",outSin[i]);
    }
    fclose(pFile);

    return 0;
}

同样利用excel,生成波形如下:

可见,经过梳状滤波器过滤后,50Hz谐波已经被过滤掉,25Hz 保留下来,而经过其互补滤波器后,25Hz被过滤,其50Hz被保留。如看时域波形不直观,可利用Python代码进行FFT展开分析:

梳妆滤波后FFT谱线图:

互补梳状滤波器过滤后FFT谱线图:

总结:

  • 梳妆滤波器本质上是一种IIR滤波器
  • 梳妆滤波器在滤除谐波上,利用极小代价就可以比较好的滤除谐波干扰
  • 其互补滤波器在时域时会失真,使用时需要考虑
  • 如需要考虑计算效率,可以考虑定点优化,但精度会下降。
  • 梳妆滤波器在2D/3D图像处理广为应用,如有兴趣可深入研究
  • 如需FFT的python代码,加作者微信领取


点击留言/查看留言


END

果喜欢右下点个在看,也会让我倍感鼓舞

往期精彩推荐




▲深度解析U-Boot网络实现(长篇好文)
读U-Boot源码-C语言编程大法总结篇一
读U-Boot源码-C语言编程技巧总结篇二
基于Buildroot的Linux系统构建之根文件系统
手把手教系列之移动平均滤波器C实现
手把手教系列之IIR数字滤波器设计实现

关注置顶:扫描左下二维码关注公众号加星

讨论加群:扫描右下二维码添加,发送“加群”

关注

加群

免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

上海2024年4月17日 /美通社/ -- 每年4月17日是世界血友病日。今年,世界血友病日以"认识出血性疾病,积极预防和治疗"为主题,呼吁关注所有出血性疾病,提升科学认知,提高规范化诊疗水平,让每一位出血性疾病患者享有...

关键字: VII 动力学 软件 BSP

伦敦2024年4月16日 /美通社/ -- ATFX宣布任命Siju Daniel为首席商务官。Siju在金融服务行业拥有丰富的经验和专业知识,曾在全球各地的高管职位上工作了19年以上。Siju之前担任FXCM首席商务官...

关键字: NI AN SI BSP

常州2023年9月25日 /美通社/ -- 9月23日,由江苏省商务厅指导,世界中餐业联合会、常州市人民政府主办的"第三届中华节气菜大会暨首届江南美食节"在江苏常州开幕。文化和旅游部国际交流与合作局一...

关键字: BSP 可持续发展 大赛 质量控制

北京2023年9月25日 /美通社/ -- 9月21日,由中国质量报刊社·中国质量新闻网主办的第六届食品高质量发展交流会在北京举行,会议主题为"高质量,新生活",旨在推动食品行...

关键字: 自动化 BSP ISO9001 NAS

北京2023年9月23日 /美通社/ -- 近日,主线科技正式获准在北京市智能网联汽车政策先行区道路开启常态化测试与示范,将与物流客户在真实开放的城区道路场景中,率先开启基于L4级别自动驾驶能力的智能卡车运输示范。 随...

关键字: 智能卡 测试 高速公路 BSP

曼谷2023年9月18日 /美通社/ -- 作为东南亚的旅游胜地,泰国一直在全球范围内吸引着无数游客的目光。泰国旅游和体育部近日公布的报告显示,今年前7个月,泰国旅游业总收入约为1.08万亿泰铢(约合人民币2233亿元)...

关键字: BSP GEN 国美 AN

哥伦比卡尔达斯2023年9月22日 /美通社/ -- 近日,天合跟踪与中国电建签订拉美地区哥伦比亚泰普伊光伏电站跟踪支架供货协议,将为其提供108MW智能跟踪系统,其中包含开拓者1P智能跟踪支架、智能算法、以及智慧云平台...

关键字: 光伏电站 跟踪系统 控制器 BSP

2型炎症领域新突破 上海2023年9月22日 /美通社/ -- 赛诺菲今天宣布,达必妥®(度普利尤单抗注射液)获得中国国家药品监督管理局(NMPA)批准,用于治疗适合系统治疗的中度至重度结节性痒疹的成...

关键字: PRIME BSP REPORT SAR

欧莱雅中国旗下上海美次方投资有限公司达成首次开放式创新投资 法国克里希2023年9月22日 /美通社/ -- 欧莱雅集团宣布对中国创新型生物科技公司杉海创新进行少数股权投资,以建立长期合作伙伴关系,共同开发新...

关键字: AN BSP DEVELOPMENT FOR
关闭
关闭