DSP实验三和实验四

实验三离散时间系统及响应[实验目的]1、熟悉离散时间系统的时域和频域分析方法。

2、掌握稳定系统性的判别。

3、掌握利用MATLAB求解零极状态、差分方程和频率响应的方法。

[实验仪器]计算机、Matlab6.5(或更高版本)软件[实验参考书] :自编实验指导书与本实验有关的MA TLAB函数:1. conv.m用来实现两个离散序列的线性卷积。

其调用格式是:y=conv(x,h)2.filter.m求离散系统的输出y(n) 。

若系统的h(n) 已知,可用conv.m文件可求出y(n) ;若系统的H(z) 已知,可用filter可求出y(n),调用格式是:y=filter(b, a, x);%其中x, y, a 和b都是向量。

3.impz.m在H(z) 已知情况下, 求系统的单位抽样响应h(n)。

调用格式是:h = impz(b, a, N)或[h,t]=impz(b,a,N)N是所需的的长度。

前者绘图时n从1开始,而后者从0开始。

4.freqz.m在H(z) 已知情况下, 求系统的频率响应。

基本的调用格式是:[H,w]=freqz(b,a,N,'whole',Fs)N是频率轴的分点数,建议N为2的整次幂;w是返回频率轴座标向量,绘图用;Fs是抽样频率,若Fs=1,频率轴给出归一化频率;’whole’指定计算的频率范围是从0~FS,缺省时是从0~FS/2.5.zplane.m文件可用来显示离散系统的极-零图。

其调用格式是:zplane(z,p), 或zplane(b,a),前者是在已知系统零点的列向量z和极点的列向量p的情况下画出极-零图,后者是在仅已知H(Z)的A(z)、B(z) 的情况下画出极-零图。

[实验内容]1、序列的卷积运算。

下例是一个指数函数的卷积,结果如图所示。

clear all;fs=20;n =0:49;x=exp(-n/fs);subplot(211),stem(x)y=conv(x,x);subplot(212);stem(y);grid;05101520253035404550仿照上例,现在假设存在两个序列,()[,,,,,,]h n=54321,利用计x n=9121041215()[,,,,]算出两者的卷积,并画出图形。

2、时域离散系统和系统响应分析。

输入下列程序,观察实验结果。

N=16; n=0:N-1; %定义抽样的长度x=sin(2*pi*n/64)+sin(20*pi*n/64);%输入序列a=[1 -0.25]; b=[0.5 0.45 0.35]; %b 和a 分别是系统函数分子和分母多项式系数 subplot(221); zplane(b,a);%画出系统的零极点图 y=filter(b,a,x); %求系统的响应subplot(222 );stem(n,y) ; %画出系统响应的火柴杆图 [H,w]=freqz(b,a) ; %求出系统的频率响应H MagH=abs(H); %系统的幅频特性Subplot(223);plot(w/pi,MagH); %画出系统的幅频特性 PhaseH=angle(H); %系统的相频特性Subplot(224);plot(w/pi,PhaseH); %画出系统的相频特性 仿照此程序,完成下面问题的编程。

(1) 已知描述两个系统的系统函数分别为-1-2-3-4-1-2-3-40.001836+0.007344z +0.011016z +0.007374z +0.001836z ()1-3.0544+3.8291z -2.2925z +0.55075z H z =1-1-2-3-4-1-2-3-40.001836+0.007344z +0.011016z +0.007374z +0.001836z ()0.4-3.0544+3.8291z -2.2925z +0.55075z H z =1a. 确定系统的稳定性提示:零极点是分析系统频率响应的有力工具之一,在MALAB 中用zplane( )函数画出零点极点图,对于本例,利用零极点图分析系统是否稳定(分别画出两个系统的零极点图,说明其是否稳定)。

b. 假定输入为长度为100的矩形序列,试求出其对两系统的输出,绘出相应的图形。

进一步说明输入有界,输出是否有界。

提示:对于系统求解,在MATLAB 中可以调用filter( )函数完成。

