ARM Mbed数字信号处理

2023-10-31

信号处理对于许多应用而言很重要。 借助现代计算机的强大功能,许多信号处理功能现在都可以通过数字方式完成。 本文,我们将说明如何使用Arm Mbed -DSP库进行数字信号处理和控制。

低通滤波器

在Arm Mbed 网站上,有关于如何设计和实现低通FIR(有限脉冲响应)滤波器的出色教程。 我们基本上将遵循该示例,并将其扩展到高通滤波器和带通/停止滤波器。

首先,我们需要使用MATLAB软件(www.mathworks.com)创建数字滤波器。 数字滤波器设计是一个复杂的主题,因为它涉及复杂的数学运算。 MATLAB有一个信号处理工具箱,可以使数字滤波器的设计更加简单。 FIR(有限脉冲响应)滤波器和IIR(无限脉冲响应)滤波器是常用的数字滤波器。 这里使用FIR滤波器,因为它不需要反馈环路并且更稳定。

以下是MATLAB代码,该代码使用“ fir1”函数创建了低通滤波器。 采样率为48,000 Hz,奈奎斯特频率为采样频率24,000 Hz的一半,截止频率为6000 Hz。 “ fir1”功能在归一化的频率范围(0到1)中创建一个28阶数字滤波器,其中1代表奈奎斯特频率,即24,000 Hz。 因此,归一化的截止频率将为6000 / 24,000 = –¼,或0.25。

下图显示了FIR低通滤波器及其29个(+1阶)系数。 现在,我们可以在mbed程序中使用这些系数来实现低通数字滤波器。

fir_coeff =-0.0018 -0.0016 0.0000 0.0037 0.0081 0.0085 -0.0000 -0.0174-0.0341 -0.0334 0.0000 0.0676 0.1522 0.2229 0.2505 0.2229 0.1522 0.0676 0.0000 -0.0334 -0.0341 -0.0174 -0.0000 0.0085 0.0081 0.0037 0.0000 -0.0016 -0.0018

以下是使用上述FIR低通滤波器系数的mbed示例。 它首先使用1000 Hz正弦波和15,000 Hz正弦波生成混合信号(32×20点),然后使用FIR低通滤波器滤除15,000 Hz。 最后,它通过虚拟COM端口将原始信号和滤波后的信号打印到计算机上。 在下图中,滤波后的信号上移了3 V,因此我们可以分别查看两个信号。

在此程序中,您将需要mbed-DSP库

下图显示了使用Arduino串行绘图仪的程序输出,原始混合信号在底部,滤波后的信号在顶部。 如我们所见,经过滤波后,仅剩下1000 Hz信号。

高通滤波器

下图显示了相应的FIR高通滤波器及其29个(+1阶)系数。 现在,我们可以在mbed程序中使用这些系数来实现低通数字滤波器。

fir_coeff =0.0018 0.0016 -0.0000 -0.0037 -0.0080 -0.0085 -0.0000 0.01730.0340 0.0332 -0.0000 -0.0674 -0.1516 -0.2221 0.7487 -0.2221-0.1516 -0.0674 -0.0000 0.0332 0.0340 0.0173 -0.0000 -0.0085-0.0080 -0.0037 -0.0000 0.0016 0.0018

修改上述C程序,并使用新值更改FIR系数,如下所示。

下图显示了使用Arduino串行绘图仪的程序输出,原始混合信号在底部,滤波后的信号在顶部。 正如我们这次看到的,经过滤波后,仅剩下15,000 Hz的信号。

带通滤波器

对于带通滤波器,修改上述MATLAB代码,在这种情况下,仅允许通过0.5×24,000(12,000 Hz)到0.7×24,000(16,800 Hz)之间的频率。 其他频率被阻止。 下图显示了相应的FIR带通滤波器及其29个(+1阶)系数。

现在,我们可以在mbed程序中使用这些系数来实现带通数字滤波器。

