利用DSP实现数字滤波器(教程)
前言
大学的最后一个课程设计终于是完成了,虽然实际耗费的时间不到 10 小时(中间一直在摸鱼),不打算考研甚至有点闲得无聊,一时头脑发热想写下这篇博客。
笔者主要使用的软件是 CCSv2 版本和 Matlab2021,使用不同版本可能会出现不可预知的一些问题。
主要思路
- 使用 Matlab 对音频进行加噪处理,并将数据输出到.dat 格式文件中。
- 在 CCS 中设计一个滤波器,将 Matlab 导出的数据进行处理,并输出到相应的.dat 文件中。
- 使用 Matlab 读取 CCS 输出的数据与滤波前进行对比。
前期准备
- 首先,肯定是安装好所需要的软件。
- 准备一段音频,你可以使用自己录制的音频,也可以使用一首歌曲。
ps:建议时间不要过长,一句话即可,过长会使 DSP 处理的时间变得很长。
使用 Matlab 对音频进行处理
1 | Frequency_in = 2500; %需要引入的干扰正弦波的频率 |
- 运行后,会在脚本文件的同级目录下生成数据文件。
CCS 部分
- 配置 DSP 芯片,打开 Setup CCS 2 (‘C5000),选择 C5402 Device Simulator,点击 import,再点击 Save and Quit,然后软件会提示你是否进入 CCS 编辑器,选择是,然后进入 CCS 编辑器主界面。
- 新建项目,在 CCS 菜单栏点击 Project–>New,然后会弹出一个窗口,在窗口中输入项目名(Project Name)、项目存储位置(Location)、项目类型(Project)和目标芯片(Target),对于后两个选项,我们对第一个选择.out 的项目类型,即我们编写汇编项目,目标芯片我们选择 TMS320C54XX,然后点击完成。
- 创建汇编源文件,点击见菜单栏的 File–>New–>Source File,点击弹出的窗口,按下快捷键 ctrl+s 进行保存,在弹出的窗口中选择保存位置、文件名、和文件类型,保存位置建议设置到你的项目目录下;文件名按你的喜好,但要符合命名规则;文件类型我们选择.asm 文件,然后点击保存。
- 将汇编源文件添加到项目中,点击菜单栏的 Project–>Add Files to Project,将你创建的.asm 文件选中,再点击打开。
- 创建链接命令文件,以同样的方法创建一个类型为.cmd 的文件并添加到你的项目中。
- 在项目视图中找到这两个文件并打开,接下来开始编写程序代码。
你的汇编源文件.asm
1 |
|
你的链接命令文件.cmd
1 | MEMORY |
- 保存并关闭这两个文件
- 进行汇编,点击 Project–>Build,汇编成功后会在你的项目目录下生成一个 Debug 文件夹,在该文件夹下存在一个.out 类型的文件;点击 File–>Load Program 加载汇编,在弹出的窗口中选中生成的.out 文件,点击打开。
- 配置 I/O 文件前的准备:将 Matlab 中导出的.dat 数据文件,放在项目目录下,并在项目目录下创建一个.txt 的文本文件,用于滤波器输出,打开该文件,并在第一行编写“1651 1 61 1 1”并保存,然后将文件格式改为.dat 格式。
- 配置 I/O 文件,首先在你的汇编源程序文件里的“STH A,y”语句前加探针,并在“ LD new_data,B”语句前加断点和探针。然后点击菜单栏中的 File–>File I/O,在弹出的窗口中点击 Add File,添加 Matlab 导出的.dat 数据文件,将地址(Address)改为”0x0060”,长度(Length)改为”1”,然后点击 Add Probe Point,选中“line 35”,再将 Connect To 选项设置为 Matlab 导出的文件,然后点击 Replace,输入配置完毕,点击确定,然后将选项卡设置为 File Output 以相同的方法添加上一步手动创建的用于滤波器输出.dat 文件,将地址设置为“0x0061”,长度设置为”1”,然后点击 Add Probe Point,选中“line 33”,再将 Connect To 选项设置为用于滤波器输出的文件,然后点击 Replace,输出配置完毕,点击确定,I/O 配置完毕,点击确定即退出 File I/O 窗口。
- 配置图形窗口,点击菜单栏中的 View–>Graph–>Time/Frequency,在的弹出的窗口中将地址改为”0x0060”,Acquisition Buffer Size 改为“1”,Display Data Size 改为“128”,数据类型设置为“16-bit signed integer”,点击确定,以同样的方法,将地址改为“0x0061”,设置输出波形显示窗口。
- 布置好窗口布局,点击 Animate 进行运行,等待程序运行完毕。
数据对比
- 将 CCS 项目所输出的.dat 数据文件放到该脚本目录下
- 打开 Matlab,进行数据读取的代码编写
1 | %这里是你的.dat数据文件路径 |
- 运行程序,对比原音频和加噪音频,分析效果,反正我听着像对讲机发出的声音。
更新
2023-09-23
课设验收已结束,在这公布我的最终代码以及完整项目。
在此就不提供预览了,需要的话直接下载。
链接:(百度云)https://pan.baidu.com/s/1PxtIWhfAMpXRFfCYe6G17w?pwd=qrpz
(蓝奏云)https://ichinoseyuu.lanzn.com/iNv3E24lqqni
2023-09-20
关于大家遇到的一些问题,在这里做出统一回答
Q:Matlab 程序报错,怎么解决?
A:Matlab 程序报错主要是软件的问题,不必非要用和我同样的版本,对于报错怎么解决,以下是我做的三种方案,希望能解决你 Matlab 报错的问题。
1 | %最新方案,其实很简单,之前被我想的很复杂,在十进制和十六进制之间纠结 |
Q:CCS 安装上打不开,怎么解决?
A:导致这个问题的原因是 CCS 的后台进程并没有被关掉,导致冲突,启动无响应
解决方法:打开任务管理器,找到后台进程中带 CCS 图标的一个进程,结束该进程。
Q:CCS 正常使用,但是代码报错或警告,怎么解决?
A:报错有很多种情况,以下提供我知道的一些报错的和解决方案。
1、报错,提示 BK 寄存器未定义。
未找到原因,BK 寄存器就是存在的,但是我们可以使用别人汇编过后的项目文件,则不需要去 build,直接进行后面的操作。
2、出现警告,没有报错。
直接忽略,进行后面操作。
3、其他报错。
很有可能是你的操作步骤不对,建议重新打开软件进行再次尝试。
Q:CCS 正常运行,图形不太正确。
A:观察你的_input.dat 文件: 1.文件是否过小,只有几 kb,如果是这样,你的 Matlab 生成数据的部分出现问题,观察 Matlab 是否报错; 2.文件中的数据是否正常,如果里面的数值全是 0,则说明你的音频选择可能有问题,或者你的 Matlab 生成数据有问题。