(2)一个特定的线性和时不变系统,描述它的差分方程如下:)3()1(2)()2(25.0)1(5.0)(-+-+=-+--n x n x n x n y n y n ya. 如果此系统的输入为)()]6.0sin(4)2.0cos(35[)(n u n n n x ππ++=。

在1000≤≤n 间求出)(n y 的响应。

b. 图示系统的频率特性提示:使用freqz()函数求解系统的频率特性,幅度响应A=abs(H),相位响应P=angle(H) 3、求下列两个序列的频谱,包括幅度谱和相位谱,分别画出相应的图形。

比较这两者的区别和联系()[,,,,,,,]()[,,,,,,,]h n h n ==124321123412344321提示:本题按离散傅立叶变换(DFT )实现,DFT 是数字信号处理中最重要的变换之一。

其MATLAB 实现方法可以根据其定义式实现,也可以采用其矩阵形式式实现(实际中均以快速算法FFT 方法实现)。

下面给出其两种实现的MATLA 文件。

①、以定义形式实现%在此输入时域序列,可以采用直接输入的形式,也可采用在运行M 文件后在交互窗口输 %入的形式:xn=input(‘请输入序列x(n):’); N=length(xn);%获得输入序列的长度X=zeros(1,N);%定义信号谱序列X及长度for k=0:N-1for n=0:N-1X(k+1)=X(k+1)+xn(n+1)*exp(-j*2*pi*n*k/N);%按定义式计算序列的DFTend;end;②、以矩阵形式实现x n=input(‘请输入序列x(n):’);N=length(xn);n=0:N-1;k=n;nk=n’*k;WN= exp(-j*2*pi/N).^nk;Xk=xn*WN;[思考题]1、对于一个离散时间系统,如何利用零极点图分析系统是否稳定?2、试说明DTFT的理论分析与实验运算上的区别。

3、实验2中,信号的DTFT一个周期为7个点,相当于单位圆上多远距离取一个值?如果要修改一个周期内的抽样点数,怎么实现?实验四利用FFT和CZT对信号进行频谱分析[实验目的]1、加深对离散傅立叶变换(DFT)算法原理和性质的理解2、掌握离散傅立叶变换DFT的MATLAB实现,理解DFT的频谱泄漏和分辨率问题。

3、熟悉FFT算法原理和FFT子程序的应用4、掌握应用FFT对典型信号进行频谱分析的方法。

5、掌握应用FFT实现两个序列的线性卷积的方法。

[实验仪器]计算机、Matlab6.5(或更高版本)软件[实验参考书] :自编实验指导书[原理简介]本实验是对信号的频谱或功率谱进行分析。

为了了解信号的特点和频谱分布,可以通过对信号进行谱分析,计算出信号的幅度谱、相位谱和功率谱来实现。

信号的谱分析可以用DFT(FFT)来实现。

在运用DFT进行频谱分析的过程中可能产生三种误差:(1)混叠序列的频谱时被采样信号的周期延拓,当采样速率不满足Nyquist定理时,就会发生频谱混叠,使得采样后的信号序列频谱不能真实的反映原信号的频谱。

避免混叠现象的唯一方法是保证采样速率足够高,使频谱混叠现象不致出现,即在确定采样频率之前,必须对频谱的性质有所了解,在一般情况下,为了保证高于折叠频率的分量不会出现,在采样前,先用低通模拟滤波器对信号进行滤波。

谱分析中的参数选择;A 若已知信号的最高频率c f ,为防止混叠,选定采样频率s f :c s f f 2≥ (1) B 根据实际需要,选定频率分辨f ∆,一但选定后,即可确定FFT 所需的点数Nf f N s ∆=/ (2)我们希望f ∆越小越好,但f ∆越小,N 越大,计算量、存储量也随之增大。

一般取N 为2的整次幂,以便用FFT 计算,若已给定N ,可用补零方法便N 为2的整次幂。

C s f 和N 确定后,即可确定所需相应模拟信号)(t x 的长度s s NT f N T ==/ (3) 分辨率f ∆反比于T ,而不是N ,在给定的T 的情况下,靠减小s T 来增加N 是不能提高分辨率的,因为s NT T =为常数。

(2) 泄漏实际中我们往往用截短的序列来近似很长的甚至是无限长的序列,这样可以使用较短的DFT 来对信号进行频谱分析,这种截短等价于给原信号序列乘以一个矩形窗函数,也相当于在频域将信号的频谱和矩形窗函数的频谱卷积,所得的频谱是原序列频谱的扩展。

泄漏不能与混叠完全分开,因为泄漏导致频谱的扩展,从而造成混叠。

为了减少泄漏的影响,可以选择适当的窗函数使频谱的扩散减至最小。

(3) 栅栏效应DFT 是对单位圆上Z 变换的均匀采样,所以它不可能将频谱视为一个连续函数,就一定意义上看,用DFT 来观察频谱就好像通过一个栅栏来观看一个图景一样,只能在离散点上看到真实的频谱,这样就有可能发生一些频谱的峰点或谷点被“尖桩的栅栏”所拦住,不能别我们观察到。

减小栅栏效应的一个方法就是借助于在原序列的末端填补一些零值,从而变动DFT 的点数,这一方法实际上是人为地改变了对真实频谱采样的点数和位置,相当于搬动了每一根“尖桩栅栏”的位置,从而使得频谱的峰点或谷点暴露出来。

用FFT 计算线性卷积用FFT 可以实现两个序列的圆周卷积。

在一定的条件下,可以使圆周卷积等于线性卷积。

一般情况,设两个序列的长度分别为N1和N2,要使圆周卷积等于线性卷积的充要条件是FFT 的长度:N ≥N1+N2-1对于长度不足N 的两个序列,分别将他们补零延长到N 。

当两个序列中有一个序列比较长的时候,我们可以采用分段卷积的方法。

有两种方法: ✧ 重叠相加法。

将长序列分成与短序列相仿的片段,分别用FFT 对它们作线性卷积,再将分段卷积各段重叠的部分相加构成总的卷积输出。

✧ 重叠保留法。

这种方法在长序列分段时,段与段之间保留有互相重叠的部分,在构成总的卷积输出时只需将各段线性卷积部分直接连接起来,省掉了输出段的直接相加。

[实验内容]实验中用到的信号序列a) Gaussian 序列2(),015()0n p q d e n x n --⎧⎪≤≤=⎨⎪⎩b) 衰减正弦序列s i n (2),0()0an b e fnn x n π⎧≤≤⎪=⎨⎪⎩c) 三角波序列1,03()8470c n n x n n n ⎧+≤≤⎪=-≤≤⎨⎪⎩d) 反三角波序列403()3470d n n x n n n -≤≤⎧⎪=-≤≤⎨⎪⎩e )余弦序列和()cos(0.48)cos(0.52)e x n n n ππ=+实验例程:1、设x(n)是由两个正弦信号及白噪声叠加而成,试用 快速傅立叶变换(FFT )对其进行频谱分析。

合集下载

DSP技术与应用实验报告精品

DSP技术与应用实验报告精品

实验名称:实验三向量文件的编写及多个文件的链接实验四汇编语言程序设计实验时间:2015年5月14日下午实验人:谢兴轮2012141451129实验三向量文件的编写及多个文件的链接一、实验目的1、编写复位向量文件vectors。

Asm2、多个文件的链接3、编写复位和中断向量文件4、仿真外部中断二、实验条件Lab3.asm和lab3.cmd文件三、实验内容1、打开桌面CCS2(‘5000)图标,启动CCS集成开发环境。