fir_coeff =-0.0011 -0.0030 0.0033 0.0010 0.0000 -0.0024 -0.0171 0.03320.0207 -0.0974 0.0400 0.1292 -0.1494 -0.0622 0.2069 -0.0622-0.1494 0.1292 0.0400 -0.0974 0.0207 0.0332 -0.0171 -0.00240.0000 0.0010 0.0033 -0.0030 -0.0011

修改上例,并使用新值更改FIR系数,如下所示

下图显示了使用Arduino串行绘图仪的程序输出,原始混合信号在底部,滤波后的信号在顶部。 正如我们这次看到的那样,经过带通滤波后,仅剩下15,000 Hz的信号。

带阻滤波器和陷波滤波器

对于带阻滤波器,请修改上述 MATLAB代码,并将“ fir1”功能行,在这种情况下,将阻止0.5×24,000(12,000 Hz)到0.7×24000(16,800 Hz)之间的频率,并允许使用其他频率。 当频带变得足够窄时,带阻滤波器将变成陷波滤波器。

fir_coeff =0.0011 0.0029 -0.0032 -0.0010 -0.0000 0.0023 0.0165 -0.0320-0.0200 0.0939 -0.0385 -0.1245 0.1440 0.0599 0.7974 0.05990.1440 -0.1245 -0.0385 0.0939 -0.0200 -0.0320 0.0165 0.0023-0.0000 -0.0010 -0.0032 0.0029 0.0011

下图显示了相应的FIR带阻滤波器及其29个系数,可在mbed程序中使用它们来实现带阻数字滤波器。

修改上述示例,并使用新值更改FIR系数,如下所示

下图显示了使用Arduino串行绘图仪的程序输出,原始混合信号在底部,滤波后的信号在顶部。 我们可以看到,滤波之后,停止了15,000 Hz信号,仅剩下1000 Hz信号。

快速傅立叶变换(FFT)

快速傅立叶变换(FFT)和逆FFT具有许多重要的应用。 在本节中,我们将展示如何使用mbed-DSP库执行FFT和逆FFT:

以下示例说明了如何使用“ arm_cfft_f32()”执行复杂的FFT。 “ arm_cfft_f32()”函数只能用于[16、32、64,…,4096]的数据长度,但可以同时用于FFT和逆FFT。 检查mbed-DSP库以获取功能的详细信息。

程序首先根据FFT长度(FFT_LEN)创建并初始化复数FFT实例S,在这种情况下为512点。 然后,它使用“ sin()”函数(30 Hz和100 Hz)生成混合频率信号,采样时间dt = 0.001秒; 因此,采样频率为Fmax = 1 / dt = 1000Hz,Nyquest频率为Fmax / 2 = 500Hz。 当我们要使用实信号时,我们将虚分量设置为零。 它还同时通过虚拟COM将原始混合信号打印到计算机。 然后,它将程序暂停5秒钟。 最后,它调用“ arm_cfft_f32()”以执行复杂的FFT,并调用“ arm_cmplx_mag_f32()”以计算变换后的信号的幅度,并通过虚拟COM将FFT变换信号的幅度打印到计算机。

同样,我们可以使用Arduino串行绘图仪查看结果。 如下图所示,混合的原始信号在顶部,相应的FFT转换信号的幅度在底部。 由于FFT变换后的信号始终包含中间镜像的重复峰值,因此当我们可以清楚地看到两个频率峰值(30 Hz和100 Hz)时,我们只需要查看图的前半部分。 峰值也与原始信号幅度成正比(1.0和0.5)。

FFT的一个非常有趣的应用是我们可以修改FFT转换后的信号,例如应用低通滤波器或高通滤波器,然后执行逆FFT。 在下面的示例中,FFT之后,通过将低频分量(<50 Hz)设置为零来将其删除,这等效于应用高通滤波器。 然后使用“ arm_cfft_f32(S,samples,1,1)”功能执行逆FFT。

下图显示了程序的相应四个后续输出。 每个输出之间有5秒的延迟。 下图(顶部)显示了原始的混合频率信号,(底部)显示了其对应的FFT频域信号。

