文档库 最新最全的文档下载
当前位置:文档库 › 使用CCS进行DSP编程(三)--CCS编程入门(精)

使用CCS进行DSP编程(三)--CCS编程入门(精)

使用CCS进行DSP编程(三)--CCS编程入门(精)
使用CCS进行DSP编程(三)--CCS编程入门(精)

使用CCS进行DSP编程(三)

——实现DMA和Interrupt

现在讨论在CCS进行DSP编程来实现DMA和Interrupt功能。假定读者对CCS 的使用已经比较了解,并有了一定的CCS编程经验。如果读者还不太了解,请参阅《使用CCS进行DSP编程(一)——CCS编程入门》、《使用CCS进行DSP 编程(二)——实现FFT》及其他CCS的学习文档。

下面用闻亭公司的C6xPa板硬件和闻亭公司的PCI仿真器为例,来实现DSP的DMA传输和硬件Interrupt功能。

首先来描述一下使用的硬件资源。闻亭公司的C6xPa板有两路独立的最高采样率为40MHz精度为12bit的A/D,它与DSP的EXT_INT7相连,可以产生外部中断信号,通过FPGA的逻辑可以控制A/D的采集和采集多少数据产生一次中断,采集的数据放在DPRAM中(0x1400000开始的地址空间),通过DMA传输到DSP芯片上的存储器中(0x80000000开始的地址空间)。

在C语言环境中使用DMA和Interrupt功能,需要包含两个头文件

,同时要用到相应的运行时库文件“csl6201.lib”和“dev6x.lib”。对这两组头文件和运行时库文件,我们深入研究一下,看一看我们比较关心的函数有哪些。下一次用到这些函数时,别忘了带上相应的运行时库文件%*&^*&^喔。

在dev6x.lib库文件中,直接与实现DMA和Interrupt功能相关的函数有如下几个:

dma_init

dma_global_init

dma_reset

intr_reset

intr_init

intr_hook

intr_map

intr_isn

intr_get_cpu_intr

isr_jump_table

在csl6201.lib库文件中,直接与实现DMA功能相关的函数有如下几个:

DMA_AllocGlobalReg

DMA_GetEventId

DMA_GBL_PRIVATE

DMA_Open

DMA_Start

DMA_HCHA0

DMA_HCHA1

DMA_HCHA2

DMA_HCHA3

DMA_Wait

DMA_SetGlobalReg

DMA_ConfigA

DMA_ConfigB

DMA_Stop

DMA_AutoStart

DMA_Pause

DMA_Reset

DMA_GetGlobalReg

DMA_SetAuxCtl

DMA_Close

DMA_FreeGlobalReg

DMA_Init

DMA_GetStatus

我们只需其中的一部分便可以实现DMA和Interrupt功能。函数的具体使用说明和调用方式请参看TI的说明档。

下面直接看一下程序的源码,有一个整体的理解,然后再对具体的相关内容做一下说明,如果源码能够理解,就不需要再看具体说明了。为了便于读者理解,本人对相应部分作了处理,尽量使结构清晰,突出对DMA和Interrupt功能的实现:

接下来进行详细说明。

首先,包含头文件,

接着对DMA进行初始化赋值,

其中,各参数的含义如下:

我们使用DMA的源地址为0x01400000,目标地址为0x80008000,传输数据长度为1k*32bit,DMA控制寄存器的值的具体含义请参看各对应DSP的datasheet。然后是对使用的函数进行引用说明,其他函数跟普通的Visual C++函数没有太大的区别,除了以下的例外:

其中,有一个关键字“interrupt”,它告诉TI的C编译器,这个函数是一个特殊

的中断服务函数,C编译器会另眼看待。

接下来对DMA操作句柄定义,相应的头文件对DMA_HANDLE作了定义,我们这里可以直接使用:

主程序非常简单,

实现DMA功能的子程序也很简单,只有四句:

第一句:语法如下:

其中的DMA_CHAANY含义是“任意一个闲置的DMA通道”,并非有一个DMA 通道叫DMA_CHAANY,除了通道0~3的4个通道外,还有一个辅助DMA通道,是另做他用的。我们取得了对DMA操作的句柄,就可以进行初始化和使用了。

第二句:语法如下:

这里需要提前做DMA_CONFIG的初始化,这两步也可以用一步来实现,就用到另外一个函数:

它直接把各DMA寄存器的设置当作参数,一步到位。

第三句:语法如下:

这个函数检测DMA的状态位,直到DMA结束后才退出,读者可以在下一次使用这个DMA通道前使用。DSP可以执行其他的操作,或者执行此操作等待DMA传输结束。

第四句:语法如下:

使用完DMA通道后,需要对它进行关闭,释放资源以备他用。

DMA的使用是很简单的,复杂的工作都由DSP硬件和TI的库函数来完成了。我们要做的工作是理解这些,要想使用这些函数,不可避免要知道DMA各控制寄存器的具体含义,除了少数“天才”可以不学而知外,最好老老实实学习TI的文档)。!!!

下面来看看中断功能是怎样实现的。在中断服务子程序中,调用了DMA,完成数据的从外部双口RAM到DSP片内的传输,

而中断服务子程序是如何与硬件中断联系起来的呢?

中断的实现主要在中断初始化子程序里,在程序中对每一步的操作都进行了详细的说明。我们一步一步来分析一下:

首先是用于中断处理的函数:

然后是用于中断处理的宏定义:

用到的一些助记符如下:

大家觉得上面的内容还不够丰富,请参阅TI的文档spru273b.pdf。

有了上面的理解,中断的实现过程就比较清楚了:

1. 初始化中断服务表指针(ISTP):intr_init();

