【电赛仪器仪表】基于MATLAB的数字滤波器设计与ARM官方DSP库的结合

这篇具有很好参考价值的文章主要介绍了【电赛仪器仪表】基于MATLAB的数字滤波器设计与ARM官方DSP库的结合。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Ⅰ. 数字滤波器基础知识

1.数字滤波器的概念

  • 数字滤波器是对数字信号进行滤波处理以得到期望的响应特性的离散时间系统。作为一种电子滤波器,数字滤波器与完全工作在模拟信号域的模拟滤波器不同。数字滤波器工作在数字信号域,它处理的对象是经由采样器 件将模拟信号转换而得到的数字信号。
  • 简单而言,数字滤波器是一类对数字信号进行运算和处理,并且输出也是数字信号的系统。

2.数字滤波器的分类

  • 从功能上分;低通、带通、高通、带阻
  • 从实现方法上分:FIR、IIR
  • 从设计方法上来分:Chebyshev(切比雪夫),Butterworth(巴特沃斯)
  • 从处理信号分:经典滤波器、现代滤波器

3.数字滤波器的技术指标

  • ωp:通带截止频率
  • αp:通带允许的最大衰减
  • ωs:阻带截止频率
  • αs:阻带允许的最小衰减
  • ωc:3dB 通带截止频率
  • δ1 δ2:通带、阻带的容限(允许误差)
  • αp = 20 log |H(e jo)| |H(e jωp)| = −20 log|H(e jωp )|(dB)
  • αs = 20 log |H(e jo)| |H(e jωs)| = −20 log|H(e jωs )|(dB)
  • 式中均假定H(e jo) = 1 (归一化) 当ωp = ωc时,αp = 3dB
    stm32数字滤波器,训练总结,stm32,单片机,傅立叶分析

Ⅱ.使用MATLAB软件设计两类数字滤波器

1.FIR滤波器

1)窗函数简介

在数字信号处理领域,往往需要将信号进行截断处理,截断所使用的即为窗函数。窗函数的本质是对信号进行加权。由于离散系统的特性,所得信号会不可避免地出现频谱泄漏以及栅栏效应,窗函数的作用是为了抑制这两种现象。以下是一些主要窗函数的比较:

优点 缺点
Rectangle 频率分辨率最好 幅度准确度最差
Hanning 频率分辨率较好 幅度准确度较差
Hamming 幅度准确度较好 频率分辨率较差
Blackman 幅度准确度最好 频率分辨率最差

2)filterDesigner使用

  • 在Matlab命令行窗口输入‘filterDesigner’,调用滤波器设计组件。设计好FIR滤波器的类型,设计方法,阶数,截止频率等参数后点击Design Filter 按钮就生成了所需的滤波器系数:

stm32数字滤波器,训练总结,stm32,单片机,傅立叶分析
,生成滤波器系数以后点击 filterDesigner界面上的菜单 Targets->Generate C header ,打开后显示如下界面:
stm32数字滤波器,训练总结,stm32,单片机,傅立叶分析
点击Generate,选择保存路径后即可完成导出参数。关于参数的使用则在下一部分。

2.IIR滤波器

  • IIR滤波器的设计与FIR相似,但在导出参数时需要注意一些细节:

  • 默认生成的 IIR 滤波器类型是 Direct-Form II, Second-Order Sections(直接 II 型,每个
    Section 是一个 二阶滤波器)。这里我们需要将其转换成Direct-Form I, Second-Order
    Sections,因为本章使用的IIR滤波器函数是Direct-Form I的结构。 转换方法:点击 Edit->Convert
    Structure,界面如下,这里我们选择第一项,并点击 OK:
    stm32数字滤波器,训练总结,stm32,单片机,傅立叶分析

  • 转换好以后再点击 File-Export,第一项选择 Coefficient File(ASCII):
    stm32数字滤波器,训练总结,stm32,单片机,傅立叶分析

  • 第一项选择好以后,第二项选择 Decimal:
    stm32数字滤波器,训练总结,stm32,单片机,傅立叶分析

  • 两个选项都选择好以后,点击 Export 进行导出,导出后保存即可。

  • 由于Matlab设计IIR所使用的公式与DSP库函数中有所不同,故需对系数的处理:去掉每行的a0,并把a1,a2取反。经过处理后的系数才可与DSP库结合使用:
    stm32数字滤波器,训练总结,stm32,单片机,傅立叶分析

Ⅲ.数字滤波器与官方DSP库结合使用

1.DSP库的安装使用

  • DSP库是电赛常用到的一个库,安装方法推荐以下教程:DSP库快速添加
  • 使用教程推荐官方网站:DSP库教程

2.DSP库滤波器函数介绍

1)FIR滤波器

函数 arm_fir_init_f32
  • 函数原型:
void arm_fir_init_f32(
 arm_fir_instance_f32 * S,
 uint16_t numTaps,
 const float32_t * pCoeffs,
 float32_t * pState,
 uint32_t blockSize);
  • 函数描述:
    这个函数用于 FIR 初始化。
  • 函数参数:
    ◆ 第 1 个参数是 arm_fir_instance_f32 类型结构体变量。
    ◆ 第 2 个参数是滤波器系数的个数。
    ◆ 第 3 个参数是滤波器系数地址。
    ◆ 第 4 个参数是缓冲状态地址。