下图(顶部)显示了去除了较低频率分量(<50 Hz)的FFT频域信号,下图(底部)显示了对应的逆FFT信号。 如我们所见,在重构信号中仅保留了高频分量。

同样,我们也可以使用FFT实现低通滤波器。 在下面的示例中,在进行FFT之后,通过将较高的频率分量(> 50 Hz)设置为零来将其删除。 这等效于应用低通滤波器。 然后通过使用“ arm_cfft_f32(S,samples,1,1)”函数执行逆FFT。

下图(顶部)显示了去除了较高频率分量(> 50 Hz)的FFT频域信号,下图(底部)显示了相应的逆FFT信号。 我们可以看到,只有低频成分保留在重构信号中。

PID控制器

PID(比例-积分-微分)控制器是最常用的控制机制之一。 它是一种闭环控制器,可以在许多控制系统中使用,例如温度控制,巡航控制等。PID控制器连续计算误差值e(t)作为所需设定点与测量过程变量之间的差,并且 如以下等式中所述,基于比例,积分和微分项应用校正。

e(t)=设定值-过程变量

u(t)=Kpe(t)+Ki0te()dt+Kdde(t)dt

其中Kp,Ki和Kd是比例项,积分项和微分项的系数,而u(t)是将应用于系统的校正。

在Arm Mbed 设备中有多种实现PID控制器的方法。 最简单的方法是使用mbed-DSP库:

在此示例中,变量set_point是期望值,变量pv是测得的过程变量,变量u是通过PWM输出引脚进行的相应校正。 在这种情况下,变量pv连接到模拟输入引脚,并且电位计用于更改变量pv值。 然后将pv值和u值打印到虚拟COM端口。 (2 + u)将u值上移2伏,这有助于我们分别查看pv图和u图。

下图显示了使用Arduino串行绘图仪的程序输出,变量pv值在底部,变量u值在顶部。 结果表明,变量pv值一变化,变量u值就相应地变化。 可以通过调整PID的Kp,Ki和Kd系数来减少u值变化时的表观振荡。

我们可以修改上面的示例,使其更灵活,如以下代码所示。 可以从计算机的虚拟COM端口获取Kp,Ki和Kd系数(如果有)。 如下图所示,Kp,Ki和Kd系数以三个由|隔开的数字发送。

