DSP实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一 离散系统的时域分析
一、实验目的
1、掌握离散时间信号的MATLAB 表示;
2、信号运算;
3、差分方程的求解;
4、离散时间信号的卷积运算。
二、实验原理
1、离散时间信号
离散时间信号只在某些离散的瞬时给出函数值,而在其他时刻无定义。它是时间上不连续按一定先后次序排列的一组数的集合,称为时间序列,用x(n)表示,n 取整数代表时间的离散时刻。
在matlab 中用向量来表示一个有限长度的序列。
2、序列的类型
为了分析的方便,在数字信号处理中规定了一些基本的序列。 a) 单位采样序列
function [x,n]=impseq(n1,n2,n0) n=[n1:n2]; x=[(n-n0)==0];
调用该函数
[x,n]=impseq(-2,8,2); stem(n,x)
0010()001()0n n n n n n n n n δδ =⎧=⎨ ≠⎩ =⎧-⎨
≠⎩
单位采样序列的另一种生成方法
n0=-2; n=[-10:10]; nc=length(n); x=zeros(1,nc); for i=1:nc if n(i)==n0 x(i)=1 end end
stem(n,x)
b) 单位阶跃序列
function [x,n]=stepseq(n1,n2,n0) n=[n1:n2]; x=[(n-n0)>=0];
调用该函数
[x,n]=stepseq(-2,8,2); stem(n,x)
000
10()001()0n n n n n n n n n
εε >=⎧=⎨
<⎩ >=⎧-⎨ <⎩
c) 实数指数序列
x(n)=an (运算符“.^”)
n=[0:10]; x=0.9.^n; stem(n,x)
d) 复数指数序列
n=[-10:10]; alpha=-0.1+0.3*j; x=exp(alpha*n);
real_x=real(x); image_x=imag(x); mag_x=abs(x); phase_x=angle(x); subplot(2,2,1); stem(n,real_x) subplot(2,2,2); stem(n,image_x) subplot(2,2,3); stem(n,mag_x) subplot(2,2,4); stem(n,phase_x)
()()j n
x n e αω+=(0.1j0.3)n x(n)e (10n 10)
-+= -<<
e) 正弦和余弦序列 n=[0:10]; x=3*cos(0.1*pi*n+pi/3);
stem(n,x)
f)
随机序列
rand(1,N)产生其元素在[0,1]之间均匀分布长度为N 的随机序列。 randn(1,N)产生均值为0,方差为1,长度为N 的高斯随机序列。 3、信号运算
a) 信号时移 b) 信号倒置 c) 信号加 d) 信号乘 e) 信号微分 f)
信号积分等
0()sin()
x n n ωθ=+0()cos()
x n n ωθ=+
4、序列运算
在matlab 中进行序列运算要求参与运算的序列的长度要一样,如果出现长度不一样或者长度相同但采样位置不同时,不能直接利用加减运算符,利用matlab 中的下标运算使其具有相同的长度。
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;
移位
function [y,n]=sigshift(x,m,n0) n=m+n0; y=x;
例: 求出下列波形
x1(n)=2x(n-5)-3x(n+4)
n=[-2:10]; x=[1:7,6:-1:1];
[x11,n11]=sigshift(x,n,5); [x12,n12]=sigshift(x,n,-4);
[x1,n1]=sigadd(2*x11,n11,-3*x12,n12); stem(n1,x1)
5、差分方程
在《信号与系统》和《数字信号处理》课程中,我们知道描述线性移不变离散时间系统的数学模型是常系数差分方程,它与系统的结构流图之间可以互相推导。迭代解法(也称递推解法)是求解差分方程的最简单也最适用的方法,也是实现数字滤波器的一种基本方法。
差分方程通式为:
(){1,2,3,4,5,6,7,6,5,4,3,2,1}x n =0
[]()[]()
N N
k r a k y n k b r x n r ==-=-∑∑
x(n)与y(n)分别为系统的激励和响应。 6、差分方程MATLAB 实现
MATLAB 以函数filter(num , den , x),来计算在给定输入和差分方程系数时求差分方程的数值解。
num,den 分别为系统方程的系数向量。 x 是输入序列。 已知某一系统方程为:
y[n]-y[n-1]+0.9y[n-2]=x[n]
计算并画出脉冲响应h(n),n=(-20,100)
n=[-20:100];
num=[1]; den=[1 -1 0.9]; x=impseq(-20,100,0); h=filter(num,den,x); stem(n,h)
xlabel('时间序号N'); ylabel('脉冲响应h'); title('脉冲响应');
离散卷积的计算公式如下:
序列x(n)、h(n) 可以是有限长或无限长,但为了在计算机上绘图观察方便,我们主要讨论有限长序列。如果x(n) 和h(n)长度分别为M 和N ,则响应序列y(n) 也为有限长序列,其长度为 L=M+N-1 。于是,上式可以“形象”地描述为两个有限长序列的反褶、移位、相乘、累加过程,这使计算机编程十分方便。 卷积函数conv(a,b)
实现两个序列a,b 的卷积。 例:假定两个序列。
x=[3,11,7,0,-1,4,2]; y=[2,3,0,-5,2,1]; c=conv(x,y); stem(c)
()()*()()()
m y n x n h n x m h n m +∞=-∞
==-∑