2 、创建一个新工程;并将lab3.sam和lab3cmd添加入工程3、编写复位向量文件,vectors.asm并将文件添加到工程中。

4、为了将lab3和vectors 两个文件相连接,参看3.6.4节的说明,对lab3.sam和lab3.cmd文件进行必要的修改5、用工程文件对工程中所有文件进行汇编编译链接生成输出文件6、加载程序并单步执行lab3.out文件,仔细观察复位向量的作用7、参看教材4.4中内容,仿真外部中断INT2:①在lab3.asm中,增加一段中断服务子程序INT2,其内容是将累加器A 变为负。

②修改lab3.sam,开放INT2中断③修改vecotrs.asm增加INT2中断向量④编写仿真外部中断用的数据文件:文件名为INT2.dat,每隔5个时钟周期向CPU发出一次中断请求,直到仿真结束。

⑤对工程中所有文件进行重新汇编,链接生成新的输出文件。

⑥执行前,从Tool菜单中选择,用鼠标要链接pin name 再按connect按钮,选择输入文件INT2与INT2引脚相连,单击打开按钮⑦加载程序并利用单步执行程序,注意观察中断向量在中断执行中的作用。

四、实验分析源程序分析************************************************* lab3.asm y= a1*x1+a2*x2+a3*x3+a4*x4 *************************************************.title "lab3.asm".mmregsSTACK .usect "STACK",10h ;allocate space for stack.bss x,4 ;allocate 9 word for variates.bss a,4.bss y,1.def start.def INT_2.data.mmregstable: .word 1,2,3,4 ;data follows ....word 8,6,4,2.text ;code follows ...start: STM #STACK+10h,SP ;set stack pointerSTM #table,AR1 ;AR1 point to tableSTM #x,AR2 ;AR2 point to xSTM #7,AR0LD #40h,ASTM #0,SWWSRRSBX INTMSTM #04h,IMRloop: LD *AR1+,A ;move 8 valuesSTL A,*AR2+ ;from program memoryBANZ loop,*AR0- ;into data memoryCALL SUM ;call SUM subrotine end: B endSUM: STM #a,AR3 ;The subrotine lmplememt STM #x,AR4 ;multiply--accumulateRPTZ A,#3MAC *AR3+,*AR4+,ASTL A,*AR2RETINT_2: NEG ARETE.end***************** vectors.asm ** Reset vector *****************.title "vectors.asm".ref start.sect ".vecs"B start.ref INT_2.sect ".vecs1"B INT_2.end(+100) rpt EOS ;中断时钟为100个周期。

DSP实验

DSP实验
(2) DSP 实验箱一台,USB 连接电缆一条。
1.6 实验步骤
1. 设置 Code Composer Studio 在软件仿真(Simulator)方式下运行
(1) 双击桌面上“Setup CCS 3(‘C5000’)”,启动“Code Composer Studio Setup”。 (2) 在“Import Configuration”对话框中单击“Clear”按钮,在接下来的对话框中选择
“是”,清除原先的系统设置;观察窗口“Code Composer Studio Setup”中左侧 “System Configuration”栏中“My System”项被清空。 (3) 单击“Close”按钮,退出“Import Configuration”对话框。 (4) 选择“Code Composer Studio Setup”窗口“File”菜单中“Exit”项退出,并在接下 来显示的对话框中选择“是”,保存设置;再选择“否”,不启动CCS。
下面我们使用 CC 的图形功能检验上一节的结果。 (1) 执行View→Graph→Time/Frequency 打开Graph Property Dialog 窗口。 (2) 修改属性为如下值并确定。
在弹出的图形窗口中单击鼠标右键,选择“Clear Display”。 (3) 按F12运行程序,观察input窗口的内容。
程文件一般包含以下几种文件:
源程序文件: 汇编语言文件或C语言(*.ASM 或*.C)
头文件:
(*.H)
命令文件:
(*.CMD)
库文件:
(*.LIB,*.OBJ)
CCS软件安装的操作一般包括几个步骤:CCS软件的安装、配置和启动,工程文件的
创建、编译和调试。调试手段有很多,要掌握常用按键F10、F8等的基本使用,掌握观

dsp实验4

dsp实验4

实验四IIR滤波器的DSP实现思考题:对照参考程序,编写实现四阶或更高阶数的低通、高通、带通、带阻IIR 数字滤波器的DSP程序并仿真。

提示:滤波器系数一般通过MATLAB仿真得到。

