STM32 FIR滤波器使用要点,STM32 DSP篇

1.综述

STM32搭配的CMSIS的DSP库已经写好了FIR,我们做的就是用好用稳定!

2.使用流程

2.1使用MATLAB的Filter Designer生成滤波器的参数(直接在MATLAB命令中输入filterDesigner即可调出此工具,配置好参数后,选择Targets->Generate C header)

2.2调用arm_fir_init_f32或arm_fir_init_q31或arm_fir_init_q15等等视实际使用情况而定数据类型

2.3调用对应的arm_fir_f32或arm_fir_q31或arm_fir_q15等等与上一步对应的函数开始计算

2.4就这两步算就对了

3.需要注意的细节问题

3.1滤波器阶数选择

滤波器阶数应当选择能整除4或8或16的,具体要求如下图

例如,f32要求4的倍数,与该数值直接相关的是numTaps,即MATLAB生成的参数的个数。numTaps比FIR滤波器的阶数大1,所以如果numTaps-1不能整除4,那就有问题了。

3.2状态缓冲大小

该参数在arm_fir_init函数中会用到,具体要求如下图

 该缓冲状态区域大小为numTaps + 2*blockSize -1

其中,numTaps为FIR滤波器的配置参数个数,该数值比FIR滤波器的阶数大1。blockSize是每次调用arm_fir_f32计算的数值的个数,如果想一口气计算完,就让blockSize等于缓冲区中的元素个数。

3.3有多个FIR滤波器时,哪些能公用,哪些不行

例如笔者使用该FIR滤波器实现数字分频器,需要分别为左右声道配置两个FIR滤波器,显而易见,这两个滤波器的工作模式(低通、高通、带通等)相同;截止频率相同;窗函数相同。孪生兄弟一般,然而还是互相嫌弃,在实际使用时发现有些东西是不能公用的。

两个滤波器的基本属性与MATLAB生成的配置参数相关,所以MATLAB生成的配置参数可以公用。但是FIR滤波器句柄,即arm_fir_instance_f32(arm_fir_init_f32和arm_fir_f32的第一个参数)和状态缓存(arm_fir_init_f32的第四个参数)不能公用!

例如:

先举个反面例子

这是公用的例子,实际结果是,会听到明显的杂音

改正后是

 

 结果就是声音很圆润,(笔者首先做的是低通滤波器)和低音炮上用运放实现的有源滤波器听起来无区别。

3.4在循环执行时,哪些可以省掉

例如笔者的分频器,只要音乐在播放,他就要一刻不停得工作(毕竟替代的是更不怕累的模拟电路),在一遍遍的滤波过程中,实测arm_fir_init开头这个函数可以省去的,即在循环前调用一次就行。

4.简单聊下我们手里的FIR

我们手头的这个FIR是直接型结构的,系统函数和拓扑图如上。上面的图里面,箭头代表乘法,圆圈代表加法。该滤波器的拓扑结构在有些资料上是下图这样,其本质上相同。

 

 

  • 8
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[2\]中提到了将FIR滤波器移植到以STM32F4为基础的嵌入式平台中。FIR滤波器是一种数字滤波器,它的最重要的优点是由于不存在系统极点,因此是绝对稳定的系统。FIR滤波器还确保了线性相位,这在信号处理中非常重要。此外,由于不需要反馈,FIR滤波器的实现也比IIR滤波器简单。基于这些优点,FIR滤波器在嵌入式平台中的应用更加广泛。 在STM32F4平台上实现FIR滤波器的过程可以分为以下几个步骤: 1. 设计FIR滤波器:根据滤波器的要求,选择合适的滤波器类型和参数,如滤波器的阶数、截止频率等。可以使用MATLAB等工具进行滤波器设计,得到滤波器的系数。 2. 获得FIR滤波器系数:将设计好的滤波器系数导入到STM32F4平台中,可以通过MATLAB等工具生成滤波器系数的数组。 3. 基于arm-dspFIR程序:使用STM32F4平台上的arm-dsp库,编写相应的FIR滤波器程序。该库提供了一些函数,可以方便地实现FIR滤波器的功能。 4. 滤波结果与Matlab比对:将滤波器应用于信号,通过STM32F4平台上的FIR滤波器程序进行滤波,并将滤波结果与MATLAB仿真结果进行比对,以验证滤波器的性能。 通过以上步骤,可以在STM32F4平台上实现FIR滤波器,并应用于信号处理中。这样可以实现对电流、电压信号进行采样,滤除干扰频段的信号,或者保留、提取感兴趣的频段的信号。 #### 引用[.reference_title] - *1* *3* [基于stm32滤波器的总结](https://blog.csdn.net/haha690/article/details/116950996)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【嵌入式】STM32利用arm-dsp库进行FIR滤波](https://blog.csdn.net/spiremoon/article/details/116237801)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值