数字信号处理实验讲义
数字信号处理实验讲义

数字信号处理实验指导书淮北煤炭师范学院物理与电子信息学院电子技术实验室目录实验一数字信号处理系统结构和编程 (1)实验二用FFT作谱分析 (4)实验三IIR滤波器的设计 (10)实验四FIR滤波器的设计 (17)附录一 (24)附录二 (26)附录三 (31)实验一数字信号处理系统结构和编程一、实验目的1.学习C语言的编程;2.掌握在CCS环境下的C程序设计方法;3.学会使用C和汇编语言混合编程;4.熟悉用C语言开发DSP程序的流程。
二、实验设备计算机,仿真器,THRS-1实验箱三、实验步骤与内容1.连接好DSP开发系统,实验箱上电,运行CCS;2.按流程图编写C程序,实现所要求的功能;3.例程序操作说明。
启动CCS 2.0,用Project/Open打开“DSP54X-01”目录下的“DSP54X01.pjt”工程文件,双击“DSP54X01.pjt”及“Source”可查看各源程序;并加载“DSP54X01.out”;单击“Run”运行程序;可以观察到D8指示灯闪烁;用View/Graph/Time/Frequency打开一个图形观察窗口;设置该观察图形窗口变量及参数;观察变量为x,长度为500,数值类型为16位有符号整型变量;如下图所示,图中下半部分为观察图形窗口的设置,上半部分为观察的图形。
四、程序框图五、实验说明CCS包含C编译器,支持标准C以及C和汇编混合编程。
C编译器包括三个功能模块:语法分析、代码优化和代码产生,如下图所示。
其中,语法分析(Parser)完成C语法检查和分析;代码优化(Optimizer)对程序进行优化,以便提高效率;代码产生(Code Generator)将C程序转换成C54x的汇编源程序。
本实验通过一些对数组及数据指针的基本操作,让实验者能够对使用C语言在CCS环境下编程有一个一目了然的认识。
并使用汇编语句,以体会两者综合运用时的优越性。
实验源程序如下:#include <math.h>#define pi 3.1415926#define N 500void main(){ int i,j;int *p;int x[500];for(i=0;i<N;i++)x[i]=0; for(i=0;i<N;i++){ x[i]=(int)100*sin(2*pi*i/250);}p=(int *)0x100;for(i=0;i<N;i++){ *p=x[i];p++ ;}for(;;){ asm(" rsbx xf");for(i=0;i<30000;i++)for(j=0;j<10;j++){ asm(" nop");asm(" nop");}asm(" ssbx xf");for(i=0;i<30000;i++)for(j=0;j<10;j++){asm(" nop");asm(" nop");}}}实验二用FFT作谱分析一、实验目的1.加深对DFT算法原理和基本性质的理解;2.熟悉FFT算法原理和FFT子程序的应用;3.学习用FFT对连续信号和时域信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便在实际中正确应用FFT。
数字信号处理讲义

在数值上它等于信号的采样值,即
x(n)=xa(nT),
自动化系
-∞<n<∞ (1.2.2)
信号随n的变化规律表示
自动化系
1.2.1 常用的典型序列
1. 单位采样序列δ(n)
1, n 0 ( n) (1.2.3) 0, n 0 单位采样序列也可以称为单位脉冲序列,特点是 仅在n=0时取值为1,其它均为零。它类似于模拟信号 和系统中的单位冲激函数δ(t),但不同的是δ(t)在t=0时, 取值无穷大,t≠0时取值为零,对时间t的积分为1。单 位采样序列和单位冲激信号如图1.2.1所示。
fs
(1.2.11)
自动化系
6. 复指数序列
x(n) e ( j0 ) n
式中ω0为数字域频率,设σ=0,用极坐标和实部虚 部表示如下式:
x ( n ) e j 0 n
x(n)=cos(ω0n)+jsin(ω0n)
由于n取整数,下面等式成立: e j(ω0+2πM)n= e jω0n, M=0,±1,±2…
自动化系
1.3.2 时不变系统
如果系统对输入信号的运算关系T[·]在整个运 算过程中不随时间变化,或者说系统对于输入信号的 响应与信号加于系统的时间无关,则这种系统称为时 不变系统,用公式表示如下: y(n) = T[x(n)] y(n-n0) = T[x(n-n0)] (1.3.5)
自动化系
例1.3.2
值要保证N是最小的正整数,满足这些条件,正弦序列 才是以N为周期的周期序列。具体正弦序列有以下三种
情况:
(1) 当2π/ω0为整数时,k=1,正弦序列是以2π/ ω0 为周期的周期序列。例如sin(π/8)n, ω0 =π/8,2π/ ω0 =16,该正弦序列周期为16。
数字信号处理实验讲义(修订版)