详情参阅 - 亚图跨际

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ARM Mbed数字信号处理 的相关文章

  • 射频中的 S参数 总结

    S参数简介 S参数 也就是散射参数 是微波传输中的一个重要参数 S12为反向传输系数 也就是隔离 S21为正向传输系数 也就是增益 S11为输入反射系数 也就是输入回波损耗 S22为输出反射系数 也就是输出回波损耗 S参数作为描述线性无源传
  • 【中国电工技术学会主办】2022年能源,电力与电气工程国际研讨会(CoEEPE 2022)

    中国电工技术学会主办 2022年能源 电力与电气工程国际研讨会 CoEEPE 2022 重要信息 会议网址 www coeepe org 会议时间 2022年11月11 13日 召开地点 安徽合肥 合肥滨湖国际会展中心 截稿时间 2022年
  • 使用 FPGA 评估板学习 VHDL

    特点 使用 Arrow 经济实惠且适合面包板的 FPGA 开发板 BeMicro MAX 10 创建光传感器 温度传感器 运动传感器和汽车显示器 学习 FPGA 和电子学背后的理论 包括理解正在发生的事情所需的数学和逻辑 了解什么是 FPG
  • 【福利】南昌大学NCU主题电子笔记本,免费获取!

    转载请注明出处 小锋学长生活大爆炸 xfxuezhang cn 禁止转卖 恰烂钱可耻 下载链接 https pan baidu com s 1RWVrQgbmth CwoTcY 1yVw pwd 5gu8
  • 电感的主要参数

    转载 大鑫专栏 大鑫专栏 2022 02 13 21 08 电感的主要参数 1 电感量 L 又称自感系数 表示电感器产生自感能力的一个物理量 电感器电感量的大小 主要取决于线圈的圈数 匝数 绕制方式 有无磁心及磁心的材料等等 当通过一个线圈
  • 2023年数字信号处理前沿国际会议(CFDSP 2023)

    2023年数字信号处理前沿国际会议 CFDSP 2023 重要信息 会议网址 www cfdsp org 会议时间 2023年2月24 26日 召开地点 新加坡 截稿时间 2022年12月31日 录用通知 投稿后2周内 收录检索 EI Sc
  • 什么是开尔文测试?什么时候需要采用开尔文接法?

    开尔文 Kelvin 测试就是通常所说的四线测试方式 四线开尔文测试的目的是扣除导线电阻带来的压降 一段30cm长导线的等效电阻大概是十毫欧姆到百毫欧姆 如果通过导线的电流足够大 比如是安培级的话 那么导线两端的压降就达到几十到上百mV 如
  • Keil编辑和STM32cubemx配置STM32控制步进电机

    使用Keil ARM V5 IDE编程和STM32CUBEMX代码配置实现STM32F103和步进电机驱动器模块A4988控制步进电机 Keil和Stm32cubemx 安装 安装Keil IDE非常简单 下载包含Keil IDE的MDK
  • 电子竞赛项目回顾——基于多物料识别分拣的离线式监管工业流水线系统

    1 项目简介 本项目融合了工业物联网技术 FPGA图像处理等技术 针对工业流水线上的多物料分拣 提出了一种自下而上全自动化式 工厂监管离线式的解决方案 工厂内部所有的控制层 感知层均通过无线传输层与工厂总控主机相连 同时主机实时将工厂运行的
  • MCP2515调试笔记(一)

    MSP430 MCP2515调试笔记 一 MCP是MricoChip 公司生产的一款独立CAN控制器 相比恩智浦公司的SJA1000 它的主要特点是与微控制器之间通过SPI方式进行数据交换而不是SJA1000的并行方式 这样可以大大减少引脚
  • Python探索Raspberry Pi机器人平台

    随机轨迹 第一代机器人吸尘器在一个无限循环中使用了一种非常简单的算法 直行直到撞到障碍物 转一个随机角度 如果您担心这种行为的清洁质量 那可能是对的 但是从数学角度来看 如果给定无限的时间 只要机器人可以物理上到达 该算法将覆盖整个清洁区域
  • 数字电子钟 1Hz 秒脉冲信号的设计

    数字电子钟 1Hz 秒脉冲信号的设计 摘 要 要设计数字钟 首先应选择一个能产生稳定的标准时间脉冲信号 而脉冲源产生的脉冲信号的频率较高 因此 需要进行分频 使高频脉冲信号变成适合于计时的低频脉冲信号 即 秒脉冲信号 频率1HZ 1引言 数
  • 【会议分享】2022年工业电子与仪器仪表国际会议(ICoIEI 2022)

    2022年工业电子与仪器仪表国际会议 ICoIEI 2022 重要信息 会议网址 www icoiei org 会议时间 2022年10月15 17日 召开地点 韩国济州岛 截稿时间 2022年9月15日 录用通知 投稿后2周内 收录检索
  • 2023年交通与智慧城市国际会议ICoTSC 2023

    会议日期 2023 5 26 至 2023 5 28 会议简介 2023年交通与智慧城市国际会议 ICoTSC 2023 重要信息 会议网址 www icotsc org 会议时间 2023年7月28 30日 召开地点 长沙 截稿时间 20
  • 同旺科技USB to I2C 适配器烧写 Arduino 模块

    所需设备 内附链接 1 同旺科技USB to I2C 适配器 2 Arduino 模块 硬件连接 用同旺科技USB to I2C 适配器连接芯片的TX RX GND 打开Arduino IDE编辑工具 点击 上传 按钮 完成程序的编译和烧录
  • 运动标记校正检测

    该项目的目的是开发一个使用OpenCV的手势跟踪系统 该系统使用现场可编程门阵列 FPGA 作为嵌入式系统 通常 锻炼手臂某些部位的人运动不正确且没有任何反馈 因此 该项目的动机是识别特定手势并向用户提供有意义的纠正反馈 该项目使用3D立体
  • 无线通信(LoRa和zigbee,补充WIFI)

    原文 1 LoRa是物联网应用中的无线技术有多种 可组成局域网或广域网 2 ZigBee是基于IEEE802 15 4标准的低功耗局域网协议 1 简介 LoRa 是LPWAN通信技术中的一种 是美国Semtech公司采用和推广的一种基于扩频
  • ESP32 ADC –使用Arduino IDE读取模拟值

    本文介绍了如何使用Arduino IDE通过ESP32读取模拟输入 模拟读取对于从电位计或模拟传感器等可变电阻读取值非常有用 模拟输入 ADC ADC是非线性的 analogRead 函数 其他有用的功能 使用ESP32从电位计读取模拟值
  • 【零知ESP8266教程】AP模式下WIFI UDP协议通信示例

    本帖主要讲解ESP8266 WIFI功能关于UDP协议网络传输的应用 这里演示了ESP8266在AP模式下UDP通信的示例 1 硬件 零知ESP8266开发板 2 软件 1 代码如下 文件 udp server ino by 零知实验室 u
  • Arduino IDE将FreeRTOS用于STM32

    介绍 适用于STM32F103C8的FreeRTOS STM32F103C是一种能够使用FreeRTOS的ARM Cortex M3处理器 我们直接在Arduino IDE中开始使用STM32F103C8的FreeRTOS 我们也可以使用K

