第一篇:dsp 期末作业
Yibin University
DSP期末学科设计报告
题 目 第五章5-
18、5-19 院 别 物理与电子工程学院 专 业 电子信息科学与技术
学生姓名 梁 杰 学 号 110303038 班级 11 级 3 班
年1月日
2014 6
一、实验目的
1、了解巴特沃斯方法
2、掌握脉冲响应不变法设计数字低通滤波器
3、熟悉各种滤波器特点
二、实验原理
1、脉冲不变法原理
脉冲响应不变法是实现模拟滤波器数字化的一种直观而常用的方法。它特别适合于对滤波器的时域特性有一定要求的场合。
脉冲响应不变法的核心原理是通过对连续函数ha(t)等间隔采样得到离散序列ha(nT)。令h(n)= ha(nT),T为采样间隔。它是一种时域上的转换方法。一个模拟滤波器的传递函数可以用有理分式表达式表示为:
M01MNaN01aas...as H(s)...bbsbs通过反拉普拉斯变换我们就可以得到它的冲激相应:
h(t)L[Ha1a(s)]
脉冲响应不变法就是要保证脉冲响应不变,即:
h(n)ha(nT)
对上式的冲激相应序列h(n)作Z变换,就可以得到数字滤波器的传递函数:
H(z)ZT[ha(nT)]
一般来说,H(s)的分母多项式阶次总是大于分子多项式的阶次。假定H(s)aa的没有多重极点,则式就可分解为:
Ha(s)i1NA
ssii式中si,Ai均为复数,si是H(s)的极点。其拉氏变换为
aha(t)Aiei1Nsi.Tnu(n)
一般来说,Ha(s)的分母多项式阶次总是大于分子多项式的阶次。数字滤波器的传递函数H(z)经过合并简化,成为一般形式的有理分式传递函数
c0c1z1...cLzL H(z)
d0d1z1...dNzN
在讨论采样序列z变换与模拟信号拉氏变换之间关系的有关章节中,我们已经知道
1H(z)|zesTTKHa(sj2K)T按照z=eST的关系,每一个s平面上宽度为2/T的水平条带将重迭映射到z平面上。因此脉冲响应不变法将s平面映射到z平面,不是一个简单的一一对应的关系。对于高采样频率(T小)的情况,数字滤波器在频域可能有极高的增益。为此我们采用
H(z)TAi
SIT11ezi1NIN
h(n)Tha(nT)TAieSTnu(n)
i1在脉冲响应不变法设计中,模拟频率与数字频率之间的转换关系是线性的(*T)。同时,它可以保持脉冲响应不变,h(t)=ha(nT)。因此,这一方法往往用于低通时域数字滤波器设计及相应的模拟系统数字仿真设计。
2、双线性变换法设计数字滤波器原理
将S平面j轴压缩变换到s1平面j轴上的-/T到/T一段,可以采用以下变换关系:
T tan1
21T,0变换到10,可将上式写成 这样变换到
jeej1T21T2eej1T21T2jj
令js,j1s1,解析延拓到整个s平面和s1平面,可得
sees1T2s1T2ees1T2s1T2
再将s1平面通过以下变换关系映射到z平面,即
zes1T
从而得到s平面和z平面的单值映射关系为
1z1s 1z1z1s 1s 一般来说,为了使模拟滤波器的某一频率与数字滤波器的任一频率有对应关系,可引入待定常数c,Tctan1
21es1Tsc s1T1es1Tze将代入到上式,可得
1z1sc
1z1zcs cs在MATLAB中,双线性Z变换可以通过bilinear函数实现,其调用格式为:
[Bz,Az]=bilinear(B,A,Fs); 其中B,A为模拟滤波器传递函数G(s)的分子分母多项式的系数向量,而Bz,Az为数字滤波器的传递函数H(z)的分子分母多项式的系数向量。
三、实验内容 1、5-18题用脉冲响应不变法设计一个三阶巴特沃思数字低通滤波器,截止频率fc=1kHz,设采样频率fs=6.28kHz。
根据解题思路,编写源程序如下:
%截止频率wc=1Kz,采样频率fs=6.283 KHz fs=6.283*1000;wc=2*pi*1000;[B,A]=butter(3,wc,'s');
[num,den]=impinvar(B,A,fs);
[db,mag,pha,grd,w]=freqz_m(num,den);f=0.5*fs*w/pi;
plot(f,db,'-');grid;
xlabel('以HZ为单位的频率');ylabel('对数幅度/db');title('巴特沃斯低通滤波器');
图
一、实验1仿真结果图 2、5-20题用双曲线变换法设计一个满足下面指标的数字带阻巴特沃思滤波器;通带上下边带各为0-95Hz和105-500Hz,通带波动3dB,阻带为99-101Hz,阻带衰减13dB,取样频率为1kHz。
根据题意及解题思路,程序设计如下:
Rp=3;Rs=13;T=0.001;fp1=95;fp2=105;fs1=99;fs2=101;
wp1=2*pi*fp1*T;wp2=2*pi*fp2*T;ws1=2*pi*fs1*T;ws2=2*pi*fs2*T;wp3=(2/T)*tan(wp1/2);wp4=(2/T)*tan(wp2/2);ws3=(2/T)*tan(ws1/2);ws4=(2/T)*tan(ws2/2);wp=[wp3,wp4];ws=[ws3,ws4];
[n,wn]=buttord(wp,ws,Rp,Rs,'s');
[z,p,k]=buttap(n);[b,a]=zp2tf(z,p,k);w0=sqrt(wp3*wp4);Bw=wp4-wp3;[b1,a1]=lp2bs(b,a,w0,Bw);[bz,az]=bilinear(b1,a1,1/T);
subplot(2,1,1);plot(w/pi/T/2,db);grid
xlabel('以HZ为单位的频率');ylabel('对数幅度/db');title('带阻巴特沃斯滤波器');
subplot(2,1,2);plot(w/pi,db);grid
xlabel('以PI为单位的频率');ylabel('对数幅度/db');title('带阻巴特沃斯滤波器');
图
二、实验2仿真结果图
四、思考与总结
1、在设计过程中我思考了两种方案
①从归一化模拟低通原型出发,先在模拟域内经频率变换成为所需类型的模拟滤 波器;然后进行双线性变换,由S域变换到Z域,而得到所需类型的数字滤波器。
②先进行双线性变换,将模拟低通原型滤波器变换成数字低通滤波器;然后在Z域内经数字频率变换为所需类型的数字滤波器。
以上两种方案都可以,我最后选择了第一种方案进行设计,即先在模拟域内经频率变换成为所需类型的模拟滤波器;然后进行双线性变换,由S域变换到Z域,而得到所需类型的数字滤波器。因为高通,带通滤波器的设计方法是先将要设计的滤波器的技术特性指标通过频率转换成模拟低通滤波器的技术指标,再根据这些性能指标设计出低通滤波器的传递函数,为了设计程序的简洁,故选择了方案一。
2、仿真过程遇到的问题
①带通滤波器的仿真结果虽然符合其带通特性,但要求得到的性能指标存在较大误差,由于时间紧迫,将在课后进一步寻找原因及解决方案。
②一个线性是不变系统的典型表达式有状态空间型、传递函数型、零极增益型、极点留数型共四种,在开始的设计过程中我发现在把零极点增益型向传递函数型的转换过程中多用了一步,即先把零极点增益型转换为状态空间型,进行相应的频率变换和双线性变换后,再由状态空间型转换为传递函数型,进而绘制出其频率响应图,但是经仿真分析后发现,性能并不理想,所以并没有采用。
③实验开始仿真没有对响应的函数进行定义,在网上查找响应的定义函数,最后找到响应的函数定义。定义程序如下: %freqz的修正函数 产生以绝对值的幅度响应以及相对dB标尺的幅度响应,相位响应和群时延响应 %------------
% db = relative magnitude in dB computed over 0 to pi radians % mag = absolute magnitude computed over 0 to pi radians % pha = phase response in radians over 0 to pi radians % grd = group delay over 0 to pi radians % w = 501 frequency samples between 0 to pi radians % b = numerator polynomial of H(z)(for FIR : b=h)
% a = denominator polynomial of H(z)(for FIR :a=[1])%
[Hh,w] =freqz(b,a,1000,'whole');
Hh =(Hh(1:1:500))';w =(w(1:1:500))';mag =abs(Hh);
db =20*log10((mag+eps)/max(mag));pha =angle(Hh);
grd =grpdelay(b,a,w);
五、心得体会
本次其实就是对本期的一个综合考察,在平时的学习中我学习了关于本次课程设计的一些内容,对于MATLAB软件在数字滤波器的设计中的一些函数也有初步的了解,通过这一周多的时间更是让自己在这个方面的学习更上了一层楼,使自己在这方面的学习深度有所提高。
本次用双线性变换法和脉冲响应不变法对巴特沃斯低通、带阻滤波器的设计,要求我能够用所学理论知识对巴特沃斯低通通滤波器进行设计,并能够对设计的滤波器的频率特性进行分析。在设计过程中,首先,我通过查找资料等途径,对关于所要设计的题目进行更加全面深入的学习,认真分析其中的原理,弄明白设计的思路;其次,根据自己选择的性能指标要求,结合自己通过学习掌握的知识和资料进行程序设计,根据自己提出的方案利用软件实现;最后,运行程序,分析所得结果是否符合自己的设计要求,对结果进行分析,实现由理论到实践,再由实践结果验证理论的过程。
总的来说,这次课程设计让我对MATLAB有了更深刻的了解,对数字滤波器的设计流程有了大致的了解,掌握了一些设计滤波器的基本方法,提高了理论用于实践的能力,掌握了更多专业相关的使用知识与技能。同时,也暴露了我很多的不足,在以后的学习中,将进一步发扬优点,克服缺点。
最后祝老师寒假愉快!
第二篇:dsp作业
.c图
实验二
#define UINT unsigned int UINT i,*p,*n;void main(void){
p=(UINT *)0x0300;
for(i=0;i<20;i++)
{
if(*p==0x8888)
n=p;
p++;
} }.cmd图
MEMORY {
PAGE 0: PROG:
origin = 1a00h, length = 2580h
vectors: origin = 3f80h, length = 80h
PAGE 1: DATA:
origin = 0200h, length = 1800h }
SECTIONS {
.text
> PROG PAGE 0
.cinit > PROG PAGE 0
//.switch > PROG PAGE 0
vect
> vectors PAGE 0
.data
> DATA PAGE 1
.bss
> DATA PAGE 1
.const > DATA PAGE 1
.sysmem > DATA PAGE 1
.stack > DATA PAGE 1 } xf高低电平等时间循环变化截图如下所示:
找出由地址0x0300~0x0320中存储数据为0x8888的地址截图如下所示:
心得体会:
经过这次实验,理解了对地址0x0300~0x0320中存储数据为0x8888的寻找和设置。
第三篇:DSP大作业
无限冲激响应滤波器(IIR)算法
姓名:张晓 指导老师:陈恩庆 专业名称:通信 学号:20102460434
2014年3月18日
无限冲激响应滤波器(IIR)算法
摘要:21世纪是数字化的时代,随着信息处理技术的飞速发展,数字信号处理技术逐渐发展成为一门主流技术。相对于模拟滤波器,数字滤波器没有漂移,能够处理低频信号,频率特性可做成非常接近于理想的特性,且精度可以达到很高,容易集成等。这些优势决定数字滤波器的应用越来越广泛。数字滤波器是数字信号处理中最重要的组成部分之一,被广泛应用于语音图像处理、数字通信、谱分析、模式识别、自动控制等领域。本课题通过软件设计IIR数字滤波器,并对所设计的滤波器进行仿真:应用DSP集成开发环境—CCS调试程序,用TMS320F2812实现IIR数字滤波。具体工作包括:对IIR数字滤波器的基本理论进行分析和探讨。应用DSP集成开发环境调试程序,用TMS320F2812来实现IIR数字滤波。通过硬件液晶显示模块验证试验结果,并对相关问题进行分析。
关键词:数字滤波器;DSP;TMS320F2812;无限冲激响应滤波器(IIR)。
引言
随着数字化飞速发展,数字信号处理技术受到了人们的广泛关注,其理论及算法随着计算机技术和微电子技术的发展得到飞速发展,被广泛应用于语音图像处理、数字通信、谱分析、模式识别、自动控制等领域。数字信号处理由于运算速度快,具有可编程的特性和接口灵活的特点,使得它在许多电子产品的研制、开发和应用中,发挥着重要的作用。采用DSP芯片来实现数字信号处理系统是当前发展的趋势。
在数字信号处理中,数字滤波占有极其重要的地位。数字滤波是语音和图像处理、模式识别、谱分析等应用中的一个基本处理算法。在许多信号处理应用中用数字滤波器替代模拟滤波器具有许多优势。数字滤波器容易实现不同幅度和相位频率特性指标。用DSP芯片实现数字滤波除具有稳定性好、精度高、不受环境影响外,还具有灵活性好的特点。用可编程DSP芯片实现数字滤波可通过修改滤波器的参数十分方便的改变滤波器的特性。
原理:
1. 无限冲激响应数字滤波器的基础理论。
利用模拟滤波器成熟的理论及其设计方法来设计IIR数字低通滤波器是常用的方法。设计过程是:按照数字滤波器技术指标要求一个过渡模拟低通滤波器Ha(s),再按照一定的转换关系将Ha(s)转换成数字低通滤波器函数H(z)。由此可见,设计的关键问题就是要找到这种关系,将s平面的Ha(s)转换成z平面上的H(z)。
将系统函数Ha(s)从s平面转换到z平面的方法有多种,但工程上常用的是脉冲响应不变法和双线性变换法。在课题中我们采用双线性变换法设计IIR数字低通滤波器。
通过采用非线性频率压缩的方法,将整个模拟频率轴压缩到/T之间,再用 Z=esT转换到z平面上。设Ha(s),s=j,经过非线性频率压缩后用Ha(s1),S1=j1表示,这里用正切变换实现频率压缩: 21tan(1T)T2由上式得到: /T之间的转换。实现了s平面上整个虚轴完全压缩到S1平面上虚轴的21ejT1 j= T1ejT1代人s=j,S1=j1,得到:
21es1T ST1es1T再通过z=e1从S1平面转换到Z平面得到 sT21z1 ST1z12sT z2sT上面两式即称为双线性变换。
2.模拟滤波器原理(巴特沃斯滤波器、切比雪夫滤波器、椭圆滤波器、贝塞尔滤波器)。3.数字滤波器系数的确定方法。4.根据要求设计低通 IIR 滤波器
要求:低通巴特沃斯滤波器在其通带边缘 1kHz 处的增益为-3dB,12kHz 处的阻带衰减 为 30dB,采样频率 25kHz。设计:
(1)确定数字低通滤波器的技术指标:
通带边缘频率 fp1Hz、待求阻带边缘频率 fs1Hz 和待求阻带衰减-20logsdB。模拟边缘频率为:fp1=1000Hz,fs1=12000Hz 阻带边缘衰减为:-20logs=30dB
(2)将数字低通滤波器的技术指标转换成响应的模拟低通滤波器的技术指标。
用=2πf/fs 把由 Hz 表示的待求边缘频率转换成弧度表示的数字频率,得到p1 和
s1。
p1=2πfp1/fs=2π1000/25000=0.08π弧度s1=2πfs1/fs=2π12000/25000=0.96π弧度-计算预扭曲模拟频率以避免双线性变换带来的失真。由 w=2fs tan(Ω/2)求得 wp1 和 ws1,单位为弧度/秒。
wp1=2fs tan(p1/2)=6316.5 弧度/秒 ws1=2fs tan(s1/2)=794727.2 弧度/秒
-由已给定的阻带衰减-20logs确定阻带边缘增益s。
因为-20logs=30,所以logs=-30/20,s=0.03162 计算所需滤波器的阶数:
11)s(0.03162)2n≥==0.714 s1794727.22log()2log()p16316.5log(1)1log(因此,一阶巴特沃斯滤波器的传输函数为:
H(s)=wp1/(s+wp1)=6316.5/(s+6316.5)由双线性变换定义s=2fs(z-1)/(z+1)得到数字滤波器的传输函数为:
6316.50.1122(1z1)H(z)= 1z110.7757z500006316.5z1因此差分方程为:y[n]=0.7757y[n-1]+0.1122x[n]+0.1122x[n-1] 硬件框图:
一个DSP系统可分为最小系统设计和外围接口设计,DSP在必要的工作环境下才能正常工作。DSP最小系统包括复位、时钟和电源电路。
液晶显示模块PcTMS320F2812信号源发生模块时钟电路电源电路复位电路 软件流程图:
调试过程与步骤:
一、软件实现
1、实验准备
—设置软件仿真模式 —启动CCS
2、打开工程、浏览程序。
3、编译并下载程序
4、打开窗口:*选择菜单View—>Graph->Time/Frequency…,进行如下设置
出现窗口如下:
选择菜单View->Graph->Time/Frequency…,进行如下设置:
出现窗口:
5、清除显示:在以上打开的窗口中单击鼠标右键,选择弹出菜单中“Clear Display”功能。
6、设置断点:在程序iir.c中有注释“/*请在此句上设置软件断点*/”的语句上设置软件断点
7、运行并观察结果
(1)选择“Debug”菜单中的“RUN”项,或按F5键运行程序。
(2)观察“IIR”窗口中时域图形:观察滤波效果。实验结果:
本次调试过程中出现了不少问题,但在辅导老师的指导下顺利完成IIR数字滤波实验。软件调试结果如下图示:
输入波形为一个低频率的正弦波与一个高频率的余弦波叠加而成。如图:
通过观察频域和时域图,得知:输入波形中的低频波形通过了滤波器,而高频部分则被衰减。附IIR算法相对应的汇编程序: ……………………………….IIR: ADDB
SP,#4 MOVB
AH,#0 MOVB
AL,#0 MOVL
*-SP[4],ACC MOVW
DP,#0xFE00 MOV
@0,#0 MOV
AL,@0 CMPB
AL,#2 SB
L7,GEQ L6: SETC
SXM MOVL
XAR4,#0x3F8016 MOV
ACC,@0 << 1 ADDL
@XAR4,ACC MOVL
ACC,*+XAR4[0] MOVL
*-SP[2],ACC MOVL
XAR4,#0x3F8012 MOV
ACC,@0 << 1 ADDL
@XAR4,ACC MOVL
ACC,*+XAR4[0] LCR
FS$$MPY MOVL
*-SP[2],ACC MOVL
ACC,*-SP[4] LCR
FS$$ADD MOVL
*-SP[4],ACC SETC
SXM MOVW
DP,#0xFE00 MOV
ACC,@0 << 1 MOVL
XAR4,#0x3F801E ADDL
@XAR4,ACC MOVL
ACC,*+XAR4[0] MOVL
XAR4,#0x3F801A MOVL
*-SP[2],ACC MOV
ACC,@0 << 1 ADDL
@XAR4,ACC MOVL
ACC,*+XAR4[0] LCR
FS$$MPY MOVL
*-SP[2],ACC MOVL
ACC,*-SP[4] LCR
FS$$ADD MOVL
*-SP[4],ACC MOVW
DP,#0xFE00 INC
@0 MOV
AL,@0 CMPB
AL,#2 SB
L6,LT L7: MOVL
ACC,*-SP[4] SUBB
SP,#4 LRETR
………………………………..二、IIR算法硬件实现
1、实验准备
(1)连接实验设备
(2)准备信号源进行AD输入
①用信号线连接实验箱左侧信号源的波形输出A端口和“A/D输入”模块的“ADCINO”插座注意插头要插牢、到底。这样,信号源波形输出A的输出波形即可送到ICETEK—F2812A板的AD输入通道0。
②用同样方法连接实验箱左侧信号源的输出B端口和“A/D输入”的“ADCIN1”相连。③设置波形输出A:
—向内侧按波形频率选择按钮,直到标有正弦波的指示灯亮。
—上下调节波形频率选择按钮,直到标有100—1KHZ的指示灯亮。
—调节幅值调整旋钮,将波形输出A的幅值调到适当位置。④设置波形输出B:
—向内侧按波形频率选择按钮,直到标有正弦波的指示灯亮。
—上下调节波形频率选择按钮,直到标有1K-10KHZ的指示灯亮。
—调节幅值调整旋钮,将波形输出A的幅值调到适当位置。
注意:由于模数输入信号未经任何转换就进入 DSP,所以必须保证输入的模拟信号的幅度在 0-3V 之间。必须用示波器检测信号范围,保证最小值 0V 最大值 3 V,否则容易损坏DSP 芯片的模数采集模块。
2、设置 Code Composer Studio 2.21 在硬件仿真(Emulator)方式下运行请参看本书第三部分、第一章、四、2。
3、启动 Code Composer Studio 2.21 选择菜单 Debug->Reset CPU。
4、打开工程文件
5、编译、下载程序,选择菜单 Debug->Go Main,使程序运行到 main 函数入口位置。
6、观察窗口
-打开源程序 IIR.c,查看源代码。
7、运行程序观察结果
按 CTR 控制板的 K6 键,实现滤波显示,K7 键实现混频显示,按 K8 实现键 A、B 两信 号源分屏显示。
8、观察动态效果,调节信号源输出,观察滤波器输出 改变信号源输入的波形、频率参数,观察动态效果。
9、退出 CCS。
硬件调试结果若下图(手机拍照):
按K6键:
按K7键:
按K8键:
结果分析:
通过无限冲激响应滤波器(IIR)算法的硬件实现与软件实现IIR算法相对比,所设计的IIR滤波器收到较好的效果,完成了设计要求。
心得体会:
在指导老师认真负责的态度下,我顺利而又成功地完成了关于DSP芯片TMS320F2812的八个实验,并从中获益匪浅。记得在学期的开始王忠勇老师就给我们指出DSPs芯片及DSP系统与信息类专业的一些课程有许多联系,同时又有许多特点。刚开始学习时,我并没有完全理解这些话的意义。但随着课程学习逐渐接近尾声,与此同时开始的实践实验,自己从中取得了一些成绩,理论水平得到了一定程度的提高,同时也暴露出一些问题。
正是因为DSP设计多门课程的相关知识,这就需要我们在课程的学习过程中,需要经常回顾一些基础理论知识,经过认真思考与分析,达到解决问题的目的。在这个过程中,不仅复习了以前的一些知识,并通过理论联系实际,对相关知识点有了更深层次的认识。从课前复习相关实验内容、原理到课题论文的完成,此过程我受益匪浅。在这个过程中,我复习了数字滤波器的原理和设计方法,对DSP编程有了更深的认识和掌握了一定的编程能力。此外,在画原理图时,学习了MathType和Microsoft Office Visio 2007等软件的操作方法。通过本课题的设计,我在多方面得到了锻炼。
另外,在实验过程中,团队协作的精神得以充分的体现。当遇到困难的时候,同学与同学之间,同学与指导老师之间有了很好的交流和沟通,这也是实验能够认真完成的一重要因素。
此外,要感谢指导老师们,这些实验是在他们认真负责的态度下完成的。他们在我们实验过程中给我们在软件操作和相关理论、算法上给了我们耐心的指导。正是在这种环境下,才能使我们在这个过程收获最大化。从他们身上我懂得了做事严谨认真、勤于动脑,勤于实践的工作态度,这使我在今后的生活中所要努力的方向。
参考文献
【1】 高西全 丁玉美编著。数字信号处理。西安电子科技大学出版社(第三版)。【2】 王忠勇 陈恩庆编著。DSP原理与应用技术。电子工业出版社,2009.10
第四篇:西工大DSP大作业
实验1 基于CCS的简单的定点DSP程序
一、实验要求
1、自行安装CCS3.3版本,配置和运行CCS
2、熟悉CCS开发环境,访问读写DSP的寄存器AC0-AC3,ARO-AR7, PC, T0-T3
3、结合C5510的存储器空间分配,访问DSP的内部RAM
4、编写一个最简单的定点DSP程序,计算下面式子 y=0.1*1.2+35*20+15*1.6
5、采用定点DSP进行计算,确定每个操作数的定点表示方法, 最后结果的定点表示方法,并验证结果
6、对编写的程序进行编译、链接、运行、断点执行、单步抽 并给出map映射文件
二、实验原理
DSP芯片的定点运算---Q格式(转)2008-09-03 15:47 DSP芯片的定点运算
1.数据的溢出:
1>溢出分类:
上溢(overflow): 下溢(underflow)
2>溢出的结果:
Max Min
Min Max unsigned char 0 255 signed char-128 127 unsigned int 0 65535 signed int-32768 32767
上溢在圆圈上按数据逆时针移动;下溢在圆圈上顺时钟移动。
例:signed int :32767+1=-32768;-32768-1=32767
unsigned char:255+1=0;
0-1=255
3>为了避免溢出的发生,一般在DSP中可以设置溢出保护功能。当发生溢出时,自动将结果设置为最大值或最小值。
2.定点处理器对浮点数的处理:
1>定义变量为浮点型(float,double),用C语言抹平定点处理器和浮点处理器 的区2>放大若干倍表示小数。比如要表示精度为0.01的变量,放大100倍去运算,运算3>定标法:Q格式:通过假定小数点位于哪一位的右侧,从而确定小数的精度。
Q0:小数点在第0位的后面,即我们一般采用的方法 Q15 小数点在第15位的后面,0~14位都是小数位。转化公式:Q=(int)(F×pow(2,q))
F=(float)(Q×pow(2,-q))
3. Q格式的运算
1>定点加减法:须转换成相同的Q格式才能加减
2>定点乘法:不同Q格式的数据相乘,相当于Q值相加
3>定点除法:不同Q格式的数据相除,相当于Q值相减
4>定点左移:左移相当于Q值增加
5> 定点右移:右移相当于Q减少
4.Q格式的应用格式
实际应用中,浮点运算大都时候都是既有整数部分,也有小数部分的。所以要选择一个适当的定标格式才能更好的处理运算。一般用如下两种方法:
1> 使用时使用适中的定标,既可以表示一定的整数复位也可以表示小数复位,如 对于2812的32位系统,使用Q15格式,可表示-65536.0~65535.999969482区间内的数据。
三、实验步骤
1.双击Simulator。,启动CCS的仿真平台的配着选项。选择C5410 Device
2.点击project菜单栏的new选项,新建一个LAB的工程注意存储的路径。
3.把下图中用到的文件拷到工程文件目录的文件路径下。
4.在ccs平台中将用到的程序导入到平台中,点击project—>add file to project。选择多个文件时,可以按住ctrl键。
5.将程序中的start改为_main,INT_2改为_int_2。然后点击保存。
源程序代码
***************************************************** * * *****************************************************.title “example.asm”
;为汇编源程序取名.mmregs
;定义存储器映象寄存器
STACK
.usect
“STACK”,10h
;分配10个单元的堆栈空间.bss
a,4
;为系数a分配4个单元的空间.bss
x,4
;为变量x分配4个单元的空间.bss
y,1
;为结果y 分配1个单元的空间.def
_c_int00
;定义标号_c_int00
example.asm
y=0.1*x1.2+35*20+15*x1.6
.data
;定义数据代码段
table:.word
1,2,3,4
;在标号table开始的8个单元中
.word
8,6,4,2
;为这8个单元赋初值.text
;定义文本代码段 _c_int00 : STM #0,SWWSR
STM
#STACK+10h,SP
STM
#a,AR1
RPT
#7
MVPD table,*AR1+ CALL
SUM
end:
B
end
SUM:STM
#a,AR3
STM
#x,AR4
RPTZ
A,#3
MAC
*AR3+,*AR4+,A STL
A,@y
RET
.end
;软件等待状态寄存器置0,不设等待
;设置堆栈指针初值
;AR1 指向 a的地址
;从程序存储器向数据存储器
;重复传送 8个数据
;调用 SUM 实现乘法累加和的子程序
;循环等待
;将系数a的地址赋给AR3
;将变量x的地址赋给AR3
;将A清0,并重复执行下条指令4次
;执行乘法并累加,结果放在A中
;将A的低字内容送结果单元y
;结束子程序
;结束全部程序
Map文件
*****************************************************************************
TMS320C55x COFF Linker PC Version 3.83
****************************************************************************** >> Linked Mon May 31 11:03:33 2010
OUTPUT FILE NAME:
MEMORY CONFIGURATION
name
origin
length
used
attr
fill
-----------------------------------------------------------PAGE 0: EPROM
0000e000
00000100 0000001d RWIX
vecs
0000ff80
00000004 00000000 RWIX PAGE 1: SPRAM
00000060
00000020 0000000b RWIX
DARAM
00000080
00000100 0000001a RWIX
SECTION ALLOCATION MAP
output
attributes/ section
page
origin
length
input sections--------------------------------
----------------.text
0
0000e000
0000001d
0000e000
0000001d
LAB4A.obj(.text)
.bss
00000060
0000000b
UNINITIALIZED
四、心得体会
经过这次实验,我更加熟悉CCS开发环境,访问读写DSP的寄存器AC0-AC3,ARO-AR7, PC, T0-T3。
实验2 CCS下的FFT算法程序设计
一、实验目的
CCS下的FFT算法程序设计
二、实验要求
提供一个CCS下的C语言例程,在CCS下,仿照例程,任选雨中FIR滤波、IIR滤波、FFT算法,采用C语言完成代码的编写、编译、链接、下载和运行,输入数据,滤波器系数任选,并给出运算结果。1)目的
2)工程文件的构成,并附图 3)打印源代码 4)打印编译成功的信息 5)打印map文件 6)程序下载的截图过程
三)运行结果
三、实验步骤
1、在ccs平台中将用到的程序导入到平台中,点击project—>add file to project。选择多个文件时,可以按住ctrl键。
2.将所有的程序段中的start改为_main,将fft.Asm中的 K_FFT_SIZE.set 32;N K_LOGN.set 5;LOG(N)改为
K_FFT_SIZE.set 64;N K_LOGN.set 6;LOG(N)
3、对源文件进行编译(注意先对每个.asm文件先进行编译,以防止程序有错误),没有错误时进行链接。
4.点击菜单fileload program。装载.out文件
四、实验结果
五、源程序代码
***************************************************************** 函数原型:void FFT(struct compx *xin,int N)函数功能:对输入的复数组进行快速傅里叶变换(FFT)输入参数:*xin复数结构体组的首地址指针,struct型
*****************************************************************/ void FFT(struct compx *xin){ int f,m,nv2,nm1,i,k,l,j=0;struct compx u,w,t;nv2=FFT_N/2;//变址运算,即把自然顺序变成倒位序,采用雷德算法 nm1=FFT_N-1;for(i=0;i while(k<=j)//如果k<=j,表示j的最高位为1 { j=j-k;//把最高位变成0 k=k/2;//k/2,比较次高位,依次类推,逐个比较,直到某个位为0 } j=j+k;//把0改为1 } { int le,lei,ip;//FFT运算核,使用蝶形运算完成FFT运算 f=FFT_N;for(l=1;(f=f/2)!=1;l++)//计算l的值,即计算蝶形级数;for(m=1;m<=l;m++)// 控制蝶形结级数 { //m表示第m级蝶形,l为蝶形级总数 l=log(2)N le=2<<(m-1);//le蝶形结距离,即第m级蝶形的蝶形结相距le点 lei=le/2;//同一蝶形结中参加运算的两点的距离 u.real=1.0;//u为蝶形结运算系数,初始值为1 u.imag=0.0;w.real=cos(PI/lei);//w为系数商,即当前系数与前一个系数的商 w.imag=-sin(PI/lei);for(j=0;j<=lei-1;j++)//控制计算不同种蝶形结,即计算系数不同的蝶形结 { for(i=j;i<=FFT_N-1;i=i+le)//控制同一蝶形结运算,即计算系数相同蝶形结 { ip=i+lei;//i,ip分别表示参加蝶形运算的两个节点 t=EE(xin[ip],u);//蝶形运算,详见公式 xin[ip].real=xin[i].real-t.real;xin[ip].imag=xin[i].imag-t.imag;xin[i].real=xin[i].real+t.real;xin[i].imag=xin[i].imag+t.imag;} u=EE(u,w);//改变系数,进行下一个蝶形运算 } } } } Map文件 ****************************************************************************** TMS320C55x COFF Linker PC Version 3.3 ****************************************************************************** >> Linked Sat May 30 23:48:27 2015 OUTPUT FILE NAME: MEMORY CONFIGURATION name origin length used attr fill-----------------------------------------------------------PAGE 0: EPROM 0000e000 00000100 00000019 RWIX PAGE 1: SPRAM 00000060 00000020 0000000a RWIX DARAM 00000080 00000100 00000000 RWIX SECTION ALLOCATION MAP output attributes/ section page origin length input sections------------------------------------------------.text 0 0000e000 00000012 0000e000 00000012 LAB2B.obj(.text) .data 0 0000e012 00000005 0000e012 00000005 LAB2B.obj(.data) .vectors 0 0000e017 00000002 0000e017 00000002 VECTORS.obj(.vectors) .bss 1 00000060 0000000a UNINITIALIZED 00000060 0000000a LAB2B.obj(.bss) GLOBAL SYMBOLS: SORTED ALPHABETICALLY BY Name address name------------00000060.bss 0000e012.data 0000e000.text 00000060 ___bss__ ffffffff ___cinit__ 0000e012 ___data__ 0000e017 ___edata__ 0000006a ___end__ 0000e012 ___etext__ ffffffff ___pinit__ 0000e000 ___text__ 00000000 __lflags UNDEFED _c_int00 0000e000 _main ffffffff cinit 0000e017 edata 0000006a end 0000e012 etext ffffffff pinit GLOBAL SYMBOLS: SORTED BY Symbol Address address name------------00000000 __lflags 00000060 ___bss__ 00000060.bss 0000006a ___end__ 0000006a end 0000e000.text 0000e000 ___text__ 0000e000 _main 0000e012.data 0000e012 etext 0000e012 ___data__ 0000e012 ___etext__ 0000e017 edata 0000e017 ___edata__ ffffffff pinit ffffffff ___pinit__ ffffffff ___cinit__ ffffffff cinit UNDEFED _c_int00 [19 symbols] 六、心得体会 经过这次实验,我更加熟悉CCS开发环境,CCS下的C语言例程下的 FFT算法,采用C语言完成代码的编写、编译、链接、下载和运行的方法。 C54x,C55x,C6000芯片的比较 简介 DSP是一种特别适合于进行数字信号处理运算的微处理器,主要用于实时2快速实现个二中数字信号处理的算法。在二十世纪八十年代以前,由于受实现方法的限制,数字信号处理的理论还不能得到广泛的应用。直到二十世纪八十年代初,世界上第一块单片可编程DSP的诞生,才将理论运用到实际当中。 DSP芯片的发展非常迅速,硬件结构方面主要是向多处理器的并行处理结构,便于外部数据交换的串行总线传输,大容量片上RAM和ROM,程序加密,增加I/O驱动能力,外围电路内装化,低功耗等方面发展。 C54x,C55x,C6000是DSP系统常用的芯片,下面就他们的硬件结构,运算性能,指令系统,应用场景上的区别进行分析。(1)C54x: 硬件结构 C54x主要有CPU,内部总线控制,特殊功能寄存器,数据存储器,数据存储器RAM,程序存储器ROM等构成。CPU: 内部总线结构 C54x有8组16位总线:1组程序总线,3组数据总线和4组地址总线,可在一个指令周期内产生两个数据存储地址,实现流水线并行数据处理。 特殊功能寄存器 该芯片共有26个特殊功能寄存器,用来对片内各功能模块进行管理,控制,监视。它们位于具有特殊功能的RAM区。存储器 可访问的最大存储空间为64k的程序,64k的数据以及64k的I/O空间。片内ROM,可配置为程序存储器和数据存储器。 指令系统 支持单指令重复和块指令重复操作 支持存储器块传送指令 支持32位长操作数的读指令 具有能并行存储和并行加载的算术指令 支持条件存储指令及中断快速返回指令 1)算术运算指令 2)逻辑运算指令 3)程序控制指令 4)加载和存储指令 速度 5.0V电压的器件,其速度可达到40MIPS,指令周期时间为25ns。3.3V电压器件,其速度可达到80MIPS,指令周期时间为12.5ns。2.5V电压的器件,其速度可达到100MIPS,指令周期时间为10ns。1.8V电压的器件,其速度可达到200MIPS,指令周期时间为10ns 应用 该芯片具有很高的处理速度和广泛的应用适应性,采用模块化的设计,功耗小,常用于扩频通信,移动通信,语音识别,发动机控制,超声设备等等。(2)C55x TMS320C55x在C54x的基础上发展起来的新一代低功耗,高性能数字信号处理器。 1)软件具有C54x兼容模式; 2)工作时钟大大超过了C54x系列处理器; 3)CPU内部通过增加功能单元增强了DSP的运算能力 具有更高的性能和更低的功耗,在无线通信,个人数字系统以及高效率的多通道数字压缩语音电话中得到广泛应用。 硬件结构 1)主要由CPU,存储器,和片上设备构成。 2)两个乘法累加器,在一个单周期执行双乘法操作;40位的算术逻辑单元和一个16位的算术逻辑单元,实现高精度算术和逻辑操作,对主ALU完成简单的逻辑运算; 3)4个累加器,可以保留计算结果,减少对存储单元的访问;算术逻辑单元具有并行处理能力。 4)具有3根读总线,2根写总线,6根地址总线,16位的数据字长,辅助寄存器字长为3个字节,8个辅助寄存器,统一的程序/数据存储空间,4个数据寄存器。 指令系统 1)算术指令系统 2)位操作指令 3)扩展辅助寄存器操作指令 4)逻辑运算指令 5)移动指令 6)程序控制指令 速度 与C54x相比,处理速度明显提高,功耗明显降低。300MHz的C55x比120MHz的C54x处理速度提高了5倍,功耗降到C54x的1/6。 应用 C55x应用在高功效的设施,要求提高信道密度,但又有严格的功耗和空间限制。适合于刚刚推出使用的3G手机,用于因特网的音频,视频,数据的移动产品等。可以延长电池的寿命,将数字蜂窝电话,便携式声音播放器,数码相机的电池使用时间,从小时延长到天。(3)C6000 硬件结构 TMS320C6000产品是美国TI公司于1997年推出的dsp芯片,该DSP芯片定点、浮点兼容,其中,定点系列是TMS320C62xx系列,浮点系列是TMS320C67xx系列,2000年3月,TI发布新的C64xx内核,主频为1.1GHz,处理速度9000MIPS,在图像处理和流媒体领域得到了广泛的应用。 C6000片内有8个并行的处理单元,分为相同的两组。DSP的体系结构采用超长指令字结构,单指令字长为32位,指令包里有8条指令,总字长达到256位。执行指令的功能单元已经在编译时分配好,程序运行时通过专门的指令分配模块,可以将每个256为的指令包同时分配到8个处理单元,并有8个单元同时运行。芯片最高时钟频率为300MHz(67xx系列),且内部8个处理单元并行运行时,其最大处理能力可达到1600MIPS。 指令系统 1)程序转移类指令 2)算术运算类指令 3)逻辑即位域操作指令 4)搬移类指令 5)LOAD/STORE类指令 6)C6000公共指令 应用 C6000系列的高速处理能力以及其出色的对外接口能力,使得它在雷达声呐,医疗仪器和图像处理等领域具有非常大的应用潜力。 运算速度比传统的快很多,因此在军事投稿信,电子对抗,雷达系统和制导武器等应用比较广泛。第五篇:DSP大作业