2. 选择用哪一个中断: intr_map(CPU_INT7,ISN_EXT_INT7);

3. 清中断: INTR_CLR_FLAG(CPU_INT7);

4. 中断服务子程序与中断号挂钩: intr_hook(Int7_ISR,CPU_INT7);

5. 打开非屏蔽中断: INTR_ENABLE(CPU_INT_NMI);

6. 打开所选中断: INTR_ENABLE(CPU_INT7);

7. 全局中断使能: INTR_GLOBAL_ENABLE(); 读者可能会注意到,中断处理函数都是小写的,而宏定义都是大写的,在C语言的语法里是要注意的,否则会出现找不到函数或者函数未定义。

如果想用其他的中断源,可以按照上面的步骤依样而行,相信不会是什么太难的事情了。每一步不是必须的,顺序也不是固定的。Int7_ISR是本人举例时用的中断服务子程序名,大家可以使用任意的名字,而其中的程序也是随意根据需要编写,没有太多的限制。读者如果对DSP的硬件很清楚,可以直接对中断寄存器进行赋值,不需要调用这些函数与宏定义。

相信现在大家对中断与DMA的实现已经心中有数了,但我还要强调一下,我所讲的实现是突出软件上的实现,进行DSP编程需要对硬件有足够必要的了解,否则会遇到某些难以理解的问题,我在这里尽量不涉及硬件,只是希望大家仔细对TI有关资料认真研究,避免我的介绍产生先入为主的不良影响。例如我在DMA 中执行了对双口RAM的读操作,而双口RAM是连接在EMIF上的,因此,进行读操作之前就必须对EMIF进行初始化操作,否则,出错是必然的,而且很难找出错误原因,切记切记。

数字信号处理实验一

一、实验目的 1. 通过本次实验回忆并熟悉MATLAB这个软件。 2. 通过本次实验学会如何利用MATLAB进行序列的简单运算。 3. 通过本次实验深刻理解理论课上的数字信号处理的一个常见方法——对时刻n的样本附近的一些样本求平均,产生所需的输出信号。 3. 通过振幅调制信号的产生来理解载波信号与调制信号之间的关系。 二、实验内容 1. 编写程序在MATLAB中实现从被加性噪声污染的信号中移除噪声的算法,本次试验采用三点滑动平均算法,可直接输入程序P1.5。 2. 通过运行程序得出的结果回答习题Q1.31-Q1.33的问题,加深对算法思想的理解。 3. 编写程序在MATLAB中实现振幅调制信号产生的算法,可直接输入程序P1.6。 4. 通过运行程序得出的结果回答习题Q1.34-Q1.35的问题,加深对算法思想的理解。 三、主要算法与程序 1. 三点滑动平均算法的核心程序: %程序P1.5 %通过平均的信号平滑 clf; R=51; d=0.8*(rand(R,1)-0.5);%产生随噪声 m=0:R-1; s=2*m.*(0.9.^m);%产生为污染的信号 x=s+d';%产生被噪音污染的信号 subplot(2,1,1); plot(m,d','r-',m,s,'g--',m,x,'b-.');

xlabel('时间序号n');ylabel('振幅'); legend('d[n]','s[n]','x[n]'); x1=[0 0 x];x2=[0 x 0];x3=[x 0 0]; y=(x1+x2+x3)/3; subplot(2,1,2); plot(m,y(2:R+1),'r-',m,s,'g--'); legend('y[n]','s[n]'); xlabel('时间序号n');ylabel('振幅'); 2. 振幅调制信号的产生核心程序:(由于要几个结果,因此利用subplot函数画图) %程序P1.6 %振幅调制信号的产生 n=0:100; m=0.1;fH=0.1;fL=0.01; m1=0.3;fH1=0.3;fL1=0.03; xH=sin(2*pi*fH*n); xL=sin(2*pi*fL*n); y=(1+m*xL).*xH; xH1=sin(2*pi*fH1*n); xL1=sin(2*pi*fL1*n); y1=(1+m1*xL).*xH; y2=(1+m*xL).*xH1; y3=(1+m*xL1).*xH; subplot(2,2,1); stem(n,y); grid; xlabel('时间序号n');ylabel('振幅');title('m=0.1;fH=0.1;fL=0.01;'); subplot(2,2,2); stem(n,y1); grid; xlabel('时间序号n');ylabel('振幅');title('m=0.3;fH=0.1;fL=0.01;'); subplot(2,2,3); stem(n,y2); grid; xlabel('时间序号n');ylabel('振幅');title('m=0.3;fH=0.3;fL=0.01;'); subplot(2,2,4); stem(n,y3); grid;

数字信号处理实验二

实验报告(本科) 学号 2015141443002 姓名柏冲 专业通信工程 日期 2017/12/4 实验题目时域采样和频域采样 一、实验目的

