MATLAB课件DSP
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
其中
Wkn N
j2
e N
kn
❖ 用Matlab实现上面的变换和反变换,程序如下: ❖ 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; ❖
MATLAB课件DSP
Matlab基本知识
❖ Matlab主界面
❖ Matlab主界面主要由三个部分组成:
❖ 命令窗口(Command Window)
❖
命令窗口主要用来输入Matlab程序指令。
❖ 命令历史(Command History)
❖
命令历史保存了用户在命令窗口中所输入命令的记录,这些记录按照时间先后排列。
figure(2) n3=[0:1:99];y3=[x(1:10),zeros(1,90)]; subplot(211);stem(n3,y3); title('补零后的信号'); xlabel('n'); axis([0,100,-2.5,2.5]); Y3=fft(y3); magY3=abs(Y3(1:51)); k3=0:50;w3=2*pi/100*k3; subplot(212);plot(w3,magY3); title('DTDT Magnitude'); xlabel('frequency in pi'); axis([0,pi,0,10]);
❖ 工作空间(Workspace)
❖
工作空间中显示的是Matlab系统中当前的内存变量。
Matlab基本知识 ❖ Matlab主窗口外观
Matlab基本知识
❖ Matlab基本操作
❖ 下面用一个例子来介绍Matlab命令的基本用法
❖ 画出振荡曲线
和它的包络
ye sin3t() ❖ 程序如下:
❖ t=0:pi/20:4*pi;
2)freqz 数字滤波器的频率响应 b=[0.2,0.3,1]; a=[1,0.4,1]; freqz(b,a,128); freqz(b,a,128); 查看输出结果。 以上命令的物理意义是求系统 的频谱响应
H (e jw )
H(z)01.200 .4.3zz11z z22
❖ 在以上的实验中,任选两个独立完成,在实验报告中写出实验步骤,所输入的命令,和输出结果
❖ subplot(222);stem(n,imag(x));title('imaginary part');xlabel('n');
❖ subplot(223);stem(n,abs(x));title('magnitude part');xlabel('n');
❖ subplot(224);stem(n,angle(x)*180/pi);title('phase part');xlabel('n');
❖ 示例二 计算离散系统
y ( n ) y ( n 1 ) 0 .9 y ( n 2 ) x ( n )
❖ 的冲激响应和单位阶跃响应
❖ 参考程序
❖ a=[1,-1,0.9];
❖ b=1;
❖ x=impseq(0,-20,120);
❖ n=[-20:120];
❖ h=filter(b,a,x);
2.滤波器分析函数 1)conv 求两个序列的卷积 clear;clf; x(1:5)=1; tx=-2:2; th=0:6; h(1:7)=0.5; ty=-2:8; y=conv(x,h); figure(1) subplot(221) stem(tx,x); subplot(222) stem(th,h); axis([0,6,0,1]); subplot(212) stem(ty,y); 查看结果
Matlab基本知识
信号处理工具箱
❖ 所谓的信号处理工具箱是Matlab专为数字信号处理提供的一整套专用函数和命令,主要可以分为 以下几类:
❖ 1.信号产生函数 ❖ 2.滤波器分析函数 ❖ 3.系统分析函数 ❖ 4.滤波器设计函数 ❖ 5.其他
信号处理工具箱
1.信号产生函数 常用的其他计算机语言也提供的数学函数如sin,cos,tan,exp等这里就不再重复了,只给出几个
❖ 脚本文件的建立和使用 ❖ 点击File->New->M-file建立一个新的m文件,在m文件的命令输入窗口输入以下命令: ❖ n=-10:1:10; ❖ alpha=-0.1+0.3j; ❖ x=exp(alpha*n); ❖ subplot(211) ❖ stem(n,abs(x)); ❖ subplot(212) ❖ stem(n,angle(x)*180/pi); ❖ shg ❖ 保存脚本文件,并运行,查看输出结果
(1)取 x(n)(0n10 )时 ,求 x(n)的 DFTX(k);
❖ Matlab实现程序如下所示:
(2)将 (1)中的 x(n)以补零的方0 式 n加 10,长 求 0X(到 k); (3)取 x(n)(0n10)0,求 X(k);
n=0:1:99; x=cos(0.48*pi*n)+cos(0.52*pi*n); figure(1); n1=0:1:9;y1=x(1:10); subplot(211);stem(n1,y1); title('长度为10的信号');xlabel('n'); axis([0,10,-2.5,2.5]); Y1=fft(y1); magY1=abs(Y1(1:6)); k1=0:1:5;w1=2*pi/10*k1; subplot(212);stem(w1,magY1);title('samples of DTFT magnitude'); xlabel('freuency in pi'); axis([0,pi,0,10]);
LOGO
实验二 离散信号的产生及分析 南京信息工程大学 电信学院 乔杰
❖ 利用前一次实验的方法,我们可以产生任意我们需要的离散信号,这些产生离散信号的命令,可以 用函数的方式给出,也可以以脚本文件的方式给出,或者直接在Matlab主命令窗口中给出也可以。
❖ 示例一 产生复信号
x(n )e( 0 .1 j0 .3 )n, 1 0 n 10
❖ subplot(212);
❖ stem(n,s)
❖ axis([-20,120,-0.5,2.5]);
❖ title('阶跃响应');xlabel('n');ylabel('s(n)');
❖ 其中,impseq和stepseq分别为单位冲激序列和单位阶跃序列的生成函数,stepseq函数如下: ❖ function [x,n]=stepseq(n0,n1,n2) ❖ n=[n1:n2]; ❖ x=[(n-n0)>=0];
❖ 示例三 x(n)0.9n,1 0 求n1,0 X (e jw )
❖ 参考程序: ❖ n=-10:10; ❖ x=(-0.9).^n; ❖ k=-200:200;w=(pi/100)*k; ❖ Xw=x*exp(-j*pi/100*n'*k); ❖ magXw=abs(Xw); ❖ angXw=angle(Xw); ❖ subplot(211) ❖ plot(w,magXw);grid ❖ xlabel('frequency in units of pi');ylabel('|X|'); ❖ subplot(212) ❖ plot(w,angXw);grid ❖ xlabel('frequency in units of pi');ylabel('angle/pi')
Matlab特有的函数 1)sawtooth产生锯齿波或三角波 在Matlab命令窗口中输入以下命令,也可以用脚本文件来实现。 t=-10:0.1:10; x=sawtooth(t); plot(t,x) grid on Shg 查看结果
❖ 2)sinc 产生sinc信号 ❖ t = -5:0.1:5; ❖ y = sinc(t); ❖ plot(t,y); ❖ grid ❖ Shg ❖ 查看结果
❖ 如果需要分析序列的频谱,则要根据序列傅立叶变换公式进行,不过需要注意的是,在DTFT中, 频率分量w是连续的,而在计算机实现过程中,需要对其作离散化,具体的作法参见下面的示例。
❖ 请完成上面三个示例,根据以上示例,完成以下实验,并撰写实验报告
❖ 1.请生成离散信号
❖ 并画出复序列x(n)的实部,虚部,幅值和相位图。
function 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;
二、计算分辨率和物理分辨力 的分析
❖ 调用上述dft函数给出下列序列的DFT变换X(k):
❖ 2.请给出离散系统
x(n )e( 0 .3 0 .5j)n, 1 5 n24
❖ 的单位抽样响应和单位阶跃响应
❖ 3. 请给出序列
的频谱Biblioteka ❖ 要求数字频率范围为y ( n ) 0 . 3 y ( n 1 ) 0 . 7 y ( n 2 ) x ( n ) 2 x ( n 2 )
x(n)(0.5)n,5n14
Matlab基本知识
Matlab基本知识
❖ 函数的建立和使用 ❖ 点击File->New->M-file建立一个新的m文件,在m文件的命令输入窗口输入以下命令: ❖ function [x,n]=impseq(n0,n1,n2) ❖ n=[n1:n2]; ❖ x=[(n-n0)==0]; ❖ 保存上面所输入的m文件,命名为impseq.m ❖ 在Matlab主命令窗口中输入以下命令调用刚才建立的函数impseq: ❖ clear ❖ clf ❖ [x,n]=impseq(0,-5,5); ❖ stem(n,x); ❖ axis([-5,5,0,1.5]); ❖ grid on ❖ shg
❖ 利用数字信号工具箱中filter函数可分析LTI系统的输出,对于一个系统
❖ a(1)*y(n) = b(1)*x(n) + b(2)*x(n-1) + ... + b(nb+1)*x(n-nb)- a(2)*y(n1) - ... - a(na+1)*y(n-na)
❖ 如果输入信号为x(n),则输出可用Y =FILTER(B,A,X)得到,其中X为输入信号所组成的矢量 ,B为系统函数分子部分的系数矢量,A为分母部分的系数矢量,具体应用请看下面的例子。
3w3
X (e jw )
LOGO
实验三 离散傅立叶变换及分析
一、用Matlab实现DFT 与IDFT变换
DFT与IDFT变换:
N1
x(n) D F TX(k) x(n)W N k n k0,1, N1 n0
N1
X(k) I D FT x(n) X(k)W N kn n0,1, N1 k0
❖ subplot(211);
❖ stem(n,h);
❖ subplot(212);
❖ axis([-20,120,-1.1,1.1]);
❖ title('冲激响应');xlabel('n');ylabel('h(n)');
❖ x=stepseq(0,-20,120);
❖ s=filter(b,a,x);
❖ 并画出复序列x(n)的实部,虚部,幅值和相位图。
❖ 参考程序
❖ figure(1);clf
❖ n=-10:10;alpha=-0.1+j*0.3;
❖ x=exp(alpha.*n);
❖ subplot(221);stem(n,real(x));title('real part');xlabel('n');
x
(n
)
1,0 n L 1 0, L n N -1
(1) L 5, N 20 ❖ 再调用idft函数,由X(k)变换回x(n),看是否一致。
(2)L 5, N 40
❖ 利用Matlab来分别讨论频率的计算分辨率和物理分辨力 ❖ 为了说明两者之间的差异,请思考下面的例子:
x(n)co(0s.48n)co(0s.52n)
t/3
❖ yy=exp(-t/3);
❖ y=exp(-t/3).*sin(3*t);
❖ plot(t,y,'-r');
❖ hold on
❖ plot(t,yy,':b',t,-yy,':b');
❖ grid on
❖ shg
yyet/3
Matlab基本知识 ❖ 所得图形结果如下图所示:
Matlab基本知识