文档库 最新最全的文档下载
当前位置:文档库 › 数字信号处理Matlab实现实例(推荐给学生)

数字信号处理Matlab实现实例(推荐给学生)

数字信号处理Matlab实现实例(推荐给学生)
数字信号处理Matlab实现实例(推荐给学生)

数字信号处理Matlab 实现实例

第1章离散时间信号与系统

例1-1 用MATLAB计算序列{-2 0 1 –1 3}和序列{1 2 0 -1}的离散卷积。

解 MATLAB程序如下:

a=[-2 0 1 -1 3];

b=[1 2 0 -1];

c=conv(a,b);

M=length(c)-1;

n=0:1:M;

stem(n,c);

xlabel('n'); ylabel('幅度');

图1.1给出了卷积结果的图形,求得的结果存放在数组c中为:{-2 -4 1 3 1 5 1 -3}。

例1-2 用MATLAB计算差分方程

当输入序列为时的输出结果。

解 MATLAB程序如下:

N=41;

a=[0.8 -0.44 0.36 0.22];

b=[1 0.7 -0.45 -0.6];

x=[1 zeros(1,N-1)];

k=0:1:N-1;

y=filter(a,b,x);

stem(k,y)

xlabel('n');ylabel('幅度')

图 1.2 给出了该差分方程的前41个样点的输出,即该系统的单位脉冲响应。

例1-3 用MATLAB 计算例1-2差分方程

所对应的系统函数的DTFT 。

解 例1-2差分方程所对应的系统函数为:

123

123

0.80.440.360.02()10.70.450.6z z z H z z z z -------++=+--

其DTFT 为

23230.80.440.360.02()10.70.450.6j j j j j j j e e e H e e e e ωωω

ωωωω--------++=+--

用MATLAB 计算的程序如下:

k=256;

num=[0.8 -0.44 0.36 0.02];

den=[1 0.7 -0.45 -0.6];

w=0:pi/k:pi;

h=freqz(num,den,w);

subplot(2,2,1);

plot(w/pi,real(h));grid

title('实部')

xlabel('\omega/\pi');ylabel('幅度') subplot(2,2,2);

plot(w/pi,imag(h));grid

title('虚部')

xlabel('\omega/\pi');ylabel('Amplitude') subplot(2,2,3);

plot(w/pi,abs(h));grid

title('幅度谱')

xlabel('\omega/\pi');ylabel('幅值') subplot(2,2,4);

plot(w/pi,angle(h));grid

title('相位谱')

xlabel('\omega/\pi');ylabel('弧度')

第2章离散傅里叶变换及其快速算法例2-1

解此时离散序列,即k=8。用MATLAB计算并作图,

函数fft用于计算离散傅里叶变换DFT,程序如下:

k=8;

n1=[0:1:19];

xa1=sin(2*pi*n1/k);

subplot(2,2,1)

plot(n1,xa1)

xlabel('t/T');ylabel('x(n)');

xk1=fft(xa1);xk1=abs(xk1);

subplot(2,2,2)

stem(n1,xk1)

xlabel('k');ylabel('X(k)');

n2=[0:1:15];

xa2=sin(2*pi*n2/k);

subplot(2,2,3)

plot(n2,xa2)

xlabel('t/T');ylabel('x(n)');

xk2=fft(xa2);xk2=abs(xk2);

subplot(2,2,4)

stem(n2,xk2)

xlabel('k');ylabel('X(k)');

计算结果示于图2.1,(a)和(b)分别是N=20时的截取信号和DFT结果,由于截取了两个半周期,频谱出现泄漏;(c) 和(d) 分别是N=16时的截取信号和DFT结果,由于截取了两个整周期,得到单一谱线的频谱。上述频谱的误差主要是由于时域中对信号的非整周期截断产生的频谱泄漏。

例2-2用FFT计算两个序列

的互相关函数。

解用MATLAB计算程序如下:

x=[1 3 -1 1 2 3 3 1];

y=[2 1 -1 1 2 0 -1 3];

k=length(x);

xk=fft(x,2*k);

yk=fft(y,2*k);

rm=real(ifft(conj(xk).*yk));

rm=[rm(k+2:2*k) rm(1:k)];

m=(-k+1):(k-1);

stem(m,rm)

xlabel('m'); ylabel('幅度');

其计算结果如图2.2所示。

例2-3计算两个序列的的互相关函数,其中

x(n)={2 3 5 2 1 –1 0 0 12 3 5 3 0 –1 –2 0 1 2} ;

y(n)=x(n-4)+e(n), e(n)为一随机噪声,在MATLAB中可以用随机函数rand产生

解用MATLAB计算程序如下:

x=[2 3 5 2 1 -1 0 0 12 3 5 3 0 -1 -2 0 1 2];

y=[0 0 0 0 2 3 5 2 1 -1 0 0 12 3 5 3 0 -1 -2 0 1 2];

k=length(y);

e=rand(1,k)-0.5;

y=y+e;

xk=fft(x,2*k);

yk=fft(y,2*k);

rm=real(ifft(conj(xk).*yk));

rm=[rm(k+2:2*k) rm(1:k)];

m=(-k+1):(k-1);

stem(m,rm)

xlabel('m'); ylabel('幅度');

计算结果如图2.3(a),我们看到最大值出现在m=4处,正好是y(n)对于x(n)的延迟。

2. 3(b)是x(n)的自相关函数,他和y(n)的区别除时间位置外,形状也略不同,这是由于

相关文档