北邮信号与信息处理DSP实验三剖析.docx
- 文档编号:18089148
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:17
- 大小:583.56KB
北邮信号与信息处理DSP实验三剖析.docx
《北邮信号与信息处理DSP实验三剖析.docx》由会员分享,可在线阅读,更多相关《北邮信号与信息处理DSP实验三剖析.docx(17页珍藏版)》请在冰点文库上搜索。
北邮信号与信息处理DSP实验三剖析
信号与信息综合处理
实验报告
学院:
信息与通信工程学院
班级:
2013211124
姓名:
王丹頔
学号:
2013210659
实验三FIR滤波器实现
1.实验目的
进一步熟悉CCSv5的开发环境,掌握调试的要素,并理解FIR的过程。
2.实验原理
2.1AIC23
(1)AIC23相关介绍
图1AIC23结构图
图2AIC23编码器控制寄存器
图3AIC23寄存器集合
图4采样速率设置
图5采样率可配参数
(2)voidDSK6416_init()
-设置所有的CPLD寄存器到上电状态,初始化内部BSL数据结构;
-在使用任何BSL函数之前都必须调用。
(3)DSK6416_AIC23_openCodec函数
-DSK6416_AIC23_CodecHandleDSK6416_AIC23_openCodec(intid,DSK6416_
AIC23_Config*Config);
-id:
指定使用哪个编码器,DSK6416上为id=0;
-Config:
指向包含编码器寄存器值的结构,以该结构中的值初始化寄存器;
-调用成功:
返回编码器句柄;失败:
返回INV常数(-1)。
(4)DSK6416_AIC23_write函数
-Int16DSK6416_AIC23_write(DSK6416_AIC23_CodecHandlehCodec,Int32val);
-hCodec,Val:
编码器句柄,写入编码器的值;
-返回TRUE:
数据成功写入;
-返回FALSE:
数据端口忙。
(5)DSK6416_AIC23_closeCodec函数
-DSK6416_AIC23_closeCodec(DSK6416_AIC23_CodecHandlehCodec);
-关闭编码器。
2.2FIR滤波器实现
(1)FIR滤波器介绍
滤波器就是在时间域或频域内,对已知激励产生规定响应的网络,使其能够从信号中提取有用的信号,抑制并衰减不需要的信号。
FIR滤波器滤波过程:
,
如果输入信号长度为M,滤波器系数长度为N,线性卷积后输出数据长度为L=M+N-1。
即为:
,
2.3DSP程序优化
(1)优化原理
ØDSP的C6000系列CPU中的8个功能单元可以并行操作,并且其中两个功能单元为硬件乘法运算单元,大大地提高了乘法速度;
ØDSP采用了具有独立程序总线和数据总线的哈佛总线结构,仅片内程序总线宽度就可达到256位,即每周期可并行执行8条32位指令;
Ø片内两套数据总线的宽度分别为32位;
Ø除了多功能单元外,流水技术是提高DSP程序执行效率的另一主要手段。
(2)优化入门
Ø通过选定C编译器的选项来实现优化。
在这个阶段可实现程序级优化,从而部分消除多余代码;
Ø针对C源程序,进行优化。
在运算中,循环经常占用大量的时钟周期,对循环的优化成为代码优化的重点;
Ø对重点段直接线性汇编。
(3)编译选项:
Ømv6400:
使所产生的代码能利用C64x增加的硬件资源和指令集。
此选项编译器默认执行;
Øon:
其中n可以取值为0、1、2和3,编译器将根据n的不同,执行不同等级的优化;
Øk:
生成编译器输出的.asm汇编文件;
Ømw:
生成详细的软件流水报告。
使用-mw后,系统会默认使用-k选项,生成.asm汇编文件并且在其中加入软件流水报告。
(4)关键字restrict
Ø关键字restrict是对指针、引用或数组的一种限定;
Ø使用restrict关键字是为了确保其限定的指针在声明的范围内,是指向一个特定对象的唯一指针,即这个指针不会和其它指针指向存储器的同一地址;
Ø使用restrict关键字可以使使编译器更容易确定是否有别名信息,从而更好地优化代码。
(5)_nassert语句
ØC6416可以在每个时钟周期加载两个64位比特数,对于short类型数据则可以实现一个周期加载两对short数据并行进行运算;
Ø为了能够使两个short数据并行运算,数据的存储地址必须按字地址对齐,这样存取时才不会出错;
Ø_nassert可以告诉编译器数据的对齐信息,编译器便可进行数据优化。
3.程序功能
2
3
3.1FIR滤波器
设计64阶滤波器,通过设置不同的滤波系数,产生低通,带通,和高通三种不同类型滤波器,利用
对已知信号进行卷积运算,获得滤波结果,具体说明如下:
(1)各滤波系数h[FILTER_SIZE]由MATLAB的FDA工具箱产生,其中FILTER_SIZE为滤波器阶数加1;
(2)x[N]为原始序列,由
函数抽样产生,其中
,
;
(3)h1[M]为低通滤波器系数,y1[N]为低通滤波结果;
(4)h2[M]为带通滤波器系数,y2[N]为带通滤波结果;
(5)h3[M]为高通滤波器系数,y3[N]为高通滤波结果。
3.2音频播放
设置48k的采样率,使用AIC23编码器,播放指定指定音频信号,具体说明如下:
(1)播放原始信号x[N],持续时间5s,之后暂停1s;
(2)播放低通滤波后的结果y1[N],持续时间5s,之后暂停1s;
(3)播放带通滤波后的结果y2[N],持续时间5s,之后暂停1s;
(4)播放高通滤波后的结果y3[N],持续时间5s,之后结束播放。
3.3程序优化
通过o2编译选项,程序结构优化以及使用关键词和语句,可进行程序优化,优化后结果可通过流水信息和运行时间观察。
4.程序基本信息
4
4.1程序模块
(1)FIR滤波模块:
功能:
对原始序列进行不同截止频率的滤波,分别获得低通、带通、高通后的滤波信号,以供后续播放;
输入接口:
无;
输出接口:
无。
(2)音频播放模块:
功能:
利用AIC23编码器,按照指定顺序播放音频信号;
输入接口:
无;
输出接口:
AIC23的HPOUT端口,输出播放的音频信号。
4.2代码
1#include
2#include
3#include
4#include"dsk6416.h"
5#include"dsk6416_aic23.h"
6#include"dsk6416.h"
7#include"dsk6416_led.h"
8#include"dsk6416_dip.h"
9#defineN113
10#defineM65
11inth1[M]={17,-53,-22,-13,-10,-10,-9,-9,-8,-7,-5,-4,-1,0,3,6,9,12,16,20,23,27,31,34,37,41,43,46,48,49,51,51,52,51,51,49,48,46,43,41,37,34,31,27,23,20,16,12,9,6,3,0,-1,-4,-5,-7,-8,-9,-9,-10,-10,-13,-22,-53,17};
12inth2[M]={-54,-7,19,-30,-6,-26,9,8,30,12,4,-24,-28,-26,2,25,42,28,1,-34,-48,-36,0,38,57,40,0,-43,-61,-44,0,44,63,44,0,-44,-61,-43,0,40,57,38,0,-36,-48,-34,1,28,42,25,2,-26,-28,-24,4,12,30,8,9,-26,-6,-30,19,-7,-54};
13inth3[M]={0,0,1,0,-1,0,2,2,-2,-3,1,5,0,-7,-2,8,6,-9,-12,7,18,-3,-25,-4,33,18,-39,-42,45,92,-48,-313,549,-313,-48,92,45,-42,-39,18,33,-4,-25,-3,18,7,-12,-9,6,8,-2,-7,0,5,1,-3,-2,2,2,0,-1,0,1,0,0};
14inty1[N]={0},y2[N]={0},y3[N]={0};
15intx[N]={3000,1698,-34,216,866,86,-292,1315,2500,1089,-741,-576,0,-837,-1258,324,1500,98,-1707,-1500,-866,-1630,-1965,-284,1000,-284,-1965,-1630,-866,-1500,-1707,98,1499,324,-1258,-837,0,-576,-741,1089,2499,1315,-292,86,866,216,-34,1698,3000,1698,-34,216,866,86,-292,1315,2500,1089,-741,-576,0,-837,-1258,324,1500,98,-1707,-1500,-866,-1630,-1965,-284,1000,-284,-1965,-1630,-866,-1500,-1707,98,1499,324,-1258,-837,0,-576,-741,1089,2499,1315,-292,86,866,216,-34,1698,3000,1698,-34,216,866,86,-292,1315,2500,1089,-741,-576,0,-837,-1258,324,1500};
16DSK6416_AIC23_Configconfig={
170x0017,//0DSK6416_AIC23_LEFTINVOLLeftlineinputchannelvolume
180x0017,//1DSK6416_AIC23_RIGHTINVOLRightlineinputchannelvolume
190x00d8,//2DSK6416_AIC23_LEFTHPVOLLeftchannelheadphonevolume
200x00d8,//3DSK6416_AIC23_RIGHTHPVOLRightchannelheadphonevolume
210x0011,//4DSK6416_AIC23_ANAPATHAnalogaudiopathcontrol
220x0000,//5DSK6416_AIC23_DIGPATHDigitalaudiopathcontrol
230x0000,//6DSK6416_AIC23_POWERDOWNPowerdowncontrol
240x0043,//7DSK6416_AIC23_DIGIFDigitalaudiointerfaceformat
250x0001,//8DSK6416_AIC23_SAMPLERATESampleratecontrol,48Khz
260x0001//9DSK6416_AIC23_DIGACTDigitalinterfaceactivation
27};
28voidmain()
29{
30intn,k;
31//FIR滤波
32for(n=0;n 33y1[n]=y2[n]=y3[n]=0; 34for(n=64;n 35for(k=0;k 36y1[n]+=x[n-k]*h1[k]; 37y2[n]+=x[n-k]*h2[k]; 38y3[n]+=x[n-k]*h3[k]; 39} 40y1[n]/=100; 41y2[n]/=100; 42y3[n]/=100; 43} 44//初始化编码器 45DSK6416_AIC23_CodecHandlehCodec; 46intmsec,sample; 47DSK6416_init(); 48 49//播放原信号 50hCodec=DSK6416_AIC23_openCodec(0,&config); 51for(msec=0;msec<5000;msec++) 52{ 53for(sample=64;sample<112;sample++) 54{ 55while(! DSK6416_AIC23_write(hCodec,x[sample])); 56while(! DSK6416_AIC23_write(hCodec,x[sample])); 57} 58} 59DSK6416_waitusec(1000000); 60 61//播放经低通滤波的信号 62for(msec=0;msec<5000;msec++) 63{ 64for(sample=64;sample<112;sample++) 65{ 66//leftchannel 67while(! DSK6416_AIC23_write(hCodec,y1[sample])); 68//rightchannel 69while(! DSK6416_AIC23_write(hCodec,y1[sample])); 70} 71} 72DSK6416_waitusec(1000000); 73 74//播放经带通滤波的信号 75for(msec=0;msec<5000;msec++) 76{ 77for(sample=64;sample<112;sample++) 78{ 79while(! DSK6416_AIC23_write(hCodec,y2[sample])); 80while(! DSK6416_AIC23_write(hCodec,y2[sample])); 81} 82} 83DSK6416_waitusec(1000000); 84 85//播放经高通滤波的信号 86for(msec=0;msec<5000;msec++) 87{ 88for(sample=64;sample<112;sample++) 89{ 90while(! DSK6416_AIC23_write(hCodec,y3[sample])); 91while(! DSK6416_AIC23_write(hCodec,y3[sample])); 92} 93} 94DSK6416_waitusec(1000000); 95 96//关闭编码器 97DSK6416_AIC23_closeCodec(hCodec); 98} 4.3流程图 (1)总流程图 (2)AIC23编码器流程图 5.组内分工 组内成员 学号 负责任务 刘美亿 2013210654 负责相关程序配置,协助完成程序编写及进行程序调试 王丹頔 2013210659 协助相关程序配置,负责完成程序编写及进行程序调试 6.功能测试 1 2 2 3 4 5 6 6.1软件平台 (1)原始混频信号波形 (2)低通滤波后的波形信号 (3)带通滤波后的波形信号 (4)高通滤波后的波形信号 (5)代码优化: 如果没有进行软件流水,程序运行结束时,clock显示为: 3445243465,即程序共需要3445243465个时钟周期。 优化后,程序运行结束时,clock显示为: 17736121,即程序共需要17736121个时钟周期。 (6)查看流水信息: 当打开-mw选项后,build之后在debug文件夹中会生成.asm文件。 打开asm文件可以查看8个功能单元的使用情况。 6.2DSP 将目标板连接到计算机上,接好耳机,将输出文件加载到活动目标,选择run->resume,将会听到5s原始信号,之后5s低通信号、5s带通信号、5s高通信号,信号之间间隔1s。 7.重点、难点 (1)原始信号采样及滤波系数 三种不同截止频率的滤波系数则由MATLAB的FDA工具箱产生,而在通过MATLAB获得原始信号采样值时,需注意采样频率,采样频率应该适中,能尽可能混频信号特性,否则会对之后的滤波结果产生较大的影响。 本次实验图像的大体方向是对的,但是所在包络出的波动,应该更趋近于正弦函数,但是却有极其明显的尖锐部分。 组内认为是在选取初值时,Mathlab的相关操作产生了一定的误差,也有可能是因为芯片本身的功能存在差异,导致结果并不是很理想。 (2)线性卷积结果 本次实验中,原始信号长度M为113,而滤波器系数序列长度N为65,线性卷积结果长度为L=M+N-1=117。 在进行本次实验之前,需要明确卷积结果长度,因而在本次实验中,截取y[64]到y[111]这一段数据作为音频输出数据。 在绘图时,将点数设为173,输出序列失真,而将其改为113后,恢复为正常波形,对于输出结果序列的长度,应该始终明确,否则将对实验结果造成影响。 (3)断点设置 在进行波形绘制过程时,绘图选项为灰色,无法进行绘图前,调试之后,应在main()最后一行设置断点,运行后解决这一问题。 8.心得体会 本次实验包含了DSP中FIR及IIR的相关内容,在回顾了课本知识后完成了本次实验,对有限冲激响应和无限冲激响应的数字滤波器有了更为深入的领悟。 本次实验需要借助MATLAB生成抽样后的原始函数及滤波器系数,之后在利用线性卷积公式和AIC23解码器即可完成滤波后音频输出,从而完成本次实验。 在助教验收环节,提及了FIR相关结构,IIR滤波器的总类及之前的区别等相关问题,细致的问题在很大程度上帮助我们回忆起了并巩固了相关细节。 本次实验作为DSP最后一次实验,在有了前两次实验经验的基础上,环境配置等步骤相对轻车熟路,但实验内容还是让我们获益匪浅。 虽然DSP相关实验已经结束,但在后续的学习生活中,我们还将继续再接再厉,更加细致认真地完成FPGA相关实验。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信号 信息处理 DSP 实验 剖析