4阶低通:.title "IIR.asm".mmregs.def startx4 .usect "x",1x3 .usect "x",1x2 .usect "x",1x1 .usect "x",1x0 .usect "x",1COEF .usect "COEF",9Indata .usect "buffer",1outdata .usect "buffer",1*PA0 .set 10*PA1 .set 1.datatable.word 0 ;x(n-1).word 0 ;x(n-2).word 0;x(n-3).word 0;x(n-4).word 0 ;分子系数B3=0.word 15*32768/10000;B3=0.0015.word 78*32768/10000;分子系数B2=0.0078.word 25*32768/10000 ;分子系数B1=0.0025.word 0;分子系数B0=0.word 3783*32768/10000;分母系数A4=0.3783.word -6258*32768/10000 ;分母系数A3=-1.8776/3.word 88705*32768/100000 ;分母系数A2=3.5482/4.word -826775*32768/1000000;分母系数A1=-3.0372/4.textstart: SSBX FRCTSTM #x4,AR1RPT #3MVPD #table,*AR1+STM #indata,AR5STM #outdata,AR2STM #COEF,AR1RPT #8MVPD #table+2,*AR1+STM #x2,AR3STM #COEF+9,AR4;AR4-->A1MVMM AR4,AR1 ;保存地址值在AR1中STM #5,BK ;设置循环缓冲区长度STM #-1,AR0 ;设置变址寻址步长IIR2: ;PORTR PA1,*AR3;从PA1口输入数据x(n)MVDD *AR5,*AR3 ;在这里设置断点与探针LD *AR3+0%,16,A;计算反馈通道,A=x(n)MAC *AR3,*AR4,A;A=x(n)+A1*x1MAC *AR3,*AR4,A;A=x(n)+2A1*x1MAC *AR3,*AR4,A;A=x(n)+3A1*x1MAC *AR3+0%,*AR4-,A;A=x(n)+3*A1*x1+A1*x1MAC *AR3+0%,*AR4-,A ;A=x(n)+4*A1*x1+A2*x2MAC *AR3,*AR4,A;A=x(n)+4*A1*x1 +2*A2*x2MAC *AR3,*AR4,A;A=x(n)+4*A1*x1 +3*A2*x2MAC *AR3+0%,*AR4-,A ;A=x(n)+4*A1*x1+4*A2*x2MAC *AR3+0%,*AR4-,A;A=x(n)+4*A1*x1+4*A2*x2+A3*x3MAC *AR3,*AR4,A;A=x(n)+4*A1*x1+4*A2*x2+2*A3*x3MAC *AR3+0%,*AR4-,A ;A=x(n)+4*A1*x1+4*A2*x2+3*A3*x3MAC *AR3+0%,*AR4-,A ;A=x(n)+4*A1*x1+4*A2*x2+2*A3*x3+A4*x4 STH A,*AR3 ;保存x0MPY *AR3+0%,*AR4-,A;计算前向通道,A=B0*x0MAC *AR3+0%,*AR4-,A;A=B0*x0+B1*x1MAC *AR3+0%,*AR4-,A ;A=B0*x0+B1*x1+B2*x2MAC *AR3,*AR4-,A;B=B0*x0+B1*x1+B2*x2+B3*x3=y(n)STH A,*AR3 ;保存y(n)MVMM AR1,AR4 ;AR4重新指向A1BD IIR2 ;循环; PORTW *AR3,PA0;向PA0口输出数据MVDD *AR3,*AR2 ;在这里设置断点与探针nop.end高通:*用双操作数指令实现二阶高通IIR滤波器**反馈通道:x0=w(n)=x(n)+A1*x1+A2*x2+A3*x3+A4*x4 前向通道:y(n)=B0*x0+B1*x1+B2*x2+B3*x3+B4*x4 *.title "IIR2.asm".mmregs.def startx4 .usect "x",1x3 .usect "x",1x2 .usect "x",1x1 .usect "x",1x0 .usect "x",1COEF .usect "COEF",9indata .usect "buffer",1outdata .usect "buffer",1*PA0 .set 10*PA1 .set 1.datatable .word 0.word 0.word 0.word 0.word 0.word 2754*32768/10000 ;分子系数B4=0.2754.word -551*32768/1000;分子系数B3/2=-0.551.word 413*32768/1000 ;分子系数B2/4=0.413.word -551*32768/1000;分子系数B1/2=-0.551.word 2754*32768/10000 ;分子系数B0=0.2754.word -762*32768/10000;分母系数A4=-0.0762.word 7415*32768/10000 ;分母系数A3=0.4844.word -319*32768/1000;分母系数A2/4=-0.319.word 3925*32768/10000 ;分母系数A1/4=0.3925.textstart: SSBX FRCTSTM #x4,AR1RPT #4MVPD #table,*AR1+STM #indata,AR5STM #outdata,AR2STM #COEF,AR1RPT #8MVPD #table+5,*AR1+STM #COEF+8,AR4;AR4-->A1MVMM AR4,AR1 ;保存地址值在AR1中STM #5,BK ;设置循环缓冲区长度STM #-1,AR0 ;设置变址寻址步长STM #x4,AR3IIR2: ;PORTR PA1,*AR3 ;从PA1口输入数据x(n) MVDD *AR5,*AR3 ;在这里设置断点与探针LD *AR3+0%,16,A;计算反馈通道,A=x(n)RPT #2MAC *AR3,*AR4,A;3*A1*x1 ???MAC *AR3+0%,*AR4-,A ;A=x(n)+4*A1*x1RPT #2MAC *AR3,*AR4,A;4*A2*x2 ???MAC *AR3+0%,*AR4-,A ;A=x(n)+4*A1*x1+5*A2*x2MAC *AR3+0%,*AR4-,A;A=x(n)+4*A1*x1+5*A2*x2+4*A3*x3MAC *AR3+0%,*AR4-,A;A=x(n)+4*A1*x1+5*A2*x2+4*A3*x3+A4*x4STH A,*AR3 ;保存x0MPY *AR3+0%,*AR4-,A;计算前向通道,A=B0*x0MAC *AR3,*AR4,A ;3*B1*x1MAC *AR3+0%,*AR4-,A ;A=B0*x0+4*B1*x1RPT #2MAC *AR3,*AR4,A;4*A2*x2 ???MAC *AR3+0%,*AR4-,A ;A=B0*x0+4*B1*x1+5*B2*x2MAC *AR3,*AR4,A ;3*B3*x3MAC *AR3+0%,*AR4-,A;A=B0*x0+4*B1*x1+5*B2*x2+4*B3*x3MAC *AR3,*AR4,A;B=A=B0*x0+4*B1*x1+5*B2*x2+4*B3*x3+B4*x4=y(n)STH A,*AR3 ;保存y(n)MVMM AR1,AR4 ;AR4重新指向A1BD IIR2 ;循环; PORTW *AR3,PA0;向PA0口输出数据MVDD *AR3,*AR2 ;在这里设置断点与探针nop.end带阻:.title "IIR2.asm".mmregs.def startx4 .usect "x",1x3 .usect "x",1x2 .usect "x",1x1 .usect "x",1x0 .usect "x",1COEF .usect "COEF",9indata .usect "buffer",1outdata .usect "buffer",1*PA0 .set 10*PA1 .set 1.datatable .word 0.word 0.word 0.word 0.word 0.word 8004*32768/10000 ;分子系数B4=0.8004.word -6475*32768/10000;分子系数B3/4=-0.6475.word 924*32768/1000 ;分子系数B2/4=0.924.word -6475*32768/10000;分子系数B1/4=-0.6475.word 8004*32768/10000 ;分子系数B0=0.8004.word -6411*32768/10000;分母系数A4=-0.6411.word 575*32768/1000 ;分母系数A3/4=0.575.word -914*32768/1000;分母系数A2/4=-0.914.word 7202*32768/10000 ;分母系数A1/4=0.7202.textstart: SSBX FRCTSTM #x4,AR1RPT #4MVPD #table,*AR1+STM #indata,AR5STM #outdata,AR2STM #COEF,AR1RPT #8MVPD #table+5,*AR1+STM #COEF+8,AR4;AR4-->A1MVMM AR4,AR1 ;保存地址值在AR1中STM #5,BK ;设置循环缓冲区长度STM #-1,AR0 ;设置变址寻址步长STM #x4,AR3IIR2: ;PORTR PA1,*AR3;从PA1口输入数据x(n)MVDD *AR5,*AR3 ;在这里设置断点与探针LD *AR3+0%,16,A;计算反馈通道,A=x(n)RPT #2MAC *AR3,*AR4,A;3*A1*x1MAC *AR3+0%,*AR4-,A ;A=x(n)+4*A1*x1RPT #2MAC *AR3,*AR4,A;3*A2*x2 ???MAC *AR3+0%,*AR4-,A ;A=x(n)+4*A1*x1+4*A2*x2 RPT #2MAC *AR3,*AR4,A;3*A3*x3 ???MAC *AR3+0%,*AR4-,A ;A=x(n)+A1*x1+4*A2*x2+4*A3*x3MAC *AR3+0%,*AR4-,A;A=x(n)+A1*x1+4*A2*x2+4*A3*x3+A4*x4STH A,*AR3 ;保存x0MPY *AR3+0%,*AR4-,A;计算前向通道,A=B0*x0RPT #2MAC *AR3,*AR4,A;3*B1*x1 ???MAC *AR3+0%,*AR4-,A ;A=B0*x0+4*B1*x1RPT #2MAC *AR3,*AR4,A;3*B2*x2 ???MAC *AR3+0%,*AR4-,A ;A=B0*x0+4*B1*x1+4*B2*x2 RPT #2MAC *AR3,*AR4,A;3*B3*x3 ???MAC *AR3+0%,*AR4-,A;A=B0*x0+4*B1*x1+4*B2*x2+4*B3*x3MAC *AR3,*AR4,A;B=A=B0*x0+B1*x1+B2*x2+B3*x3+B4*x4=y(n)STH A,*AR3 ;保存y(n)MVMM AR1,AR4 ;AR4重新指向A1BD IIR2 ;循环; PORTW *AR3,PA0;向PA0口输出数据MVDD *AR3,*AR2 ;在这里设置断点与探针nop.end带通:.title "IIR2.asm".mmregs.def startx4 .usect "x",1x3 .usect "x",1x2 .usect "x",1x1 .usect "x",1x0 .usect "x",1 COEF .usect "COEF",9 indata .usect "buffer",1 outdata .usect "buffer",1 *PA0 .set 10*PA1 .set 1.datatable .word 0.word 0.word 0.word 0.word 0.word 201*32768/10000 ;分子系数B4=0.0201.word 0*32768/10000;分子系数B3=0.word -402*32768/10000 ;分子系数B2=-0.0402.word 0*32768/10000;分子系数B1=0.word 201*32768/10000 ;分子系数B0=0.0201.word -6411*32768/10000;分母系数A4=-0.6411.word 575*32768/10000 ;分母系数A3/4=0.575.word -914*32768/1000;分母系数A2/4=-0.914.word 7202*32768/10000 ;分母系数A1=0.7202.textstart: SSBX FRCTSTM #x4,AR1RPT #4MVPD #table,*AR1+STM #indata,AR5STM #outdata,AR2STM #COEF,AR1RPT #8MVPD #table+5,*AR1+STM #COEF+8,AR4;AR4-->A1MVMM AR4,AR1 ;保存地址值在AR1中STM #5,BK ;设置循环缓冲区长度STM #-1,AR0 ;设置变址寻址步长STM #x4,AR3IIR2: ;PORTR PA1,*AR3;从PA1口输入数据x(n)MVDD *AR5,*AR3 ;在这里设置断点与探针LD *AR3+0%,16,A;计算反馈通道,A=x(n)MAC *AR3+0%,*AR4-,A ;A=x(n)+A1*x1RPT #2MAC *AR3,*AR4,A;3*A2*x2 ???MAC *AR3+0%,*AR4-,A;A=x(n)+4*A1*x1+4*A2*x2RPT #2MAC *AR3,*AR4,A ;3*A3*x3MAC *AR3+0%,*AR4-,A;A=x(n)+A1*x1+4*A2*x2+4*A3*x3MAC *AR3+0%,*AR4-,A;A=x(n)+A1*x1+4*A2*x2+4*A3*x3+A4*x4STH A,*AR3 ;保存x0MPY *AR3+0%,*AR4-,A ;计算前向通道,A=B0*x0MAC *AR3+0%,*AR4-,A ;A=B0*x0+B1*x1MAC *AR3+0%,*AR4-,A ;A=B0*x0+B1*x1+B2*x2MAC *AR3+0%,*AR4-,A;A=B0*x0+B1*x1+B2*x2+B3*x3MAC *AR3,*AR4,A;B=A=B0*x0+B1*x1+B2*x2+B3*x3+B4*x4=y(n)STH A,*AR3 ;保存y(n)MVMM AR1,AR4 ;AR4重新指向A1BD IIR2 ;循环; PORTW *AR3,PA0;向PA0口输出数据MVDD *AR3,*AR2 ;在这里设置断点与探针nop.end。