数字信号处理实验指导书(2009版)宋宇飞编南京工程学院目录实验一信号、系统及系统响应 (1)一、实验目的 (1)二、实验原理与方法 (1)三、实验内容及步骤 (4)四、实验思考 (4)五、参考程序 (4)实验二离散时间傅里叶变换DTFT及IDTFT (9)一、实验目的 (9)二、实验原理与方法 (9)三、实验内容及步骤 (9)四、实验思考 (10)五、参考程序 (10)实验三离散傅里叶变换DFT及IDFT (12)一、实验目的 (12)二、实验原理与方法 (13)三、实验内容及步骤 (14)四、实验思考 (14)五、参考程序 (14)实验四用FFT做频谱分析 (17)一、实验目的 (17)二、实验原理与方法 (17)三、实验内容及步骤 (19)四、实验思考 (20)五、参考程序 (21)实验五用双线性变换法设计IIR数字滤波器 (25)一、实验目的 (25)二、实验原理与方法 (25)三、实验内容及步骤 (27)四、实验思考 (27)五、参考程序 (27)实验六用窗函数法设计FIR数字滤波器 (29)一、实验目的 (29)二、实验原理与方法 (29)三、实验内容及步骤 (33)四、实验思考 (34)五、参考程序 (34)附录一滤波器设计示例 (38)一、Matlab设计IIR基本示例 (38)二、Matlab设计IIR高级示例 (42)附录二部分习题参考答案 (50)习题一(离散信号与系统) (50)习题二(离散傅里叶变换及其快速算法) (51)习题三(IIR滤波器设计) (53)习题四(FIR滤波器) (54)习题五(数字信号处理系统的实现) (56)附录三相关MATLAB习题及答案 (57)第1章离散时间信号与系统 (57)第2章离散傅里叶变换及其快速算法 (60)第3章无限长单位脉冲响应(IIR)滤波器的设计方法 (63)第4章有限长单位脉冲响应(FIR)滤波器的设计方法 (67)第5章数字信号处理系统的实现 (69)第6章多采样率信号处理 (73)实验一 信号、系统及系统响应一、实验目的1、掌握时域离散信号的表示及产生方法;2、掌握时域离散信号简单的基本运算方法;3、掌握离散系统的响应特点。
数字信号处理实验讲义