函数 arm_fir_f32
  • 函数原型:
void arm_fir_f32(
const arm_fir_instance_f32 * S,
const float32_t * pSrc,
float32_t * pDst,
uint32_t blockSize);
  • 函数描述:
    这个函数用于 FIR 滤波。
  • 函数参数:
    ◆ 第 1 个参数是 arm_fir_instance_f32 类型结构体变量。
    ◆ 第 2 个参数是源数据地址。
    ◆ 第 3 个参数是滤波后的数据地址。
    ◆ 第 4 个参数是每次调用处理的数据个数,最小可以每次处理 1 个数据,最大可以每次全部处理完。

2)IIR滤波器

函数 arm_biquad_cascade_df1_init_f32
  • 函数原型:
void arm_biquad_cascade_df1_init_f32(
 arm_biquad_casd_df1_inst_f32 * S,
 uint8_t numStages,
 const float32_t * pCoeffs,
 float32_t * pState);
  • 函数描述:
    这个函数用于 IIR 初始化。
  • 函数参数:
    ◆ 第 1 个参数是 arm_biquad_casd_df1_inst_f32 类型结构体变量。
    ◆ 第 2 个参数是 2 阶滤波器的个数。
    ◆ 第 3 个参数是滤波器系数地址。
    ◆ 第 4 个参数是缓冲状态地址。
函数 arm_biquad_cascade_df1_f32
  • 函数原型:
 void arm_biquad_cascade_df1_f32(
 const arm_biquad_casd_df1_inst_f32 * S,
 float32_t * pSrc,
 float32_t * pDst,
 uint32_t blockSize);
  • 函数描述:
    这个函数用于 IIR 滤波。
  • 函数参数:
    ◆ 第 1 个参数是 arm_biquad_casd_df1_inst_f32 类型结构体变量。
    ◆ 第 2 个参数是源数据地址。
    ◆ 第 3 个参数是滤波后的数据地址。
    ◆ 第 4 个参数是每次调用处理的数据个数,最小可以每次处理 1 个数据,最大可以每次全部处理完。

3.滤波器具体使用示例

1)FIR滤波器与DSP库结合使用

我们只需要调用DSP库的函数,将已经设计好的系数作为参数传入函数当中,即可实现在STM32平台上的滤波:文章来源地址https://www.toymoban.com/news/detail-602365.html

/*  FIR滤波器  */
static float FIR_State[BLOCK_SIZE+FIR_ORDER] ;   //FIR滤波器状态缓存
static arm_fir_instance_f32 FIR_Sta; //定义结构体S
void calc_FIR(float *input,u16 w) //可控制截止频率的FIR
{
    arm_fir_init_f32(&FIR_Sta, FIR_LEN, (float*)LowPassFIR[w-1], FIR_State, BLOCK_SIZE); //初始化结构体
    for(u16 i=0;i<NUMBLOCKS;i++)
    {
        arm_fir_f32(&FIR_Sta, input + (i * BLOCK_SIZE), input + (i * BLOCK_SIZE),BLOCK_SIZE);
    }
}
void FIR_calc(float *input,float* para) //固定截止频率的FIR
{
    float FIR_State[BLOCK_SIZE+FIR_ORDER] ;   //FIR滤波器状态缓存
    arm_fir_instance_f32 FIR_Sta; //定义结构体S
    arm_fir_init_f32(&FIR_Sta, FIR_LEN, para, FIR_State, BLOCK_SIZE); //初始化结构体
    for(u16 i=0;i<NUMBLOCKS;i++)
    {
        arm_fir_f32(&FIR_Sta, input + (i * BLOCK_SIZE), input + (i * BLOCK_SIZE),BLOCK_SIZE);
    }   
}

2)IIR滤波器与DSP库结合使用

/*  IIR滤波器  */
/*
IIR的过渡带可以做的很窄,但是由于数据放缩的特性,
且F4系列最多支持float型DSP算法,直接导致IIR滤波器
阶数最多6阶左右,且反馈时间长\不稳定,因此一般选择FIR滤波器
*/
static float IIR_State[4*IIR_Len];//IIR滤波器状态缓存 
static arm_biquad_casd_df1_inst_f32 IIR_Sta;
void IIR_test(float *Input,float* Output,u32 IIR_length)
{
    arm_biquad_cascade_df1_init_f32(&IIR_Sta, IIR_Len, iir_params, IIR_State); //初始化结构体S 
    /* IIR滤波 */
    arm_biquad_cascade_df1_f32(&IIR_Sta, Input, Output, IIR_length); 
    arm_scale_f32(Output,ScaleValue,Output,IIR_length); //数据放缩
}

Ⅳ.总结