DSP实验指导书

DSP实验指导书

DSP实验指导书DSP原理与应⽤实验指导书张卫宁王晓东⼆零⼀零年四⽉⽬录第⼀部分软件仿真(Simulator)实验实验⼀集成开发环境CCS应⽤基础实验⼆寻址⽅式实验三定点定标运算实验四浮点运算实验五汇编程序的优化实验六C语⾔编程与优化(乘法—累加运算程序设计)实验七混合编程实验实验⼋FIR滤波器的实现实验九基于DSP的数字图像处理算法的实现第⼆部分硬件(Emulator)实验实验⼗⽚内定时器实验实验⼗⼀数字I/O⼝的应⽤实验⼗⼆同步串⼝与A/D转换实验⼗三基于DSP的数字⾳频处理系统第三部分部分实验程序参考清单实验⼀参考程序实验⼆参考程序实验三参考程序实验四参考程序实验五参考程序第四部分参考资料⼀、C54xCPU的存储器映像寄存器及其地址⼆、C54xCPU的状态和控制寄存器ST0、ST1三、TMS320C5416DSP的存储区映像四、C54xCPU的处理器模式状态寄存器PMST五、C54x的⽚内定时器控制寄存器TCR六、TMS320C5416的中断⽮量表参考⽂献第⼀部分软件仿真(Simulator)实验实验⼀集成开发环境CCS应⽤基础⼀、⽬的1. 通过创建⼀个简单的应⽤⼯程,初步熟悉Code Composer Studio(简称CCS)的集成开发环境(IDE)及其⼯具的使⽤。