数字信号处理实验讲义实验一序列、频谱、卷积一、实验目的1.掌握序列的输入方法;2.熟悉不同序列的特征;3.了解确定性信号谱分析的方法;4.验证卷积的计算过程;二、实验要求1.利用matlab程序,生成几种常用的序列,如矩形序列,单位脉冲序列;2.绘制图形,观察序列特征;3.研究其频率特性,绘制图形,观察频率响应特征;4.利用matlab程序,验证卷积的过程;三、实验步骤1.矩形序列(1)生成长度为N的矩形序列,观察并记录生成的图形;n=1:50x=sign(sign(10-n)+1);close all;subplot(3,1,1);stem(x);title('单位矩形信号序列');(2)研究其频率特性,()∑∞-∞=-=n nj Nj en R e H ωω)(,分别研究其幅频特性和相频特性,观察并记录生成的图形;k=-25:25;X=x*(exp(-j*pi/25)).^(n'*k); magX=abs(X); %绘制x(n)的幅度谱subplot(3,1,2);stem(magX);title('单位矩形信号的幅度谱'); angX=angle(X); %绘制x(n)的相位谱subplot(3,1,3);stem(angX) ; title ('单位矩形信号的相位谱')2.单位脉冲序列(1)生成单位脉冲序列,观察并记录生成的图形;n=1:50; %定义序列的长度是50x=zeros(1,50); %注意:MATLAB中数组下标从1开始x(1)=1;close all;subplot(3,1,1);stem(x);title('单位冲击信号序列');(2) 研究其频率特性,()∑∞-∞=-=n nj j en x e H ωω)(,分别研究其幅频特性和相频特性,观察并记录生成的图形;k=-25:25;X=x*(exp(-j*pi/12.5)).^(n'*k); magX=abs(X); %绘制x(n)的幅度谱subplot(3,1,2);stem(magX);title('单位冲击信号的幅度谱'); angX=angle(X); %绘制x(n)的相位谱subplot(3,1,3);stem(angX) ; title ('单位冲击信号的相位谱')3.卷积过程∑∞-∞=-= =mmnhmxnhnxny)()()(*)()(,n=1:50; %定义序列的长度是50hb=zeros(1,50); %注意:MATLAB中数组下标从1开始hb(1)=1;hb(2)=2.5;hb(3)=2.5;hb(4)=1;close all;subplot(3,1,1);stem(hb);title('系统hb[n]');m=1:50; %定义序列的长度是50A=444.128; %设置信号有关的参数a=50*sqrt(2.0)*pi;T=0.001; %采样率w0=50*sqrt(2.0)*pi;x=A*exp(-a*m*T).*sin(w0*m*T);subplot(3,1,2);stem(x);title('输入信号x[n]');y=conv(x,hb);subplot(3,1,3);stem(y);title('输出信号y[n]');四、实验报告要求1.写出生成对应序列的matlab程序,并分析;2.记录生成的图形;3.描述对应的序列和频率特性的特征;4.验证卷积计算结果;五、思考:1.如何生成实指数序列?写出对应的matlab程序a1=2n=1:50x1=(a1.^n)subplot(1,1,1)stem(x1);title('实指数序列')2.编写程序验证卷积定律。
数字信号处理实验讲义

实验一 连续时间信号的时域取样与重建实验目的:1、 掌握连续时间信号的离散化过程,深刻理解时域取样定理;2、 掌握由取样序列恢复原连续信号的基本原理与实现方法。
实验原理:取样解决的是把连续信号变成适于计算机处理的离散信号的问题。
取样就是从连续信号)(t f 中取得一系列的离散样点值。
1、理想取样设待取样信号为)(t x ,理想取样表示成:)()()(t t x t x T s δ= 其中 ∑-=nT nT t t )()(δδT 为取样周期(间隔),T x s /1=为取样频率,T s /2πω=为取样角频率。
由傅里叶变换频域卷积定理,得取样信号的频谱)(ωj X s :∑-=ns s n j X T j X ))((1)(ωωω 取样定理给出了取样信号包含原连续信号的全部信息的最大取样间隔。
时域取样定理的内容是:若带限信号)(t f 的最高角频率为m ω,其频谱函数在m ωω>||各处为零;对该信号以m f T 21≤的取样间隔(即取样频率为m s f f 2≥)进行等间隔取样时,则信号)(t f 可以由取样点值唯一地恢复。
其中πω2)(m m HZ f =。
在实际取样时,关键是确定信号的最高频率。
如果信号频率很宽或无限宽,无法满足取样定理,会引起频谱混叠误差,可以通过提高取样率减少误差。
例:对信号)*2*20cos()*2*10cos()(t t t x ππ+=进行取样。
解:信号最高频率为20HZ 取样频率为80HZ Fs=80;%sampling frequencyT=0:1/Fs:1;%one second worth of samples xn=cos(2*pi*10*t)+cos(2*pi*20*t);2、信号的重建当以满足取样定理的速率对信号)(t x 取样后,由取样信号)(t x s 恢复原信号)(t x 的过程称为重建。
用一个截止频率为2s c ωω=的理想低通滤波器对)(t x s 进行滤波,就能从)(t x s 中将原信号)(t x 恢复。
数字信号处理实验讲义2016-9-2

实验一 常见离散信号产生和实现一、实验目的1.加深对常用离散信号的理解;2.掌握matlab 中一些基本函数的建立方法。
二、实验原理1.单位抽样序列如果)(n δ在时间轴上延迟了k 个单位,得到)(k n -δ即:2.单位阶跃序列3.正弦序列)/2sin()(ϕπ+=Fs fn A n x在MATLAB 中,n=0:N-1;x=A*sin(2*pi*f 0*n/fs+phi)4.复指数序列n j e r n x ϖ⋅=)(在MATLAB 中,n=0:N-1;x=r*exp(j*w*n)5.指数序列n a n x =)(在MATLAB 中,n=0:N-1;x=a.^n三、实验内容实现和图形生成1.五种基本函数的生成程序如下:(1)单位抽样序列方法一:% 单位抽样序列和延时的单位抽样序列n=0:10; x1=[1 zeros(1,10)];x2=[zeros(1,5) 1 zeros(1,5)];subplot(1,2,1);stem(n,x1,'.');xlabel ('时间序列n');ylabel('振幅');title('单位抽样序列x1');grid on;subplot(1,2,2);stem(n,x2,'.'); xlabel('时间序列n');ylabel('振幅');title('延时了5的单位抽样序列'); grid on;方法二:先在matlab中定义单位抽样序列:function [x,n]=impseq(n1,n2,n0)n=[n1:n2];x=[(n-n0)==0]; /n等于n0时1在运行命令:[x,n]=impseq(-5,5,3)stem(n,x,'.');xlabel('n');title('单位抽样序列x');grid(2)单位阶跃序列方法一:n=-4:6;u=[zeros(1,4) ones(1,7)];stem(n,u,'.');xlabel ('时间序列n');ylabel('振幅');title('单位阶跃序列');grid 所得的图形如下所示:方法二;先在matlab中定义单位阶跃序列:function [x,n]=stepseq(n1,n2,n0)n=[n1:n2];x=[(n-n0)>=0];在运行命令:[x,n]=stepseq(-5,5,3)stem(n,x,'.');xlabel('n');title('单位阶跃序列x');grid(3)正弦函数n=-5:20;x=2*sin(pi*n/6+pi/3); stem(n,x,'.'); xlabel ('时间序列n'); ylabel('振幅'); title('正弦函数序列x=2*sin(pi*n/6+pi/3)');grid on(4)复指数序列n=-5:30;x=2*exp(j*3*n);stem(n,real(x),'.'); xlabel ('时间序列n');ylabel('振幅');title('复指数序列x=2*exp(j*3*n)的实部');grid on图形如下:(5)指数序列n=1:30;x=1.2.^n;stem(n,x,'.'); xlabel ('时间序列n');ylabel('振幅');title('指数序列x=1.2.^n'); grid on2、绘出信号sn e n x =)(,当6121πj s +-=、6121πj s +=、121=s 、62πj s +=、6πj s =时的信号实部和虚部图;程序如下:s1=-1/12+j*pi/6;s2=1/12+j*pi/6;s3=1/12;s4=2+j*pi/6;s5=j*pi/6;n=0:20;x1=exp(s1*n);x2=exp(s2*n); x3=exp(s3*n);x4=exp(s4*n); x5=exp(s5*n);subplot(5,2,1);stem(n,real(x1),'.'); xlabel ('时间序列n');ylabel('实部'); title('复指数s1=-1/12+j*pi/6时序列实部');grid onsubplot(5,2,2);stem(n,imag(x1),'.'); xlabel ('时间序列n');ylabel('虚部'); title('复指数s1=-1/12+j*pi/6时序列虚部');grid onsubplot(5,2,3);stem(n,real(x2),'.'); xlabel ('时间序列n');ylabel('实部'); title('复指数s2=1/12+j*pi/6时序列实部');grid onsubplot(5,2,4);stem(n,imag(x2),'.'); xlabel ('时间序列n');ylabel('虚部'); title('复指数s2=1/12+j*pi/6时序列虚部');grid onsubplot(5,2,5);stem(n,real(x3),'.'); xlabel ('时间序列n');ylabel('实部');title('复指数s3=1/12时序列实部');grid onsubplot(5,2,6);stem(n,imag(x3),'.'); xlabel ('时间序列n');ylabel('虚部');title('复指数s3=1/12时序列虚部');grid onsubplot(5,2,7);stem(n,real(x4),'.'); xlabel ('时间序列n');ylabel('实部');title('复指数s4=2+j*pi/6时序列实部');grid onsubplot(5,2,8);stem(n,imag(x4),'.'); xlabel ('时间序列n');ylabel('虚部');title('复指数s4=2+j*pi/6时序列虚部');grid onsubplot(5,2,9);stem(n,real(x5),'.'); xlabel ('时间序列n');ylabel('实部');title('复指数s5=j*pi/6时序列实部');grid onsubplot(5,2,10);stem(n,imag(x5),'.'); xlabel ('时间序列n');ylabel('虚部'); title('复指数s5=j*pi/6时序列虚部');grid on由图的实部部分可以看出,s=j*pi/6时,序列周期为12。
数字信号处理讲义--第4章z变换

数字信号处理讲义--第4章z变换第4章 z 变换[教学⽬的]1.了解Z 变换的概念,能求常⽤函数的Z 变换,能确定Z 变换的收敛域。
2.掌握各种求解Z 逆变换的⽅法,特别是利⽤围线积分求Z 反变换。
[教学重点与难点] 重点:1.Z 变换的概念,常⽤函数的Z 变换求解,Z 变换的收敛域; 2.各种求解Z 逆变换的⽅法,特别是利⽤围线积分求Z 反变换;难点:本章主要内容基本在信号与系统中学过,基本⽆难点,但如学⽣基础较差,还是要从以上三个重点内容去复习。
8.了解离散时间随机信号的概念。
[教学重点与难点] 重点:1.掌握线性时不变系统的概念与性质; 2.离散时间信号与系统的频域表⽰;难点:离散信号系统的性质如线性性,时不变性,因果性,稳定性的判定是本章的⼀个难点。
4.1 Z 变换(1) Z 变换的定义⼀个离散序列x (n )的Z 变换定义为式中,z 是⼀个复变量,它所在的复平⾯称为Z 平⾯。
我们常⽤Z [x (n )]表⽰对序列x (n )进⾏Z 变换,也即这种变换也称为双边Z 变换,与此相应的单边Z 变换的定义如下:∑∞-∞=-=n nz n x z X )()()()]([z X n x Z =∑∞=-=0)()(n nz n x z X这种单边Z 变换的求和限是从零到⽆穷,因此对于因果序列,⽤两种Z 变换定义计算出的结果是⼀样的。
单边Z 变换只有在少数⼏种情况下与双边Z 变换有所区别。
⽐如,需要考虑序列的起始条件,其他特性则都和双边Z 变换相同。
本书中如不另外说明,均⽤双边Z变换对信号进⾏分析和变换。
(2)Z 变换与傅⽴叶变换的关系:单位圆上的Z 变换是和模拟信号的频谱相联系的,因⽽常称单位圆上序列的Z 变换为序列的傅⾥叶变换,也称为数字序列的频谱。
数字频谱是其被采样的连续信号频谱周期延拓后再对采样频率的归⼀化。
单位圆上序列的Z 变换为序列的傅⾥叶变换,根据式(1-54)Z 变换的定义,⽤ej ω代替z ,从⽽就可以得到序列傅⾥叶变换的定义为可得其反变换:(3)Z 变换存在的条件: 正变换与反变换:存在的⼀个充分条件是:∑∞-∞==Ω=??-=Ω==k a Taj e z T k j X T j X e X z X j πωωωω21)(?)()(/nj n j en x e X n x F ωω-∞-∞=∑==)()()]([ωππωππωωd e eX dz z z X j e X F n x n j j n z j ??--=-===)(21)(21)]([)(11||1∑∞-∞=-==n nj j en x e X n x F ωω)()()]([ωπωωππωd e e X n x e X F n j j j )(21)()]([1?--==即:绝对可加性是傅⾥叶变换表⽰存在的⼀个充分条件。
数字信号处理实验讲义

实验一:用FFT 对信号作频谱分析(2学时)1.实验目的学习用FFT 对连续信号和时域离散信号进行谱分析的方法,了解可能出现的分析 误差及其原因,以便正确应用FFT 。
2. 实验原理用FFT 对信号作频谱分析是学习数字信号处理的重要内容。
经常需要进行谱分析的信号是模拟信号和时域离散信号。
对信号进行谱分析的重要问题是频谱分辨率D 和分析误差。
频谱分辨率直接和FFT 的变换区间N 有关,因为FFT 能够实现的频率分辨率是N /2π,因此要求D N ≤/2π。
可以根据此式选择FFT 的变换区间N 。
误差主要来自于用FFT 作频谱分析时,得到的是离散谱,而信号(周期信号除外)是连续谱,只有当N 较大时离散谱的包络才能逼近于连续谱,因此N 要适当选择大一些。
周期信号的频谱是离散谱,只有用整数倍周期的长度作FFT ,得到的离散谱才能代表周期信号的频谱。
如果不知道信号周期,可以尽量选择信号的观察时间长一些。
对模拟信号进行谱分析时,首先要按照采样定理将其变成时域离散信号。
如果是模拟周期信号,也应该选取整数倍周期的长度,经过采样后形成周期序列,按照周期序列的谱分析进行。
3.实验步骤及内容(1)对以下序列进行谱分析。
⎪⎩⎪⎨⎧≤≤-≤≤-=⎪⎩⎪⎨⎧≤≤-≤≤+==其它nn n n n n x 其它n n n n n n x n R n x ,074,330,4)(,074,830,1)()()(3241 选择FFT 的变换区间N 为8和16 两种情况进行频谱分析。
分别打印其幅频特性曲线。
并进行对比、分析和讨论。
(2)对以下周期序列进行谱分析。
4()cos 4x n n π=5()cos(/4)cos(/8)x n n n ππ=+选择FFT 的变换区间N 为8和16 两种情况分别对以上序列进行频谱分析。
分别打印其幅频特性曲线。
并进行对比、分析和讨论。
(3)对模拟周期信号进行谱分析6()cos8cos16cos20x t t t t πππ=++选择 采样频率Hz F s 64=,变换区间N=16,32,64 三种情况进行谱分析。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一 序列的产生及绘图一、实验目的1.熟悉信号处理软件MATLAB 的使用。
2.离散信号的基本运算实现。
3.了解基本序列及复杂序列的产生方法。
4.运用卷积方法观察系统的时域特性。
5.掌握线性时不变系统的频域表示方法。
二、实验内容 1.熟悉扩展函数 2.运行例题程序 3.编程实现下列内容(1)利用扩展函数产生序列并画图(a) )4()2(*2)(--+=n n n x δδ -5<=n<=5(b) )04.0cos()(n n x π=和)(2.0)04.0cos()(n w n n y +=π 0<=n<=50w(n)为白噪声 函数为 w=randn(size(n)) (2)设线性移不变系统的抽样响应为 )()9.0()(n u n h n =输入序列为 )10()()(--=n u n u n x 求系统输出 y(n)并画图 提示: 输出为输入和抽样响应的卷积三、实验报告要求1.记录例题程序的实验结果、图形。
2.写出自己编写的程序并记录结果、图形。
注:以下程序中所有以 % 开头的行均为注释, 所有汉字均为注释,%后的内容不用写入程序 %如果要了解哪个函数的应用方法请用help 命令 如help zreos%本软件中 * 表示乘法, 卷积用函数 conv 或修改后的卷积 conv_m %以下是7个扩展函数%扩展函数1~7的用法和该软件自带函数用法一致,即在调用时要将实参代入 %例:应用扩展函数3需要输入x1(n),x2(n)的值。
%在Command Window (命令窗口)中输入 % n1=1:5; % n2=2:6;% x1=[1 3 5 7 9]; % x2=[2 4 6 8 10];% [y,n]=sigadd(x1,n1,x2,n2) 即可得两序列相加的结果%7个扩展函数要分别存到不同的文件中,并且文件名要和该扩展函数的函数名一致 %如产生单位取样序列的函数所存文件的文件名必须为 impseq %1.单位取样序列 x(n)=delta(n-n0) 要求n1<=n0<=n2 function[x,n]=impseq(n0,n1,n2) n=[n1:n2]; x=[(n-n0)==0];%2.单位阶跃序列 x(n)=u(n-n0) 要求n1<=n0<=n2 function[x,n]=stepseq(n0,n1,n2) n=[n1:n2]; x=[(n-n0)>=0];%3.信号加 y(n)=x1(n)+x2(n) %find 函数:找出非零元素的索引号%x1:第一个序列的值,n1:序列x1的索引号 %x2:第二个序列的值,n2:序列x2的索引号 function[y,n]=sigadd(x1,n1,x2,n2)n=min(min(n1),min(n2)):max(max(n1),max(n2));y1=zeros(1,length(n)); y2=y1;y1(find((n>=min(n1))&(n<=max(n1))==1))=x1; y2(find((n>=min(n2))&(n<=max(n2))==1))=x2; y=y1+y2;%4.信号乘 y(n)=x1(n)*x2(n) function[y,n]=sigmult(x1,n1,x2,n2)n=min(min(n1),min(n2)):max(max(n1),max(n2)); y1=zeros(1,length(n)); y2=y1;y1(find((n>=min(n1))&(n<=max(n1))==1))=x1; y2(find((n>=min(n2))&(n<=max(n2))==1))=x2; y=y1.*y2;%5.移位 y(n)=x(n-n0)function[y,n]=sigshift(x,m,n0) n=m+n0; y=x;%6.翻褶 y(n)=x(-n)function[y,n]=sigfold(x,n) y=fliplr(x); n=-fliplr(n);%7.修改后的卷积(系统自带卷积函数(conv)只能得到输出值,而无法表示取值范围(n),修改后的卷 %积既给出了卷积值,也给出了它的取值范围.) function[y,ny]=conv_m(x,nx,h,nh) nyb=nx(1)+nh(1);nye=nx(length(x))+nh(length(h)); ny=[nyb:nye]; y=conv(x,h);%例1 序列的基本运算 nx1=1:5; nx2=2:6;x1=[1 3 5 7 9]; x2=[2 4 6 8 10];[y1,n1]=sigadd(x1,nx1,x2,nx2) %序列相加 [y2,n2]=sigmult(x1,nx1,x2,nx2) %序列相乘 n0=3;[y3,n3]=sigshift(x1,nx1,n0) %序列移位,n0为移动的位数 [y4,n4]=sigfold(x2,nx2) %序列的翻褶 y5=sum(x1) %序列和 ∑==Nn n x y 1)( y6=prod(x1) %序列积 ∏==Nn n x y 1)(ex=sum(x1.*conj(x1)) %或 ex=sum(abs(x).^2);%信号能量 ∑∑====Nn Nn n x n xn x Ex 121*|)(|)()(%例2 产生序列并画图%)]20()10([*10)]10()([*)()10(3.0---+--=--n u n u e n u n u n n x n 0<=n<=20%subplot 函数: 将一个图形分为几个小区域,每次选择一个作为当前区域画图 % subplot(m,n,p) 将图形分为m 行, n 列的区域, p 为当前区域 %axis 函数:控制坐标系的刻度和形式 title 函数:图形标题 %xlabel 函数:X 轴标记 ylabel 函数:Y 轴标记 %stem 函数:画离散序列图 n=[0:20];x1=n.*(stepseq(0,0,20)-stepseq(10,0,20));x2=10*exp(-0.3*(n-10)).*(stepseq(10,0,20)-stepseq(20,0,20)); x=x1+x2;subplot(2,1,1);stem(n,x);xlabel('n');ylabel('x(n)');axis([0,20,-1,11]);%例3 产生复信号 n j e n x )3.01.0()(+-= -10<=n<=10 %并画出复序列的实部、虚部、幅值和相位离散图 figure(2);clfn=[-10:10]; alpha=-0.1+0.3j; x=exp(alpha*n);subplot(2,2,1);stem(n,real(x));title('real');xlabel('n') subplot(2,2,2);stem(n,imag(x));title('imag');xlabel('n') subplot(2,2,3);stem(n,abs(x));title('magtitude'); xlabel('n')subplot(2,2,4);stem(n,(180/pi)*angle(x));title('phase'); xlabel('n')%例4 线性时不变系统的频域表示 b=[0.2 0.1 ];a=[1 -0.4 -0.5]; %系统函数的系数 iN i i Mi ii z a zb z H -==-∑∑+=101)(h=impz(b,a); %系统的单位取样响应 figure(1)stem(h) %画出单位取样响应 title('h(n)') figure(2)fs=1000;[H,f]=freqz(b,a,256,fs); %求出系统的频率响应 mag=abs(H); %幅度响应 ph=angle(H); %相位响应 ph=ph*180/pi;subplot(2,1,1),plot(f,mag);grid %画出幅度响应 xlabel('frequency(Hz)'); ylabel('magnitude');subplot(2,1,2);plot(f,ph);grid %画出相位响应 xlabel('frequency(Hz)'); ylabel('phase'); figure(3)zr=roots(b) %求出系统的零点 pk=roots(a) %求出系统的极点zplane(b,a); %zplane 函数画出零极点图实验二 离散傅立叶变换及谱分析一、 实验目的1.掌握离散傅里叶变换的计算机实现方法。
2.检验实序列傅里叶变换的性质。
3.掌握计算序列的圆周卷积的方法。
4.熟悉连续信号经理想采样前后的频谱变化关系,加深对时域采样定理的理解。
5.学习用DFT 对连续信号和时域离散信号进行谱分析的方法,了解可能出现的分析误差,以便在实际中正确应用DFT 。
二、 实验内容1.实现离散傅里叶变换。
2.计算序列圆周卷积。
3.计算实序列傅里叶变换并检验DFT 性质。
4.实现连续信号傅里叶变换以及由不同采样频率采样得到的离散信号的傅里叶变换。
5.实现补零序列的傅里叶变换。
6.实现高密度谱和高分辨率谱,并比较二者的不同。
三、 实验报告要求 见各程序要求%以下为4个扩展函数% (1)离散傅立叶变换 ∑-==1)()(N k nk N W n x k X 采用矩阵相乘的方法function [Xk]=dft(xn,N) n=[0:1:N-1]; k=[0:1:N-1];WN=exp(-j*2*pi/N); nk=n'*k;WNnk=WN.^(nk); Xk=xn*WNnk;%(2)逆离散傅立叶变换 ∑-=-=10)(1)(N k nk N W k X Nn xfunction [xn]=idft(Xk,N) n=[0:1:N-1]; k=[0:1:N-1];WN=exp(-j*2*pi/N); nk=n'*k;WNnk=WN.^(-nk); xn=(Xk*WNnk)/N;% (3) 实序列的分解% 实序列可分解为共扼对称分量 ]x((-n))[x(n)*(1/2)xec N += % 和共扼反对称分量 ]x((-n))-[x(n)*(1/2)xoc N = function [xec,xoc]=circevod(x) N=length(x); n=0:(N-1);xec=0.5*(x+x(mod(-n,N)+1)); %根据上面的公式计算,mod 函数为取余 xoc=0.5*(x-x(mod(-n,N)+1));% (4) 序列的循环移位 N m n x n y ))(()(-= function y=cirshftt(x,m,N)if length(x)>Nerror('N mustbe >= the length of x') %要求移位周期大于信号长度endx=[x zeros(1,N-length(x))];n=[0:1:N-1];n=mod(n-m,N);y=x(n+1);%例1 本例检验实序列的性质DFT[xec(n)]=Re[X(k)] DFT[xoc(n)]=Im[X(k)] % 设 x(n)=10*(0.8).^n 0<=n<=10 将x(n)分解为共扼对称及共扼反对称部分%实验报告要求:(1)将实验结果画出(2)实验结果说明什么n=0:10;x=10*(0.8).^n;[xec,xoc]=circevod(x);subplot(2,1,1);stem(n,xec); %画出序列的共扼对称分量title('Circular -even component')xlabel('n');ylabel('xec(n)');axis([-0.5,10.5,-1,11])subplot(2,1,2);stem(n,xoc); %画出序列的共扼反对称分量title('Circular -odd component')xlabel('n');ylabel('xoc(n)');axis([-0.5,10.5,-4,4])figure(2)X=dft(x,11); %求出序列的DFTXec=dft(xec,11); %求序列的共扼对称分量的DFTXoc=dft(xoc,11); %求序列的共扼反对称分量的DFTsubplot(2,2,1);stem(n,real(X));axis([-0.5,10.5,-5,50])title('Real{DFT[x(n)]}');xlabel('k'); %画出序列DFT的实部subplot(2,2,2);stem(n,imag(X));axis([-0.5,10.5,-20,20])title('Imag{DFT[x(n)]}');xlabel('k'); %画出序列DFT的虚部subplot(2,2,3);stem(n,Xec);axis([-0.5,10.5,-5,50])title('DFT[xec(n)]');xlabel('k');subplot(2,2,4);stem(n,imag(Xoc));axis([-0.5,10.5,-20,20])title('DFT[xoc(n)]');xlabel('k');% 例2 本例为计算序列的圆周卷积程序% 运行之前应在命令窗口输入 x1,x2,N 的值%实验报告要求:自己选择2个序列进行计算,将实验结果写出if length(x1)>Nerror('N must be >= the length of x1')endif length(x2)>Nerror('N must be >= the length of x2')endx1=[x1 zeros(1,N-length(x1))]; %将x1,x2补0成为N长序列x2=[x2 zeros(1,N-length(x2))];m=[0:1:N-1];x2=x2(mod(-m,N)+1); %该语句的功能是将序列翻褶,延拓,取主值序列H=zeros(N,N);for n=1:1:N %该for循环的功能是得到x2序列的循环移位矩阵H(n,:)=cirshftt(x2,n-1,N); %和我们手工计算圆周卷积得到的表是一致的endy=x1*H' %用矩阵相乘的方法得到结果% 例3 本例验证采样定理%令||1000)(t a e t x -=,绘制其傅立叶变换)(Ωj X a 。