时域采样理论与频域采样理论是数字信号处理中重要的理论。要求掌握模拟信号采样前后频谱的变化,以及如何选择采样频率才能使得采样后的信号不丢失信息;要求掌握频率采样会引起时域周期化的概念,以及频域采样定理及其对频域采样点数选择的指导作用。 二、实验过程 附:源程序 (1)时域采样 Tp=64/1000; %观察时间Tp=64毫秒 %产生M长采样序列x(n) Fs=1000; T=1/Fs; M=Tp*Fs; n=0:M-1; A=444.128; a=pi*50*2^0.5; omega=pi*50*2^0.5; xnt=A*exp(-a*n*T).*sin(omega*n*T); Xk=T*fft(xnt,M); %M点FFT[(xnt)] subplot(3,2,1); stem(xnt,'.'); %调用编绘图函数stem绘制序列图 box on;title('(a) Fs=1000Hz'); k=0:M-1;fk=k/Tp; subplot(3,2,2);stem(fk,abs(Xk),'.');title('(a) T*FT[xa(nT)],Fs=1000Hz'); xlabel('f(Hz)');ylabel('幅度');axis([0,Fs,0,1.2*max(abs(Xk))]); % Fs=300Hz和 Fs=200Hz的程序与上面Fs=1000Hz完全相同。 Tp=64/1000; %观察时间Tp=64毫秒 %产生M长采样序列x(n) Fs=300; T=1/Fs; M=Tp*Fs; n=0:M-1; A=444.128; a=pi*50*2^0.5; omega=pi*50*2^0.5; xnt=A*exp(-a*n*T).*sin(omega*n*T); M1=fix(M); Xk=T*fft(xnt,M1); %M点FFT[(xnt)] subplot(3,2,3); stem(xnt,'.'); %调用自编绘图函数stem绘制序列图 box on;title('(b) Fs=300Hz'); k=0:M-1;fk=k/Tp; subplot(3,2,4);stem(fk,abs(Xk),'.');title('(b) T*FT[xa(nT)],Fs=300Hz'); xlabel('f(Hz)');ylabel('幅度');axis([0,Fs,0,1.2*max(abs(Xk))]); Tp=64/1000; %观察时间Tp=64毫秒 %产生M长采样序列x(n) Fs=200; T=1/Fs; M=Tp*Fs; n=0:M-1; A=444.128; a=pi*50*2^0.5; omega=pi*50*2^0.5; xnt=A*exp(-a*n*T).*sin(omega*n*T); M2=fix(M);

数字信号处理实验报告一

武汉工程大学 数字信号处理实验报告 姓名:周权 学号:1204140228 班级:通信工程02

一、实验设备 计算机,MATLAB语言环境。 二、实验基础理论 1.序列的相关概念 2.常见序列 3.序列的基本运算 4.离散傅里叶变换的相关概念 5.Z变换的相关概念 三、实验内容与步骤 1.离散时间信号(序列)的产生 利用MATLAB语言编程产生和绘制单位样值信号、单位阶跃序列、指数序列、正弦序列及随机离散信号的波形表示。 四实验目的 认识常用的各种信号,理解其数字表达式和波形表示,掌握在计算机中生成及绘制数字信号波形的方法,掌握序列的简单运算及计算机实现与作用,理解离散时间傅里叶变换,Z变换及它们的性质和信号的频域分

实验一离散时间信号(序列)的产生 代码一 单位样值 x=2; y=1; stem(x,y); title('单位样值 ') 单位阶跃序列 n0=0; n1=-10; n2=10; n=[n1:n2]; x=[(n-n0)>=0]; stem(n,x); xlabel('n'); ylabel('x{n}'); title('单位阶跃序列');

实指数序列 n=[0:10]; x=(0.5).^n; stem(n,x); xlabel('n'); ylabel('x{n}'); title('实指数序列');

正弦序列 n=[-100:100]; x=2*sin(0.05*pi*n); stem(n,x); xlabel('n'); ylabel('x{n}'); title('正弦序列');

随机序列 n=[1:10]; x=rand(1,10); subplot(221); stem(n,x); xlabel('n'); ylabel('x{n}'); title('随机序列');

数字信号处理实验一