2. 掌握汇编语⾔源程序的基本框架和编写⽅法,了解CCS的⼯程结构以及编译、汇编、连接、运⾏和调试的基本过程。

3. 了解ST0、ST1的控制位对计算过程的控制以及计算结果对状态位的影响。

⼆、内容1. 学习使⽤CCS集成开发环境(IDE)的各种⼯具。

包括下列内容:(1)编辑、汇编和连接。

(2)查看和修改存储器映像寄存器的内容。

(3)查看和修改ST0、ST1及PMST的有关位。

(4)查看和修改程序存储器和数据存储器的内容。

(5)断点操作。

(6)运⾏程序(单步运⾏、连续运⾏和断点运⾏)。

2. 观察并理解COFF段结构的划分及存储空间的分配。

dsp实验报告

dsp实验报告

dsp实验报告实验一:CCS入门实验实验目的:1. 熟悉CCS集成开发环境,掌握工程的生成方法;熟悉SEED-DEC643实验环境; 掌握CCS集成开发环境的调试方法。

2.学习用标准C 语言编写程序;了解TI CCS开发平台下的C 语言程序设计方法和步骤; 熟悉使用软件仿真方式调试程序。

3. 学习用汇编语言编写程序; 了解汇编语言与 C 语言程序的区别和在设置上的不同;了解TMS320C6000 汇编语言程序结果和一些简单的汇编语句用法学习在CCS 环境中调试汇编代码。

4. 在了解纯C 语言程序工程和汇编语言程序工程结构的基础上,学习在C 工程中加入汇编编程的混合编程方法; 了解混合编程的注意事项;理解混合编程的必要性和在什么情况下要采用混合编程5. 熟悉CCS集成开发环境,掌握工程的生成方法; 熟悉SEED-DEC643实验环境;掌握CCS集成开发环境的调试方法。

实验原理:CCS 提供了配置、建立、调试、跟踪和分析程序的工具,它便于实时、嵌入式信号处理程序的编制和测试,它能够加速开发进程,提高工作效率。

CCS 提供了基本的代码生成工具,它们具有一系列的调试、分析能力序。

使用此命令后,要重新装载.out 文件后,再执行程序。

使用 CCS常遇见文件简介1. program.c: C 程序源文件;2. program.asm: 汇编程序源文件;3. filename.h: C 程序的头文件,包含DSP/BIOS API模块的头文件;4. filename.lib: 库文件;5. project.cmd: 连接命令文件;6. program.obj: 由源文件编译或汇编而得的目标文件;7. program.out: 经完整的编译、汇编以及连接后生成可执行文件; 8. program.map: 经完整的编译、汇编以及连接后生成空间分配文件; 9.project.wks: 存储环境设置信息的工作区文件。