随机推荐

  • CPAN常见问题集

    CPAN常见问题集 想要更详细的关于perl的文档 你应该到这里来看看 www perl com 如果想看perl FAQ 可以到这里来 perlfaq cpan org 1998 2001 Elaine Ashton
  • Linux定时任务:ERROR (getpwnam() failed) 解决方法

    设置了个定时任务 但是发现没有执行 查看日志如下 root xw crm dep d tail f var log cron Aug 13 22 09 01 dep crond 1619 system RELOAD etc crontab
  • postgreSQL离线安装(rpm包方式)

    1 下载pg的rpm包 https yum postgresql org 根据选择适合的版本 这里以centos7和pg13 0为例 下载好这四个rpm包 postgresql13 server 13 0 1PGDG rhel7 x86 6
  • 开心档-软件开发入门之MongoDB 高级索引

    作者简介 每天分享MongoDB教程的学习经验 和学习笔记 座右铭 有自制力 做事有始有终 学习能力强 愿意不断地接触学习新知识 个人主页 iOS开发上架的主页 前言 本章将会讲解在数组中创建索引 需要对数组中的每个字段依次建立索引 所以在
  • 按键实现顺序一次亮2个led,顺序一次灭2个led

    c语言实现编程 keil51 点亮led灯 学习记录 在以前的基础上实现按一下 亮俩个 按一下 灭俩个 解决一直存在的问题 1 char代表的首位为符号位 1为负数 0为正数 所以有效位数为7位 uchar不区分 直接就是8位 2 关于右移
  • 100天精通Python(基础篇)——第4天:数据类型

    作者介绍 Python领域优质创作者 数据开发工程师 励志成为Python全栈工程师 关注我发现更多精彩 本文已收录于Python全栈系列专栏 100天精通Python从入门到就业 欢迎订阅 订阅后可私聊进Python全栈VIP交流群 手把
  • Java 流

    Java 流 什么是流 流是一个相对抽象的概念 所谓流就是一个传输数据的通道 这个通道可以传输相应类型的数据 进而完成数据的传输 这个通道被实现为一个具体的对象 字符流和字节流 抽象类 处理字节 InputStream OutputStre
  • 心电图心电轴怎么计算_需要你拿小本本记下的知识点——教你怎么看懂心电图...

    心电图 相信大家都很熟悉 但是你是否能看懂心电图呢 攻略来啦 大家可以拿小本本记下来 推荐有点医学基础的人观看 了解一下心电图怎么看 也能对自己有所帮助 接下来就让我们开始吧 心电图的波形组成 见下图 基本知识 1 拿到一个心电图 先看基本
  • python 环境配置测试,手工照敲线性回归实战

    lesson013 linear regression py import numpy as np error for y wx b def compute error for line given points b w points to
  • nodejs --buffer模块(三) buffer的操作和属性

    全局方法 Buffer byteLength string encoding 返回字符串实际字节的长度 Buffer compare buf1 buf2 比较两个buffer的前后顺序 等价于buffer1 compare buf2 Buf
  • 【Qt教程】2.2 - Qt5 布局管理器(水平、垂直、栅格布局)、弹簧、设计一个登陆界面

    使用布局管理器 来设计一个登陆界面 都是操作 没代码没理论 参照 Qt设计一登陆窗口布局 1 新建空工程 双击 ui文件 进入界面设计区 我们新建工程时候 使用的是QMainWindow类 会自动包含菜单栏 状态栏 在右上角对象浏览器中 我
  • TeleGram都有哪些限制?

    账户 用户名 形如 TGgeek 5 32字符 用户名 username 有什么用 一定要设置吗 如何设置 名字长度 1 64字符 姓氏长度 0 64字符 账号自毁时限 如果账号在一定时间内不上线 到时限后会自动删除账号和所有资料 删除后不
  • visual studio:未能加载文件或程序集“xxx.dll”或它的某一个依赖项

    1 没有添加库目录或附加库目录 2 如果dll内部有错误 也会提示这个
  • 内联元素的padding和margin

    内联元素的padding和margin能设置上吗 这是我前段时间面试某中厂被问到的一道面试题 一开始有点懵 但照自己的理解是这样回答的 内联元素不能通过改变宽高来改变元素大小 只能通过内部撑开 padding设置不上 margin left
  • rand()查询效率问题解决

    随机从数据表中取一条数据 我们一般会用到rand 函数 但是如果用不好的话 rand 的效率实在太低 基础使用 SELECT FROM tablename ORDER BY RAND LIMIT 1 这是最基本的rand 用法 实例测试 我
  • 史上最全,Spring Boot入门篇总结,收藏起来慢慢看

    Spring Boot是Spring家族下的一个全新开发框架 其设计目的主要是用来简化Spring应用的创建及开发过程 它提供了自动配置 starter依赖等特性 从而使开发人员从大量的XML配置中解脱出来 Spring Boot致力于在蓬
  • mysql-批量更新

    方法一 用update结合case then实现 原始SQL语句 UPDATE baginfo 2021 09 SET channel id CASE id WHEN 1 THEN 3 WHEN 2 THEN 4 WHEN 3 THEN 5
  • 五分钟9步搞定nginx正向代理配置方法

    nginx在绝大数的场景中我们使用其用于做web中间件或反向代理使用 但是nginx实际上也提供了正向代理的功能 下面我们来进行nginx正向代理配置操作 以便大家能够掌握nginx正向代理配置方法 第一步 获取nginx正向代理模块 gi
  • 微信小程序---点餐小程序左侧滑动菜单实现

    文章目录 前言 一 初识scroll view 二 左侧导航 三 右侧滑动 前言 最近在帮亲戚做一款微信的点餐小程序 以前从没有接触过小程序的我只能现做现卖 一边看文档一边实践尝试 在进行到点菜模块左侧滑动菜单时遇到了小小的阻碍 索性在查找
  • ARM Mbed数字信号处理

    信号处理对于许多应用而言很重要 借助现代计算机的强大功能 许多信号处理功能现在都可以通过数字方式完成 本文 我们将说明如何使用Arm Mbed DSP库进行数字信号处理和控制 低通滤波器 在Arm Mbed 网站上 有关于如何设计和实现低通