实验一 离散时间信号分析 班级 信息131班 学号 201312030103 姓名 陈娇 日期 一、实验目的 掌握两个序列的相加、相乘、移位、反褶、卷积等基本运算。 二、实验原理 1.序列的基本概念 离散时间信号在数学上可用时间序列)}({n x 来表示,其中)(n x 代表序列的第n 个数字,n 代表时间的序列,n 的取值范围为+∞<<∞-n 的整数,n 取其它值)(n x 没有意义。离散时间信号可以是由模拟信号通过采样得到,例如对模拟信号)(t x a 进行等间隔采样,采样间隔为T ,得到)}({nT x a 一个有序的数字序列就是离散时间信号,简称序列。 2.常用序列 常用序列有:单位脉冲序列(单位抽样)) (n δ、单位阶跃序列)(n u 、矩形序列)(n R N 、实指数序列、复指数序列、正弦型序列等。 3.序列的基本运算 序列的运算包括移位、反褶、和、积、标乘、累加、差分运算等。 4.序列的卷积运算 ∑∞ -∞==-= m n h n x m n h m x n y )(*)()()()( 上式的运算关系称为卷积运算,式中代表两个序列卷积运算。两个序列的卷积是一个序列与另一个序列反褶后逐次移位乘积之和,故称为离散卷积,也称两序列的线性卷积。其计算的过程包括以下4个步骤。 (1)反褶:先将)(n x 和)(n h 的变量n 换成m ,变成)(m x 和)(m h ,再将)(m h 以纵轴为对称轴反褶成)(m h -。

(2)移位:将)(m h -移位n ,得)(m n h -。当n 为正数时,右移n 位;当n 为负数时,左移n 位。 (3)相乘:将)(m n h -和)(m x 的对应点值相乘。 (4)求和:将以上所有对应点的乘积累加起来,即得)(n y 。 三、主要实验仪器及材料 微型计算机、Matlab6.5 教学版、TC 编程环境。 四、实验内容 (1)用Matlab 或C 语言编制两个序列的相加、相乘、移位、反褶、卷积等的程序; (2)画出两个序列运算以后的图形; (3)对结果进行分析; (4)完成实验报告。 五、实验结果 六、实验总结

数字信号处理实验二

实验二离散时间系统的时域分析实验室名称: 实验时间:

六、实验记录(数据、图表、波形、程序等) Q2、1 程序代码: %产生输入信号 n = 0:100; s1 = cos(2*pi*0、05*n); %一个低频正弦 s2 = cos(2*pi*0、47*n); %一个高频正弦 x = s1+s2; %滑动平均滤波器的实现 M = input('Desired length of the filter = '); num = ones(1,M); y = filter(num,1,x)/M; clf; %显示输入与输出信号 subplot(2,2,1); plot(n, s1); axis([0, 100, -2, 2]); xlabel('Time index n'); ylabel('Amplitude'); title('Signal #1'); subplot(2,2,2); plot(n, s2); axis([0, 100, -2, 2]); xlabel('Time index n'); ylabel('Amplitude'); title('Signal #2'); subplot(2,2,3); plot(n, x); axis([0, 100, -2, 2]); xlabel('Time index n'); ylabel('Amplitude'); title('Input Signal'); subplot(2,2,4); plot(n, y); axis([0, 100, -2, 2]); xlabel('Time index n'); ylabel('Amplitude'); title('Output Signal'); axis; 显示结果:

数字信号处理实验三

实验三:离散LSI 系统的频域分析 一、实验内容 2、求以下各序列的z 变换: 12030() ()sin() ()sin()n an x n na x n n x n e n ωω-=== 程序清单如下: syms w0 n z a; x1=n*a^n;X1=ztrans(x1) x2=sin(w0*n);X2=ztrans(x2) x3= exp(-a*n)*sin(w0*n);X3=ztrans(x3) 程序运行结果如下: X1 =z/(a*(z/a - 1)^2) X2 =(z*sin(w0))/(z^2 - 2*cos(w0)*z + 1) X3 =(z*exp(a)*sin(w0))/(exp(2*a)*z^2 - 2*exp(a)*cos(w0)*z + 1) 3、求下列函数的逆z 变换 0 312342 1 1() () () ()() 1j z z z z X z X z X z X z z a z a z e z ω---= = = = ---- 程序清单如下: syms w0 n z a; X1=z/(z-a);x1=iztrans(X1) X2= z/(a-z)^2;x2=iztrans(X2) X3=z/ z-exp(j*w0);x3=iztrans(X3) X4=(1-z^-3)/(1-z^-1);x4=iztrans(X4) 程序运行结果如下: x1 =a^n x2 =n*a^n/a 课程名称 数字信号 实验成绩 指导教师 实 验 报 告 院系 信息工程学院 班级 学号 姓名 日期

x3 =charfcn[0](n)-iztrans(exp(i*w0),w0,n) x4 =charfcn[2](n)+charfcn[1](n)+charfcn[0](n) 4、求一下系统函数所描述的离散系统的零极点分布图,并判断系统的稳定性 (1) (0.3)()(1)(1) z z H z z j z j -= +-++ z1=[0,0.3]';p1=[-1+j,-1-j]';k=1; [b1,a1]=zp2tf(z1,p1,k); subplot(1,2,1);zplane(z1,p1); title('极点在单位圆外); subplot(1,2,2);impz(b1,a1,20); 由图可见:当极点位于单位圆内,系统的单位序列响应随着频率的增大而收敛;当极点位于单位圆上,系统的单位序列响应为等幅振荡;当极点位于单位圆外,系统的单位序列响应随着频率的增大而发散。由此可知系统为不稳定系统。 -1 -0.5 00.51 -2 -1.5-1-0.500.511.5 2Real Part I m a g i n a r y P a r t 极点在单位圆外 n (samples) A m p l i t u d e Impulse Response

数字信号处理实验二

对输入x[n]滤波,求得y1[n] 。y[n]和y1[n]有差别吗?为什么要使用对x[n]补零后得到的x1[n]作为输入来产生y1[n] ? 三、实验器材及软件 1?微型计算机1台 2. MATLAB 7.0 软件

四、实验原理 1.三点平滑滤波器是一个线性时不变的有限冲激响应系统,将输出延时一个抽样周期,可得到三点平滑滤波器的因果表达式,生成的滤波器表示为 y[n] 1 -(x[ n] x[n 1] x[n 2]) 3 归纳上式可得 1 M 1 y[n] x[n k] IVI k 0 此式表示了一个因果M点平滑FIR滤波器 2.对线性离散时间系统,若y1[n]和y2[n]分别是输入序列xqn]和X2[n]的响 应, 则输入 x[n] xdn] X2【n] 的输出响应为 y[n] yd n] y2【n] 则系统称为线性系统。 3.对于离散时不变系统,若y1[n]是x1[n]的响应,则输入 x[n]=x 1[n-n o] 的输出响应为 y[n]=y qn-n o] 则称系统为时不变系统。 五、实验步骤 2.1 首先利用MATLA产生一个高频正弦信号和一个低频正弦信号,利用两个信 个信号,再对输出信号进行分析。

2.2 在2.1的基础上编写num=ones[1-1],运行程序得出结论。 2.4 分别用扫频信号通过2.1、2.2的系统,进行比较分析。 2.7 分别计算出y1[n]和y2[n],得到yt[n];再利用filter 函数求得y[n],计算差值输出,比较y[n]和yt[n]。 2.20根据impz函数的调用方式,得到 num = [0.9 -0.45 0.35 0.002] den = [1 0.71 -0.46 -0.62] ,再调用impz 函数,画出图像。 2.23首先产生序列x[n],把它作为四阶系统的输入,生成y[n]。然后将同样的输入x[n]应用到第一级得到y1[n]。接着用相同的方法得到y2[n]。最后求得两者的差,并画出图像。 2.28分别用conv函数和filter 函数求得输出,进行图像比较。 六、实验记录(数据、图表、波形、程序等) 2.1 对M=2运行上述程序,生成输入x[n]=s1[n]+s2[n] 的输出信号。输入x[n] 的哪个分量被该离散时间系统抑制? % Program P2_1 clf;