P.S(CMD文件中常用的程序段名与含义1. .cinit 存放C程序中的变量初值和常量;2. .const 存放C程序中的字符常量、浮点常量和用const声明的常量;3. .text 存放C程序的代码;4. .bss 为C 程序中的全局和静态变量保留存储空间;5. .far 为C 程序中用far声明的全局和静态变量保留空间;6. .stack 为 C 程序系统堆栈保留存储空间,用于保存返回地址、函数间的参数传递、存储局部变量和保存中间结果;7. .sysmem 用于 C 程序中malloc、calloc 和 realloc 函数动态分配存储空间。

DSP实验报告

DSP实验报告

课程设计(实验)报告课程DSP专业电子信息工程技术学号姓名指导教师机械与电子信息工程学部2011年6月目录实验一熟悉HK-EP型DSP实验箱和CCS软件的使用实验二编写程序实现y= ∑ax,其中x、a的值自设实验三编写程序将数组X[5]初始化为1,2,3,4,5,再把每个元素乘以2实验四编写程序产生正弦波实验五编写程序,使实验箱控制核心板上的指示灯XFD1闪烁频率为2Hz实验六编写程序,使实验箱上的点阵循环显示汉字“中国”实验一一、实验内容:熟悉HK-EP型DSP实验箱和CCS软件的使用二、实验目的:熟练运用实验箱和CCS软件的使用三、实验设备:HK-EP型DSP数字信号处理实验仪四、实验步骤:(一)、不连接实验箱的配置首先双击CCS软件出现界面关闭当前窗口,然后移除MY SYSTEM 下面的所有项目,然后点击IMPORT A CONFIGURILATION,再出现的窗口中选择第二项,点击IMPORT和SA VE AND QUIT,再出现的界面上点击“是”,即可进入不连接试验箱的CCS程序(二)、连接实验箱的配置(1)硬件仿真器设备驱动安装①连接硬件USB数据线后,计算机提示找到新的硬件,请选择新硬件的软件,单击“下一步”出现设备驱动窗口。

②点击“浏览”后,找到仿真器所配光盘根目录下的“tdsjtag.sys”或“tddjtag.inf”打开。

③单击下一步,完成安装。

点击“完成”,则在硬件设备管理中可看到所添加的新设备情况。

如下图:(2)运行光盘根目录下的“setup.exe”(仿真器的运行链接文件)(3)CCS(CC)动态连接库的安装双击进入“SETUP CCS5000”界面,点击“C54x XDS(Texas instruments)”或按住鼠标的左键拖到“My system”下。

点击“auto-generate board data file”的下拉箭头,选中“auto-genrate board data filewith extra config”,点击“Browse”,添加安装在C:\TI\CC\BIN\wintech.cfg;添加完成后,点击“NEXT”继续下一步;修改I/O口地址,将0X240改为0X0,选中“TMS320C5400”,点击“Add single”,继续点击“NEXT”添加“GEL”文件(注:此GEL文件可以不需添加),点击“Finish”。

DSP实验报告(四)

实验四 用窗函数设计FIR 滤波器一、实验目的1、熟悉FIR 滤波器设计的基本方法。

2、掌握用窗函数设计FIR 数字滤波器的原理及方法,熟悉相应的计算机高级语言编程。

3、熟悉线性相位FIR 滤波器的幅频特性和相位特性。

4、了解各种不同窗函数对滤波器性能的响应二、实验原理和方法(一)FIR 滤波器的设计IIR 滤波器的优异幅度响应,一般是以相位的非线性为代价的,非线性相位会引起频率色散。

FIR 滤波器具有严格的相位特性,这对于语音信号处理和数据传输是和重要的。

目前FIR 滤波器的设计方法主要有三种:窗函数法、频率取样法和切比雪夫等波纹逼近的最优化设计方法。

常用的是窗函数法和切比雪夫等波纹逼近的最优化设计方法。

窗函数法是从时域出发,用一个窗函数截取理想的hd(n)得到h(n),以有限长序列h(n)近似理想的hd(n);如果从频域出发,用理想的()j d H e ω在单位圆上等角度取样得到H(k),根据h(k)得到H(z)将逼近理想的hd(z),这就是频率取样法。

(二)窗函数设计法用窗函数设计滤波器首先要对滤波器提出性能指标。

一般是给定一个理想的频率响应()j d H e ω,使所设计的FIR 滤波器的频率响应()j H e ω去逼近所要求的理性的滤波器的响应()j d H e ω。

窗函数法设计的任务在于寻找一个可实现(有限长单位脉冲响应)h(n )的传递函数()()j j n n H e h n e ωω+∞-==∑去逼近理想的幅频响应。

一个理想的频率响应的傅立叶反变换201()()2j j n d d H n H e e d πωωωπ=⎰(1)所得到的理想单位脉冲响应h 往往是一个无限长序列。

对经过适当的加权、截断处理才能得到一个所需要的有限长脉冲响应序列。

对应不同的加权、截断,就有不同的窗函数。

所要寻找的滤波器脉冲响应就等于理想脉冲响应和窗函数的乘积,即()()()d h n h n w n = (2)由此可见,窗函数的性质就决定了滤波器的品质。

dsp实验报告3

§2.1 基础实验一、实验目的1. 掌握CCS3.3实验环境的使用;2. 掌握用C语言编写DSP程序的方法。

二、实验设备1. 一台装有CCS3.3软件的计算机;2. DSP实验箱的TMS320F2812主控板;3. DSP硬件仿真器。

三、实验原理浮点数的表达和计算是进行数字信号处理的基本知识;产生正弦信号是数字信号处理中经常用到的运算;C语言是现代数字信号处理表达的基础语言和通用语言。

写实现程序时需要注意两点:(1)浮点数的范围及存储格式;(2)DSP的C语言与ANSI C语言的区别。

四、实验步骤1.打开CCS3.3 并熟悉其界面;2.在CCS3.3环境中打开本实验的工程(Example_bASe.pjt)[位置为:/ Example_2812/ Example_math/ Example_base],编译并重建.out 输出文件,然后通过仿真器把执行代码下载到DSP芯片中;3.把X0 , Y0 和Z0添加到Watch窗口中作为观察对象(选中变量名,单击鼠标右键,在弹出菜单中选择“Add Watch Window”命令);4.选择view->graph->time/frequency…。

设置对话框中的参数: 其中“Start Address”设为“sin_value”,“Acquisition buffer size”和“Display Data size”都设为“100”,并且把“DSP Data Type”设为“32-bit floating point”,设置好后观察信号序列的波形(sin函数,如图);5.单击运行;6.观察三个变量从初始化到运算结束整个过程中的变化;观察正弦波形从初始化到运算结束整个过程中的变化;7.修改输入序列的长度或初始值,重复上述过程。

五.实验注意事项1.把代码载入硬件时注意操作顺序,要操作规范,以免烧坏硬件2.只有添加了可视窗口才可以看到图形3.读懂程序以后再按要求修改,才能完成要求4.注意观察修改程序的图形变化与之前的比较六.实验程序/** Program for convolve **/#include <math.h>int N1,N2; /*输入数组长度*/int n; /*输出数组长度*/int m,i,k;float x[20];float h[20];float y[20]; /*输出数组*/main(){N1=10; /* x 长度*/N2=10; /* h 长度*/n=N1+N2-1; /* 输出y 的长度*/ for(i=0;i<20;i++) /* 初始化数组*/{x[i]=0;h[i]=0;y[i]=0;}for(i=0;i<n;i++) /* 给x数组赋值*/{if(i<N1){x[i]=i;}else{x[i]=0;}}for(i=0;i<=n;i++) /* 给h数组赋值*/{if(i<N2){h[i]=1;}else{h[i]=0;}}for(i=0;i<n;i++) /* 计算卷积*/{for (k=0;k<=i;k++)y[i]=y[i]+h[k]*x[i-k];}while(1);七.实验结果八.实验小结通过本实验熟悉和使用CCS3.3实验环境,虽然还不是充分解读CCS3.3技巧,但有了这次自己动手,掌握其基本技巧。

DSP课程实验报告

目录目录 (1)实验一试验名称:RGB转灰度,添加噪声实验 (2)实验二试验名称:图像平滑,中值滤波实验 (7)实验三试验名称:图像锐化实验 (9)实验四试验名称:灰度变换实验 (11)实验五试验名称:灰度直方图,直方图均衡实验 (13)实验六试验名称:边沿提取,灰度反转,二值化实验 (16)实验七试验名称:熟悉imgLib的使用实验 (18)实验一试验名称:RGB转灰度,添加噪声实验一、试验目的1、熟悉CCS,学会运用CCS导入图像,并仿真DSP处理图像2、掌握如何将目标图像由彩色转为灰色3、掌握如何给目标图像添加各类噪声二、试验设备1、PC机一台,windows操作系统2、CCS编程环境三、试验原理(1)彩色图像中的每个像素的颜色有R、G、B三个分量决定,而每个分量有255个中值可取,这样一个像素点可以有1600多万(255*255*255)的颜色的变化范围。

而灰度图像是R、G、B三个分量相同的一种特殊的彩色图像,其中一个像素点的变化范围为255种,所以在数字图像处理中一般先将各种格式的图像转变成灰度图像以使后续的图像的计算量变得少一些。

灰度图像的描述与彩色图像一样仍然反映了整幅图像的整体和局部的色度和亮度等级的分布和特征。

在RGB模型中,如果R=G=B时,则彩色表示一种灰度颜色,其中R=G=B的值叫做灰度值。

因此,灰度图像每个像素只需一个字节存放灰度值(又称强度值、亮度值),灰度范围为0-255。

图像的灰度化处理,一般有以下三种处理方法:方法一:加权平均法根据重要性及其它指标,将R、G、B三个分量以不同的权值进行加权平均。

由于人眼对绿色的敏感度最高,对蓝色敏感度最低。

因此,在MATLAB中我们可以按下式系统函数,对RGB三分量进行加权平均能得到较合理的灰度图像。

f(i,j)=0.30R(i,j)+0.59G(i,j)+0.11B(i,j))方法二:平均值法将彩色图像中的R、G、B三个分量的亮度求简单的平均值,将得到均值作为灰度值输出而得到灰度图。

