ARM-DSP读书笔记 开坑
ARM-DSP读书笔记 开坑
原书是ARM Education Media的《Digital Signal Processing using Arm Cortex-M based Microcontrollers - Theory and Practice》。由于电赛备赛和个人学习方向需要,决定开个坑细啃这本书,然后再把书中没有详细介绍的地方进行拓展,写笔记主要还是为了给自己梳理一遍思路,也是作为一个笔记的作用。所以如果真的有人刷到了,有错误的地方,非常希望能够指正。
这是arm官方推出的,基于arm的cmsis-dsp库的一个数字信号处理教程,内容是包含了理论和实验两部分,教学资源中甚至还有ppt(但ppt没啥内容),满足10-12周的教学任务,只是他的实验部分是基于配套的stm32f7xx的开发板,我觉得没有太大必要,所以实验部分我计划用stm32f4xx系列的板子来完成。
网站连接:Digital Signal Processing Education Kit – Arm®
相关书本和代码资源等等都可以在这下载
全书目录#
笔记会跟着书本目录的章节来做,顺便作为导航吧,也能督促一下自己
- 数字信号处理基础知识
- 离散时间信号处理基础
- Z变换
- 离散时间信号的频响分析
- 连续时间信号和离散时间信号的转换
- 连续时间信号的数字处理
- Structures for Discrete-Time LTI Systems
- 数字滤波器设计
- 自适应信号处理
- 定点的实现
- 实时数字信号处理
数字信号处理基础知识#
书中这一块单独开了一章,但是内容并不多,只是简单地介绍了一下这本书和数字信号处理的内容,我也不明白为什么叫做“Digital Signal Processing Basics”。
本章主要阐述了什么是信号,如何通过一个系统处理信号,主要是概念。
信号的类型和定义#
其实信号系统并没有指明信号一定是电信号,奥本海姆的信号系统也是更加注重数学上的推导,但对于电子信息工程相关专业的人来说,信号基本都是电形式。对于一个电子系统来说,传感器就是我们的感知器,通过传感器把物理量转换为电子形式,如果一个信号随时间变化(或随另一个变量变化),我们就称他为一个信号。更一般地说,我们认为信号是与某一独立变量顺从某种关系变化的数据(我理解为函数)。一个信号可以被一些系统处理,以便从中获取信息或修改他。
这个更一般的情况,表明了信号不一定是时域的,也可以是频域或是其他域,但最基础的域是时域
连续时间信号#
如果获得的信号是模拟形式的,我们称之为连续时间信号。假设有一个模拟麦克风电路,在示波器上显示音频信号,如果有人对着麦克风说出“Hello”这个词,我们就能够在示波器上看到一个连续时间信号(如下图)。这个信号可以由一些模拟器件组成的连续时间系统进一步处理
离散时间信号#
尽管用连续时间系统处理连续时间信号很合理,但大多数的应用是通过离散系统来处理离散信号。个人理解是模拟系统某些时候成本会高很多,其次抗干扰能力没有数字信号好。(数字信号处理具有高精度、高可靠性、可程序控制、可时分复用、便于集成化等优点。)取一段连续时间信号(如下图),对其进行每秒采44100次点,我们就可以得到一段离散时间信号。
在这个情况下,振幅都还是实数,也就是说,我们只是自变量离散化了,因变量还没有
数字信号#
由于离散时间信号振幅还是实数,在数字系统(如微控制器等)中,我们可以把一段离散时间信号存进一个数组里面,但是无论什么数据类型(int, float)的数组,都只能存储有限范围和精度的值,而无法处理实数。所以,我们应该对其幅值进行量化,即把幅值变为能够用数字系统表达的数值,得到对应的数字信号。
数字信号处理#
DSP的美妙之处在于它的实现,固定的模拟硬件将不是必须的。相反,合适的微控制器就能够实现一个数字系统。DSP系统将只是一个代码片段,这就会存在一些优势:
- 如果系统不满足设计规范,可以简单地重新设计更改相关代码块,无需更改硬件。
- 系统参数可以动态更改,这对于自适应和学习系统非常重要
- 如果微控制器具有通信功能,可以从远程位置修改这些参数。
上述优点使DSP比通过模拟系统进行连续时间信号处理更具优势
实验平台介绍#
书本内的实验是基于stm32f407vgt6的芯片的实验,而arm官方还有一套实验教材是基于stm32f746平台的实验。其实两个都差不多,有些实验没条件的可能会跳过。常用软件为:Keil,Matlab。个人觉得重点在滤波器设计,实时信号处理和自适应滤波,其他地方都是理解为主。官方还提供了一些matlab脚本函数和keil的调试函数。
CMSIS#
Cortex 微控制器软件接口标准 (CMSIS) 是 Cortex-M 处理器独立于供应商的硬件抽象层。
CMSIS有7个组件:
- CMSIS-CORE: 与处理器内核和外设的接口
- CMSIS-Driver: 与通用外设的接口
- CMSIS-DSP: 具有60多种函数的DSP库
- CMSIS-RTOS API: 用于实时操作系统的通用API
- CMSIS-Pack: 基于 XML 的包描述标准
- CMSIS-SVD: 外设的系统视图说明
- CMSIS-DAP: 调试单元的接口
本书实验只讨论CMSIS-DSP库的使用
CMSIS-DSP#
整个实验中广泛使用 CMSIS-DSP 库。该库包括用于向量运算、矩阵计算、复数算术、滤波函数、控制函数、PID控制器、傅里叶的函数变换和其他常用的 DSP 算法。这些函数中的大多数都可以用于浮点数和定点数表示形式。此外这些功能针对 Cortex-M 系列微控制器进行了优化。具体来说,CMSIS-DSP 库包含以下适用于 8 位、16 位和 32 位的函数整数和 32 位浮点数。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)