数字信号处理实验 (2)

实验二:时域采样与频域采样 姓名李想学号201400800718 一、实验内容及步骤 (1)时域采样理论的验证 程序清单及图形 function [ output_args ] = AA( ~ ) Tp=64/1000;M=64; Fs=1000;T=1/Fs; k=0:M-1;fk=Fs*k/M; N=Tp*Fs;n=0:N-1; A=444.128;alph=pi*50*2^0.5;omega0=pi*50*2^0.5; xn=A*exp(-alph*n*T).*sin(omega0*n*T); subplot(3,2,1);stem(n,xn);title('Fs=1000HZ'); XK=T*fft(xn,M);subplot(3,2,2);plot(fk,abs(XK)); title('T*FT[xa(nt)],Fs=1000HZ'); Fs=300;T=1/Fs;fk=Fs*k/M;N=Tp*Fs;n=0:N-1; xn=A*exp(-alph*n*T).*sin(omega0*n*T); subplot(3,2,3);stem(n,xn);title('Fs=300HZ'); XK=T*fft(xn,M);subplot(3,2,4);plot(fk,abs(XK)); title('T*FT[xa(nt)Fs=300HZ,]'); Fs=200;T=1/Fs;fk=Fs*k/M;N=Tp*Fs;n=0:N-1; xn=A*exp(-alph*n*T).*sin(omega0*n*T); subplot(3,2,5);stem(n,xn);title('Fs=200HZ'); XK=T*fft(xn,M);subplot(3,2,6);plot(fk,abs(XK)); title('T*FT[xa(nt)Fs=200HZ,]'); end

2015年西南交通大学数字信号处理实验2

数字信号处理MATLAB上机实验 第三章 3-23已知序列x(n)={1, 2, 3, 3, 2, 1} 1)求出x(n)的傅里叶变换X(ejω),画出幅频特性和相频特性曲线(提示:用1024点FFT近似X(ejω)); 2)计算x(n)的N(N≥6)点离散傅里叶变换X(k),画出幅频特性和相频特性曲线; 3)将X(ejω)和X(k)的幅频特性和相频特性曲线分别画在同一幅图中,验证X(k)是X(ejω)的等间隔采样,采样间隔为2π/N; 4)计算X(k)的N点IDFT,验证DFT和IDFT的惟一性。 实验分析 (1)题用1024点DFT近似x(n)的傅里叶变换。 (2)题用36点DFT。 (4)题求傅里叶反变换验证IDFT的惟一性。 实验代码及截图 1到3问 xn=[1 2 3 3 2 1]; Xen=fft(xn,1024); n1=0:length(Xen)-1; amp = abs(Xen); phi = angle(Xen); Xkn=fft(xn,36); n2=0:length(Xkn)-1; amp2 = abs(Xkn); phi2 = angle(Xkn); subplot(221);plot(n1,amp) title('Xejw幅频特性');xlabel('n');ylabel('Amp') subplot(222);plot(n1,phi) title('Xejw相频特性');xlabel('n');ylabel('Phi') subplot(223);stem(n2,amp2,'.') title('Xk幅频特性');xlabel('n');ylabel('Amp') subplot(224);stem(n2,phi2,'.') title('Xk相频特性');xlabel('n');ylabel('Phi') 截图如下

数字信号处理实验报告2

Name: Section: Laboratory Exercise 2 DISCRETE-TIME SYSTEMS: TIME-DOMAIN REPRESENTATION 2.1 SIMULATION OF DISCRETE-TIME SYSTEMS Project 2.1The Moving Average System A copy of Program P2_1 is given below: % Program P2_1 % Simulation of an M-point Moving Average Filter % Generate the input signal n = 0:100; s1 = cos(2*pi*0.05*n); % A low-frequency sinusoid s2 = cos(2*pi*0.47*n); % A high frequency sinusoid x = s1+s2; % Implementation of the moving average filter M = input('Desired length of the filter = '); num = ones(1,M); y = filter(num,1,x)/M; % Display the input and output signals clf; subplot(2,2,1); plot(n, s1); axis([0, 100, -2, 2]); xlabel('Time index n'); ylabel('Amplitude'); title('Signal #1'); subplot(2,2,2); plot(n, s2); axis([0, 100, -2, 2]); xlabel('Time index n'); ylabel('Amplitude'); title('Signal #2'); subplot(2,2,3); plot(n, x); axis([0, 100, -2, 2]); xlabel('Time index n'); ylabel('Amplitude'); title('Input Signal'); subplot(2,2,4); plot(n, y); axis([0, 100, -2, 2]); xlabel('Time index n'); ylabel('Amplitude'); title('Output Signal'); axis;

数字信号处理实验二