DSP实验4实验报告

实验4 C54xDSP定时器及中断使用一、实验目的1、学会通过TI公司的片上支持库来调用片上外围设备;2、学会使用C54x系列DSP的定时器;3、学会使用C54x系列DSP的中断系统;二、实验原理C54xDSP片上支持库CSL的详细使用方法及步骤见“TMS320C54x CSL.pdf”。

1、定时器的使用(a)C语言部分(1)在预编译处包含CSL库及对应的定时器库;#include<stdio.h>#include<csl.h>#include<csl_timer.h>#include<csl_irq.h>(2)定义定时器的配置结构及句柄;TIMER_Config timerCfg1={0x0000,0x0080u};TIMER_Handle hTimer1;(3)在运行程序的开始调用“CSL初始化函数”;CSL_init();(4)在运行程序内调用“定时器打开函数”和“定时器配置函数”;hTimer1=TIMER_open(TIMER_DEV0,TIMER_OPEN_RESET);TIMER_config(hTimer1,&timerCfg1);(5)在需要开始计时的时候调用“定时器开始函数”;TIMER_start(hTimer1);(6)不再需要计时的时候调用“定时器停止函数”;TIMER_stop (hTimer1);(b)CCS Project Build Option部分(1)Compiler 下 Preprocessor 设置;(2)Linker 下 Libraries 设置;三、实验内容1、利用TI公司已定义的片上支持库,正确配置及使用定时器和中断,使能定时器中断;#include<stdio.h>#include<csl.h>#include<csl_timer.h>#include<csl_irq.h>TIMER_Config timerCfg1={0x0000,0x0080u};TIMER_Handle hTimer1;interrupt void timerIsr();int temp,timer_int_cnt;void main(){int temp=0;CSL_init();IRQ_plug (IRQ_EVT_TINT0,&timerIsr);IRQ_enable(IRQ_EVT_TINT0);IRQ_globalEnable();hTimer1=TIMER_open(TIMER_DEV0,TIMER_OPEN_RESET);TIMER_config(hTimer1,&timerCfg1);TIMER_start(hTimer1);while(1){};TIMER_stop (hTimer1);}interrupt void timerIsr(void){TIMER_stop (hTimer1);timer_int_cnt=timer_int_cnt+1;if(timer_int_cnt<20){TIMER_start(hTimer1);}printf("Now Enter a Timer interupt!\n");}2、编写相应的定时器中断服务函数,运行程序,把断点设置在中断服务函数内,并使程序在该断点处停下,并在CCS软件调试窗口上打印相应的提示。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档