理论高度决定实践高度

  • 本篇内容主要介绍了在电赛中的一项重要工作——数字滤波器的设计与使用。在初入数字信号处理领域时,我们需要先掌握数字滤波器的基础知识,清晰了解滤波器每一个参数的意义,只有这样,设计出来的滤波器才有理论支撑。在理论基础上,熟练掌握专业软件的使用,会让我们开发的效率大大提高。唯有多动手,勤思考,才能在电赛道路上越走越远!

到了这里,关于【电赛仪器仪表】基于MATLAB的数字滤波器设计与ARM官方DSP库的结合的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 信号处理之FIR数字滤波器(Matlab仿真)

            数字滤波器的作用是滤除不感兴趣的信号,留下想要的信号。数字滤波器可分为无限脉冲响应(IIR)数字滤波器、有限脉冲响应(FIR)数字滤波器两种,两者各有优缺点,其中FIR数字滤波器因其具有良好的线性相位特性受到广泛应用,线性相位是指信号中各频率成分的相对

    2024年02月03日
    浏览(40)
  • 数字图像处理之matlab实验(三):空间滤波器

    空间滤波,就是在原图像上,用一个固定尺寸的模板去做卷积运算,得到的新图像就是滤波结果。滤波,就是过滤某种信号的意思。过滤哪种信号取决于模板设计,如果是锐化模板,处理后就保留高频信号,如果是平滑模板,处理后就保留低频信号。 (1)模板运算 图像处理

    2024年04月28日
    浏览(37)
  • 数字信号处理-10-并行FIR滤波器MATLAB与FPGA实现

    本文介绍了设计滤波器的FPGA实现步骤,并结合杜勇老师的书籍中的并行FIR滤波器部分进行一步步实现硬件设计,对书中的架构做了复现以及解读,并进行了仿真验证。 FIR滤波器的结构形式时,介绍了直接型、级联型、频率取样型和快速卷积型4种。在FPGA实现时,最常用的是最

    2023年04月09日
    浏览(39)
  • Sigma-delta ADC数字抽取滤波器的verilog与MATLAB设计

           模数转换器根据采样率的不同发展为奈奎斯特(Nyquist)型和过采样(Oversampling)型两大类。奈奎斯特型ADC 采用2-3倍信号带宽的采样时钟进行采样。过采样型ADC采用过采样技术和噪声整形技术,以远高于2倍信号带宽的采样时钟进行采样,将信号中的噪声搬移到高频以

    2024年04月26日
    浏览(37)
  • 数字信号处理翻转课堂笔记17——窗函数法设计FIR滤波器及matlab实现

    对应教材:《数字信号处理(第五版)》西安电子科技大学出版社,丁玉美、高西全著 (1)窗函数法设计FIR线性相位滤波器的原理; (2)加窗效应:加窗对滤波器特性的影响(难点); (3)典型窗函数及其主要特性和参数(重点); (4)窗函数法设计FIR滤波器的步骤(

    2024年01月16日
    浏览(41)
  • 数字信号处理|Matlab设计巴特沃斯低通滤波器(冲激响应不变法和双线性变换法)

    2.1频响图 系统函数 H 是一个复数,其图谱分为:幅度谱、相位谱 幅度谱 x轴:模拟频率f(数字频率w转化来)【 单位:赫兹Hz 】 y轴:|H1|幅度【一般用:20 * log10|H1|】【 单位:分贝dB 】  相位谱 x轴:模拟频率f(数字频率w转化来)【 单位:赫兹Hz 】 y轴:H1 的相位 2.2 各个频

    2023年04月08日
    浏览(33)
  • 165基于matlab的各类滤波器

    基于matlab的各类滤波器。汉宁窗设计Ⅰ型数字高通滤波器、切比雪夫一致逼近法设计FIR数字低通滤波器、模拟Butterworth滤波器设计数字低通滤波器、频域抽样法的FIR数字带阻滤波器设计、频域抽样法的FIR数字带通滤波器设计、汉宁窗的FIR数字高通滤波器设计、双线性法设计巴

    2024年02月20日
    浏览(28)
  • 基于3D扫描和3D打印的产品逆向工程实战【数字仪表】

    逆向工程是一种从物理零件创建数字设计的强大方法,并且可以与 3D 扫描和 3D 打印等技术一起成为原型设计工具包中的宝贵工具。 推荐:用 NSDT编辑器 快速搭建可编程3D场景 3D 扫描仪可以非常快速地测量复杂的物体,并且在涉及现实生活参考时可以极大地加快您的设计工作

    2024年02月09日
    浏览(29)
  • 基于FPGA的FIR数字滤波器设计(quartus和vivado程序都有)。

    基于FPGA的FIR数字滤波器设计(quartus和vivado程序都有)。 附: 1.配套quartus从MATLAB系数生成直到仿真成功说明文档。 2.配套仿真出波形(图1)的视频。      

    2024年02月10日
    浏览(40)
  • 基于正交滤波器组的语音DPCM编解码算法matlab仿真

    目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程           matlab2022a        在语音信号处理中,一种常见的编解码技术是差分脉冲编码调制(DPCM)。DPCM是一种无损或有损压缩技术,通过利用信号中的冗余性来减少数据传

    2024年02月15日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包