实验二 快速傅里叶变换(FFT)及其应用 一、思考题 (1) 实验中的信号序列 ()c x n 与()d x n 在单位圆上的z 变换频谱 ()()c j j d X e X e ωω和会相同不?如果不同,说出哪一个低频分量更多一些,为什 么? 答:设j Z r e ω=? ()()n n G z g n z ∞-=-∞=?∑因为为单位圆,故r=1、因为 ()()j j n n G e g n e ω ω∞-=-∞=?∑,故3723456704()(8)23432j j n j n j j j j j j j c n n X e ne n e e e e e e e e ωωωωωωωωωω---------===+-=++++++∑∑ 7235670()(4)43223j j n j j j j j j d n X e n e e e e e e e ωωωωωωωω-------==-=+++---∑比较可知频谱不相同,()c X n 的低频分量多。 (2) 对一个有限长序列进行DFT 等价于将该序列周期延拓后进行DFS 展开,因为DFS 也只就是取其中一个周期来运算,所以FFT 在一定条件下也可以用以分析周期信号序列。如果实正弦信号()sin(2),0.1x n fn f π== 用16点FFT 来做DFS 运算,得到的频谱就是信号本身的真实谱不?为什么? 答:针对原来未经采样的连续时间信号来说,FFT 做出来的永远不会就是信号本身的真实频谱,只能够就是无限接近。FFT 频谱泄露问题就是一定会存在的,因为毕竟采样率再高,也不能完全达到原来的连续时间信号准确。原题的采样率就是1/10,就就是将2*pi 分成10份,即每个正弦波周期进行10次采样,这样的采样率很低,而最后您只截取16个点来做分析,泄露一般会挺严重,瞧到的频谱,应该就是一个上头尖,下面慢慢变宽的尖锥形,而纯正的正弦波的理想频谱应该就是在某频点只有一个尖峰。 二. 实验原理:

数字信号实验二

%ep264.m: 例2.6.4求解程序如图1 B=[1,0,0,0,0,0,0,0,-1];A=1; subplot(2,2,1);zplane(B,A); [H,w]=freqz(B,A); subplot(2,2,2);plot(w/pi,abs(H)); xlabel('\omega/\pi');ylabel('|H(e^j^\omega)|'); subplot(2,2,3);plot(w/pi,angle(H)); xlabel('\omega/\pi');ylabel('phi(\omega)'); 图1 >> %ep267.m: 例2.6.7绘制程序如图2 a=0.2; B=[1,0,0,0,0,0,0,0,-1];A=[1,0,0,0,0,0,0,0,-a]; subplot(2,2,1);zplane(B,A);title('(a)零极点分布(a=0.2,N=8)') [Hk,w]=freqz(B,A,1024); subplot(2,2,2);plot(w/pi,abs(Hk)/max(abs(Hk))); xlabel('\omega/\pi');axis([0,1,0,1.5]);title('(b)幅频特性(a=0.2,N=8)'); 图2 %例3.1.2程序ep312.m 如图3 xn=[1,1,1,1]; Xk16=fft(xn,16);

Xk32=fft(xn,32); M=16;N=32; k=0:M-1; wk=2*k/M; subplot(3,2,1);stem(wk,abs(Xk16),'.') title('(a)Xn的16点DFF的幅频特性');xlabel('\omega/\pi');ylabel('幅度') subplot(3,2,2);stem(wk,angle(Xk16),'.') title('(b)16点DFF的相频特性');xlabel('\omega/\pi');ylabel('相位') axis([0,2,-3,3]); k=0:N-1; wk=2*k/N; subplot(3,2,3);stem(wk,abs(Xk32),'.') title('(c)Xn的32点DFF的幅频特性');xlabel('\omega/\pi');ylabel('幅度') subplot(3,2,4);stem(wk,angle(Xk32),'.') title('(d)32点DFF的相频特性');xlabel('\omega/\pi');ylabel('相位') axis([0,2,-3,3]); 图3 %例3.3.1 ep331.m 如图4 M=26,N=32,n=0:M; xa=0:M/2;xb=ceil(M/2)-1:-1:0;xn=[xa,xb]; B=[xa,xb];A=1; [H,w]=freqz(B,A); subplot(3,2,1);plot(w/pi,abs(H)); xlabel('\omega/\pi');ylabel('|X(e^j^\omega)|'); n=0:length(xn)-1; subplot(3,2,2);stem(n,xn,'.'); xlabel('n');ylabel('x(n)'); X32k=fft(xn,32); x32n=ifft(X32k); X16k=X32k(1:2:N);

数字信号处理实验2

数字信号处理实验2 ——离散系统频率响应和零极点分布姓名:李倩 学号: 班级:通信四班 指导教师:周争

一.实验原理 离散时间系统的常系数线性差分方程: 求一个系统的频率响应: H(e^jw)是以2pi为周期的连续周期复函数,将其表示成模和相位的形式: H(e^jw)=|H(e^jw)|*e^(jarg[H(e^jw)]) 其中|H(e^jw)|叫做振幅响应(幅度响应),频率响应的相位arg[H(e^jw)]叫做系统的相位响应。 将常系数线性差分方程的等式两边求FT,可以得到系统的频率响应与输入输出的频域关系式: H(e^jw)=Y(e^jw)/X(e^jw) 将上式中的e^jw用z代替,即可得系统的系统函数: H(z)=Y(z)/X(z) H(z)=∑h(n)*z^(-n)(n的取值从负无穷到正无穷) 将上式的分子、分母分别作因式分解,可得到LTI系统的零极点增益表达式为:

H(z)=g∏(1-zr*z^(-1))/∏(1-pk*z^(-1)) 其中g为系统的增益因子,pk(k=1,2,3,…,N)为系统的极点,zr(r=1,2,3,…,M)为系统的零点。通过系统的零极点增益表达式,可以判断一个系统的稳定性,对于一个因果的离散时间系统,若所有的极点都在单位圆内,则系统是稳定的。 二.实验内容 一个LTI离散时间系统的输入输出差分方程为 y(n)-1.6y(n-1)+1.28y(n-2)=0.5x(n)+0.1x(n-1) (1)编程求此系统的单位冲激响应序列,并画出其波形。 (2)若输入序列x(n)=&(n)+2&(n-1)+3&(n-2)+4&(n-3)+5& (n-4),编程求此系统输出序列y(n),并画出其波形。 (3)编程得到系统频响的幅度响应和相位响应并画图。 (4)编程得到系统的零极点分布图,分析系统的因果性和稳定性。三.程序与运行结果 (1)编程求此系统的单位冲激响应序列,并画出其波形。 程序: clear; N=100; b=[0.5 0.1]; a=[1 -1.6 1.28];

数字信号处理实验

实验一: 系统及响应时域采样及频域采样 1. 实验目的 (1)掌握用卷积求系统响应及卷积定理的验证; (2)掌握连续信号经理想采样前后的频谱变化关系, 加深对时域采样定理的理解。 (3)掌握频域采样引起时域周期化概念, 加深对频域采样定理的理解。 (4) 掌握序列傅里叶变换的计算机实现方法, 利用序列的傅里叶变换对连续信号、离散信号及系统响应进行频域分析。 3. 实验内容及步骤 (1) 认真复习卷积定理、 时域采样和频域采样理论。 (2) 编制实验用主程序及相应子程序。 ①系统单位脉冲响应序列产生子程序。 有限长序列线性卷积子程序, 用于完成两个给定长度的序列的卷积。 可以直接调用MATLAB 语言中的卷积函数conv 。 conv 用于两个有限长度序列的卷积,它假定两个序列 都从n=0开始。调用格式如下: y=conv (x, h) ② 卷积定理的验证。 (3)时域采样定理的验证:信号产生子程序, 用于产生实验中要用到的下列信号序列: x a (t)=Ae -at sin(Ω0t)u(t) 进行采样, 可得到采样序列 x a (n)=x a (nT)=Ae -anT sin(Ω0nT)u(n), 0≤n<50 其中A 为幅度因子, a 为衰减因子, Ω0是模拟角频率, T 为采样间隔。 这些参数都要在实验过程中由键盘输入, 产生不同的x a (t)和x a (n)。 >> %1时域采样序列分析 A=400;a=200;w=200; n=0:50-1;fs=1000; xa=A*exp((-a)*n/fs).*sin(w*n/fs); k=-200:200;w=(pi/100)*k; Xk=fft(xa,length(k));magX=abs(Xk);angX=angle(Xk); subplot(2,1,1); stem(n,xa,'.');xlabel('n');ylabel('xa(n)'); title('信号的类型'); )()(10n R n h a =) 3()2(5.2)1(5.2)()(-+-+-+=n n n n n h b δδδδ1,,2,1,0,)()()(-==M k e H e X e Y k k k j j a j ωωω

数字信号处理实验1

第一题 n=0:299; x=cos(20*pi*n/256)+cos(200*pi*n/256); num1=[0.5 0.27 0.77]; den1=[1]; num2=[0.45 0.5 0.45]; den2=[1 -0.53 0.46]; y1=filter(num1,den1,x); y2=filter(num2,den2,x); subplot(3,1,1); stem(n,x); ylabel('信号幅度'); subplot(3,1,2); stem(n,y1); ylabel('信号幅度'); subplot(3,1,3); stem(n,y2); ylabel('信号幅度');

第二题 N=20; num1=[0.5 0.27 0.77]; den1=[1 0 0]; num2=[0.45 0.5 0.45]; den2=[1 -0.53 0.46]; y1=impz(num1,den1,N); y2=impz(num2,den2,N); subplot(2,1,1); stem(y1); xlabel('时间序号n'); ylabel('信号1幅度'); title('信号1冲激响应'); subplot(2,1,2); stem(y2); xlabel('时间序号n'); ylabel('信号2幅度'); title('信号2冲激响应'); grid;

第三题(1) n=0:299; D=50; a=3; b=-2; x=a*cos(20/256*pi*n)+b*cos(200/256*pi*n); xd=[zeros(1,D) x]; num=[0.45 0.5 0.45]; den=[1 -0.53 0.46]; ic=[0 0]; y=filter(num,den,x,ic); yd=filter(num,den,xd,ic); N=length(y); d=y-yd(1+D:N+D); subplot(3,1,1); stem(n,y); ylabel('信号2幅度'); title('输出y[n]'); grid; subplot(3,1,2); stem(yd); ylabel('信号2幅度'); title('由于输入延时而产生的输出yd[n]'); subplot(3,1,3); stem(n,d); xlabel('时间序号n'); ylabel('信号幅度n'); title('差值信号'); grid;

数字信号处理实验二

实验二 信号的分析与处理综合实验 一、实验目的 目的:综合运用数字信号处理的理论知识进行信号的采样,重构,频谱分析和滤波器的设计,通过理论推导得出相应结论,再利用Matlab作为编程工具进行计算机实现,从而加深对所学知识的理解,建立概念。 二、基本要求 1.掌握数字信号处理的基本概念、基本理论和基本方法; 2.学会MA TLAB的使用,掌握MA TLAB的程序设计方法; 3.掌握用MA TLAB设计简单实验验证采样定理的方法; 4.掌握在Windows环境下语音信号采集的方法; 5.学会用MA TLAB对信号进行频谱分析; 6.掌握MA TLAB设计FIR和IIR数字滤波器的方法; 三、实验内容 1.利用简单正弦信号设计实验验证采样定理: (1)Matlab产生离散信号的方法,作图的方法,以及基本运算操作 (2)对连续正弦信号以不同的采样频率作采样 (3)对采样前后信号进行傅立叶变换,并画频谱图 (4)分析采样前后频谱的有变化,验证采样定理。 掌握画频谱图的方法,深刻理解采样频率,信号频率,采样点数,频率分辨率等概念 2.真实语音信号的采样重构:录制一段自己的语音信号,并对录制的信号进行采样;画出采样前后语音信号的时域波形和频谱图;对降采样后的信号进行插值重构,滤波,恢复原信号。 (1)语音信号的采集 (2)降采样的实现(改变了信号的采样率) (3)以不同采样率采样后,语音信号的频谱分析 (4)采样前后声音的变化 (5)对降采样后的信号进行插值重构,滤波,恢复原信号 3.带噪声语音信号的频谱分析 (1)设计一频率已知的噪声信号,与实验2中原始语音信号相加,构造带噪声信号 (2)画出原始语音信号和加噪声后信号,以及它们的频谱图 (3)利用频谱图分析噪声信号和原语音信号的不同特性

数字信号处理实验一

实验一 一.基本信号产生: 1.阶跃信号 clc clear t=-2:0.02:6; x=(t>=0); plot(t,x); axis([-2,6,0,1.2]); 2.指数信号 clc clear t=0:0.02:6; x=exp(-1*t); plot(t,x);

3.正弦信号 clc; clear; t=-2:0.001:6; x=2*sin(2*pi*4*t+pi/6); plot(t,x);

4.连续矩形脉冲信号 clc; clear; t=-2:0.02:6; x=rectpuls(t-2,4); plot(t,x); 5.连续周期矩形脉冲信号clc; clear; t=-2:0.02:6; y=square(2*pi*2*t); plot(t,y); axis([0,2.5,-1.5,1.5]);

6.连续抽样信号 clc; clear; t=-10:0.02:10; x=sinc(t/pi); plot(t,x); 7.单位脉冲序列 clc; clear; x=[zeros(1,7),1,zeros(1,17)]; stem([-4:20],x);

8.单位阶跃序列 clc; clear; t=-4:20; x=[zeros(1,7),ones(1,18)]; stem(t,x); 9.指数序列 clc; clear; t=-4:20; x=0.3*0.5.^t; stem(t,x);

clc; clear; k=-10:10; x=sin(pi/3*k+pi/5); stem(k,x); 11.离散周期矩形波序列clc; clear; k=-10:0.5:10; x=square(pi/3*k); stem(k,x);

数字信号处理实验2 答案

实验二 离散时间信号的时域分析 1.实验目的 (1)学习MA TLAB 软件及其在信号处理中的应用,加深对常用离散时间信号的理解。 (2)利用MA TLAB 产生常见离散时间信号及其图形的显示,进行简单运算。 (3)熟悉MA TLAB 对离散信号的处理及其应用。 2.实验原理 离散时间信号是时间为离散变量的信号。其函数值在时间上是不连续的“序列”。 (1)单位抽样序列 ???=0 1)(n δ 0≠=n n 如果序列在时间轴上面有K 个单位的延迟,则可以得到)(k n -δ,即: 1,()0,n k n k n k d ì=??-=í?1?? 该序列可以用MA TLAB 中的zeros 函数来实现。 (2)正弦序列 )/2sin()(?π+=Fs fn A n x 可以利用sin 函数来产生。 (3)指数序列 ()(),n x n a n a R e = 在MA TLAB 中通过:0:1;n N =-和.^;x a n =来实现。 3.实验内容及其步骤 (1)复习有关离散时间信号的有关内容。 (2)通过程序实现上述几种信号的产生,并进行简单的运算操作。 ① 单位抽样序列 ???=0 1)(n δ 0≠=n n

② 如果序列在时间轴上面有K 个单位的延迟,则可以得到)(k n -δ,即: 1,()0,n k n k n k d ì=? ?-=í ?1?? clf; n = -10:20; u = [zeros(1,10) 1 zeros(1,20)]; xlabel('Time index n');ylabel('Amplitude'); stem(n,u); title('Unit Sample Sequence'); axis([-10 20 0 1.2]);

实验二 数字信号处理

实验二用FFT对信号作频谱分析 一、实验目的与要求 学习用FFT对连续信号和时域离散信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便正确应用FFT。 一、实验原理 用FFT对信号作频分析是学习数字信号处理的重要内容,经常需要进行分析的信号是模拟信号的时域离散信号。对信号进行谱分析的重要问题是频谱分辨率D和分析误差。频谱分辨率直接和FFT的变换区间N有关,因为FFT能够实现的频率分辨率是2π/N,因此要求2π/N 小于等于D。可以根据此式选择FFT的变换区间N。误差主要来自于用FFT作频谱分析时,得到的是离散谱,而信号(周期信号除外)是连续谱,只有当N较大时,离散谱的包络才能逼近连续谱,因此N要适当选择大一些。 二、实验步骤及内容 (1)对以下序列进行FFT分析: x1(n)=R4(n) n+1 0≤n≤3 x2(n)={ 8-n 4≤n≤7 0 其它n 4-n 0≤n≤3 X3(n)={ n-3 4≤n≤7 0 其它n 选择FFT的变换区间N为8和16两种情况进行频谱分析,分别打印出幅频特性曲线,并进行讨论、分析与比较 xn1=[1 1 1 1]; Xk18=fft(xn1,8); yn11=abs(Xk18); n11=0:length(yn11)-1; Xk116=fft(xn1,16); yn12=abs(Xk116); n12=0:length(yn12)-1; n=0:3; x21=n+1; x31=4-n; n=4:7; x22=8-n; x32=n-3; xn2=[x21,x22]; Xk28=fft(xn2,8); yn21=abs(Xk28); n21=0:length(yn21)-1; Xk216=fft(xn2,16); yn22=abs(Xk216);

相关文档