数字信号处理MATLAB仿真

更新时间:2024-06-23 22:14:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验一 数字信号处理的Matlab仿真

一、实验目的

1、掌握连续信号及其MATLAB实现方法;

2、掌握离散信号及其MATLAB实现方法

3、掌握离散信号的基本运算方法,以及MATLAB实现 4、了解离散傅里叶变换的MATLAB实现 5、了解IIR数字滤波器设计 6、了解FIR数字滤波器设计1

二、实验设备

计算机,Matlab软件 三、实验内容

(一)、 连续信号及其MATLAB实现 1、 单位冲击信号

??(t)?0,????(t)dt?1,?????t?0???0

例1.1:t=1/A=50时,单位脉冲序列的MATLAB实现程序如下: clear all;

t1=-0.5:0.001:0; A=50; A1=1/A;

n1=length(t1); u1=zeros(1,n1); t2=0:0.001:A1; t0=0;

u2=A*stepfun(t2,t0); t3=A1:0.001:1; n3=length(t3); u3=zeros(1,n3); t=[t1 t2 t3]; u=[u1 u2 u3]; plot(t,u)

axis([-0.5 1 0 A+2])

2、 任意函数

f(t)??????f(?)?(t??)d?

例1.2:用MATLAB画出如下表达式的脉冲序列

f(n)?0.4?(n?2)?0.8?(n?1)?1.2?(n)?1.5?(n?1)?1.0?(n?2)?0.7?(n?3)

clear all; t=-2:1:3; N=length(t); x=zeros(1,N); x(1)=0.4; x(2)=0.8 x(3)=1.2; x(4)=1.5; x(5)=1.0; x(6)=0.7; stem(t,x);

axis([-2.2 3.2 0 1.7])

3、 单位阶跃函数

??1,u(t)????0,t?0t?0

例1.3:用MATLAB实现单位阶跃函数

clear all;

t=-0.5:0.001:1; t0=0;

u=stepfun(t,t0); plot(t,u)

axis([-0.5 1 -0.2 1.2])

4、 斜坡函数

g(t)?B(t?t0)

例1.4:用MATLAB实现g(t)=3(t-1) clear all; t=0:0.01:3; B=3; t0=1;

u=stepfun(t,t0); n=length(t); for i=1:n

u(i)=B*u(i)*(t(i)-t0); end plot(t,u)

axis([-0.2 3.1 -0.2 6.2])

5、 实指数函数

f(t)?Aeat

例1.5:用MATLAB实现f(t)?3eclear all; t=0:0.001:3; A=3; a=0.5;

u=A*exp(a*t); plot(t,u)

axis([-0.2 3.1 -0.2 14])

6、 正弦函数

0.5t

f(t)?Acos(2?t??) T0例1.6:用MATLAB实现正弦函数f(t)=3cos(10πt+1) clear all;

t=-0.5:0.001:1; A=3; f=5; fai=1;

u=A*sin(2*pi*f*t+fai); plot(t,u)

axis([-0.5 1 -3.2 3.2])

(二)、离散信号及其MATLAB实现 1、 单位冲激序列

?(n)????1,??0,n?0n?0

例2.1:用MATLAB产生64点的单位冲激序列

clear all; N=64;

x=zeros(1,N); x(1)=1; xn=0:N-1; stem(xn,x)

axis([-1 65 0 1.1])

2、 任意序列

f(n)?m?????f(m)?(n?m)

例2.2:用MATLAB画出如下表达式的脉冲序列

f(n)?8.0?(n)?3.4?(n?1)?1.8?(n)?5.6?(n?3)?2.9?(n?4)?0.7?(n?5)

clear all; N=8;

x=zeros(1,N); x(1)=8.0; x(2)=3.4 x(3)=1.8; x(4)=5.6; x(5)=2.9; x(6)=0.7; xn=0:N-1; stem(xn,x)

axis([-1 8 0 8.2])

3、 单位阶跃序列

??1,u(n)????0,n?0n?0

例2.3:用MATLAB实现单位阶跃函数

clear all; N=32;

x=ones(1,N); xn=0:N-1; stem(xn,x)

axis([-1 32 0 1.1])

4、 斜坡序列

g(n)?B(n?n0)

例2.4:用MATLAB实现g(n)=3(n-4)点数为32的斜坡序列 clear all; N=32; k=4 B=3; t0=1;

x=[zeros(1,k) ones(1,N-k)]; for i=1:N

x(i)=B*x(i)*(i-k); end

xn=0:N-1; stem(xn,x)

axis([-1 32 0 90])

5、 正弦序列

x(n)?Asin(2?fn??)

例2.5:用MATLAB实现幅度A=3,频率f=100,初始相位Φ=1.2,点数为32的正弦信号 clear all; N=32; A=3; f=100; fai=1.2; xn=0:N-1;

x=A*sin(2*pi*f*(xn/N)+fai); stem(xn,x)

axis([-1 32 -3.2 3.2])

6、 实指数序列

x(n)?Aan

例2.6:用MATLAB实现x(n)?3e,点数为32的实指数序列 clear all; N=32; A=3; a=0.7; xn=0:N-1; x=A*a.^xn; stem(xn,x)

7、 复指数序列

0.7x(n)?Ae(a?j?)n,?n

例2.7:用MATLAB实现幅度A=3,a=0.7,角频率ω=314,点数为32的实指数序列 clear all; N=32; A=3; a=0.7; w=314; xn=0:N-1;

x=A*exp((a+j*w)*xn); stem(xn,x)

8、 随机序列

利用MATLAB产生两种随机信号:

rand(1,N)在区间上产生N点均匀分布的随机序列

randn(1,N)产生均值为0,方差为1的高斯随机序列,即白噪声序列

例2.8:用MATLAB产生点数为32的均匀分布的随机序列与高斯随机序列 clear all; N=32;

x_rand=rand(1,N); x_randn=randn(1,N); xn=0:N-1; figure(1);

stem(xn,x_rand) figure(2);

stem(xn,x_randn)

(三)、离散信号的基本运算 1、 信号的延迟

给定离散信号x(n),若信号y(n)定义为:y(n)=x(n-k),那么y(n)是信号x(n)在时间轴上右移k个抽样周期得到的新序列。

例3.1:正弦序列y(n)=sin(100n)右移3个抽样周期后所得的序列,MATLAB程序如下: clear all; N=32; w=100; k=3;

x1=zeros(1,k); xn=0:N-1;

x2=sin(100*xn); figure(1) stem(xn,x2) x=[x1 x2];

axis([-1 N -1.1 1.1]) N=N+k; xn=0:N-1; figure(2) stem(xn,x)

axis([-1 N -1.1 1.1])

2、 信号相加

若信号x(n)?x1(n)?x2(n),值得注意的是当序列x1(n)和x2(n)的长度不相等或者位置不对应时,首先应该使两者的位置对齐,然后通过zeros函数左右补零使其长度相等后再相加 例3.2:用MATLAB实现两序列相加 clear all; n1=0:3

x1=[2 0.5 0.9 1]; figure(1) stem(n1,x1)

axis([-1 8 0 2.1] ) n2=0:7

x2=[ 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7]; figure(2)

stem(n2,x2)

axis([-1 8 0 0.8] ) n=0:7;

x1=[x1 zeros(1,8-length(n1))]; x2=[ zeros(1,8-length(n2)),x2]; x=x1+x2; figure(3) stem(n,x)

axis([-1 8 0 2.1])

3、 信号相乘

信号序列x1(n)和x2(n)相乘所得信号x(n)的表达式为:x(n)?x1(n)x2(n)

这是样本与样本之间的点乘运算,在MATLAB中可采用“.*”来实现,但是在信号序列相乘之前,应对其做与相加运算一样的操作。 例3.3:用MATLAB实现上例中两序列相乘 clear all; n1=0:3

x1=[2 0.5 0.9 1]; figure(1) stem(n1,x1)

axis([-1 8 0 2.1] ) n2=0:7

x2=[ 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7]; figure(2) stem(n2,x2)

axis([-1 8 0 0.8] ) n=0:7;

x1=[x1 zeros(1,8-length(n1))]; x2=[ zeros(1,8-length(n2)),x2]; x=x1.*x2; figure(3) stem(n,x)

axis([-1 8 0 0.35])

4、 信号翻转

信号翻转的表达式为:y(n)=x(-n),在MATLAB中可以用fliplr函数实现此操作 例3.4:用MATLAB实现“信号相加”中的x1(n)序列翻转 clear all; n=0:3

x1=[2 0.5 0.9 1]; x=fliplr(x1); stem(n,x)

axis([-1 4 0 2.1] )

5、 信号和

对于N点信号x(n),其和的定义为:y??x(n)

n?1N例3.5:用MATLAB实现“信号相加”中的x1(n)序列和 clear all; n=0:3

x1=[2 0.5 0.9 1]; x=sum(x1)

6、 信号积

对于N点信号x(n),其积的定义为:y??x(n)

n?1N例3.5:用MATLAB实现“信号相加”中的x1(n)序列积 clear all; n=0:3

x1=[2 0.5 0.9 1]; x=prod(x1)

(四)、离散傅里叶变换的MATLAB实现 例4:若x(n)?sin(n?)是一个N=32的有限序列,利用MATLAB计算它的DFT并画出图4形。 N=32; n=0:N-1;

xn=cos(pi*n/6); k=0:N-1;

WN=exp(-j*2*pi/N); nk=n’*k;

WNnk=WN.^nk; Xk=xn*WNnk; figure(1) stem(n,xn) figure(2)

stem(k,abs(Xk))

在MATLAB中,可以直接利用内部函数fft来实现FFT算法,该函数是机器语言,而不是MATLAB指令写成的,执行速度很快。常用格式为: y=fft(x)

y=fft(x,N)

(五)、IIR数字滤波器设计

1、 基于巴特沃斯法直接设计IIR数字滤波器

例5.1:设计一个10阶的带通巴特沃斯数字滤波器,带通频率为100Hz到200Hz,采样频率为1000Hz,绘出该滤波器的幅频于相频特性,以及其冲击响应图 clear all; N=10;

Wn=[100 200]/500;

[b,a]=butter(N,Wn,’bandpass’); freqz(b,a,128,1000) figure(2)

[y,t]=impz(b,a,101); stem(t,y)

2、 基于切比雪夫法直接设计IIR数字滤波器

例5.2:设计一个切比雪夫Ⅰ型数字低通滤波器,要求: Ws=200Hz,Wp=100Hz,Rp=3dB,Rs=30dB,Fs=1000Hz

clear all; Wp=100; Rp=3; Ws=200; Rs=30; Fs=1000;

[N,Wn]=cheb1ord(Wp/(Fs/2),Ws/(Fs/2),Rp,Rs); [b,a]=cheby1(N,Rp,Wn); freqz(b,a,512,1000);

例5.3:设计一个切比雪夫Ⅱ型数字带通滤波器,要求带通范围100-250Hz,带阻上限为300Hz,下限为50Hz,通带内纹波小于3dB,阻带纹波为30 dB,抽样频率为1000 Hz,并利用最小的阶次实现。

clear all; Wpl=100; Wph=250;

Wp=[Wpl,Wph]; Rp=3; Wsl=50; Wsh=300;

Ws=[Wsl,Wsh]; Rs=30; Fs=1000;

[N,Wn]=cheb2ord(Wp/(Fs/2),Ws/(Fs/2),Rp,Rs); [b,a]=cheby2(N,Rp,Wn); freqz(b,a,512,1000);

(六)、FIR数字滤波器设计

1、、在MATLAB 中产生窗函数十分简单: (1)矩形窗(Rectangle Window)

调用格式:w=boxcar(n),根据长度n 产生一个矩形窗w。 (2)三角窗(Triangular Window)

调用格式:w=triang(n) ,根据长度n 产生一个三角窗w。 (3)汉宁窗(Hanning Window)

调用格式:w=hanning(n) ,根据长度n 产生一个汉宁窗w。 (4)海明窗(Hamming Window)

调用格式:w=hamming(n) ,根据长度n 产生一个海明窗w。 (5)布拉克曼窗(Blackman Window)

调用格式:w=blackman(n) ,根据长度n 产生一个布拉克曼窗w。 (6)恺撒窗(Kaiser Window)

调用格式:w=kaiser(n,beta) ,根据长度n 和影响窗函数旁瓣的β参数产生一个恺撒窗w。

2、基于窗函数的FIR 滤波器设计 利用MATLAB 提供的函数firl 来实现 调用格式:firl (n,Wn,’ftype’,Window),n 为阶数、Wn 是截止频率(如果输入是形如[W1 W2] 的矢量时,本函数将设计带通滤波器,其通带为W1<ω

?1,0???0.4?Hd(e)??

0,else?j?Window=boxcar(8);

b=fir1(7,0.4,Window); freqz(b,1)

例6.2:设计线性相位带通滤波器,其长度N=15,上下边带截止频率分别为W1= 0.3π,w2=0.5 π

Window=blackman(16); b=fir1(15,[0.3 0.5],Window); freqz(b,1) 例6.3:MATLAB中的chirp.mat文件中存储信号y的数据,该信号的大部分号能量集中在Fs/4(或二分之一奈奎斯特)以上,试设计一个34阶的FIR高通滤波器,滤除频率低于Fs/4的信号成分,其中滤波器的截止频率为0.48,阻带衰减为30dB,滤波器窗采用切比雪夫窗 clear all; load chirp

window=chebwin(35,30);

b=fir1(34,0.48,’high’,window); yfit=filter(b,1,y);

[Py,fy]=pburg(y,10,512,Fs);

[Pyfit,fyfit]=pburg(yfit,10,512,Fs);

plot(fy,10*log10(Py),’.’,fyfit, 10*log10(Pyfit)); grid on

ylabel(‘幅度(dB)’) xlabel(‘频率(Hz’)

legend(‘滤波前的线性调频信号’, ‘滤波后的线性调频信号’)

实验一:MATLAB语言上机操作实践 1.简单的数组赋值方法 (1)

a=[1 2 3;4 5 6;7 8 9] %给定数组a

a(4,2)=11 %给数组a的第四行第二列元素赋11 a(5,:)=[-13 -14 -15] %给数组a的第五行元素赋值

a(4,3)=abs(a(5,1)) %数组a的第四行第三列元素为第五行第一列元素的模 a([2,5],:)=[] %数组a的第二行和第五行取空 a/2 %对数组a各元素对应除以2

a(4,:)=[sqrt(3) (4+5)/6*2 -7] %给数组a的第四行元素赋值 (2)

B=[1+2i,3+4i;5+6i,7+8i] C=[1,3;5,7]+[2,4;6,8]*i C=[1,3;5,7]+[2,4;6,8]i

D=sqrt(2+3i) %对复数2+3i求根号 D*D %对D求平方 E=C' %对C转置 F=conj(C) G=conj(C)' (3)

H1=ones(3,2) H2=zeros(2,3) H3=eye(4)

2.数组的基本运算 (1) A=[1 3 5] B=[2 4 6] C=A+B D=A-2

E=B-A (2) F1=A*3 F2=A.*B F3=A./B F4=A.\\B F5=B.\\A F6=B.^A F7=2./B F8=B.\\2 (3) Z1=A*B' Z2=B'*A

3.常用函数及相应的信号波形显示 例1-1:①

t=0:0.05:3; %给建立时间数组 f=2*sin(2*pi*t); %生成函数f

plot(t,f); %用plot作连续信号的曲线 title('f(t)-t曲线'); %在图上端标注图名 xlabel('t'); %标注横坐标 ylabel('f(t)'); %标注纵坐标 ②

t=0:0.05:3; %给建立时间数组 f=2*sin(2*pi*t); %生成函数f

subplot(2,2,1),plot(t,f); %建立2*2子图轴系,在图1处绘线性图 title('plot(t,f)');

subplot(2,2,2),stem(t,f); %建立2*2子图轴系,在图2处绘脉冲图 title('stem(t,f)');

subplot(2,2,3),stairs(t,f); %建立2*2子图轴系,在图3处绘阶梯图 title('stairs(t,f)');

subplot(2,2,4),bar(t,f); %建立2*2子图轴系,在图4处绘条形图 title('bar(t,f)');

练习题: (1)

t=0:0.05:4; %给建立时间数组 f=4*exp((-2)*t); %生成函数f

subplot(2,2,1),plot(t,f); %建立2*2子图轴系,在图1处绘线性图 title('plot(t,f)');

subplot(2,2,2),stem(t,f); %建立2*2子图轴系,在图2处绘脉冲图 title('stem(t,f)');

subplot(2,2,3),stairs(t,f); %建立2*2子图轴系,在图3处绘阶梯图 title('stairs(t,f)');

subplot(2,2,4),bar(t,f); %建立2*2子图轴系,在图4处绘条形图 title('bar(t,f)');

(2)

t=0:0.05:3; %给建立时间数组 f=exp((-1)*t).*cos(2*pi*t); %生成函数f

subplot(2,2,1),plot(t,f); %建立2*2子图轴系,在图1处绘线性图 title('plot(t,f)');

subplot(2,2,2),stem(t,f); %建立2*2子图轴系,在图2处绘脉冲图 title('stem(t,f)');

subplot(2,2,3),stairs(t,f); %建立2*2子图轴系,在图3处绘阶梯图 title('stairs(t,f)');

subplot(2,2,4),bar(t,f); %建立2*2子图轴系,在图4处绘条形图 title('bar(t,f)');

(3)

k=0:0.05:10; %给建立时间数组 f=k; %生成函数f

subplot(2,2,1),plot(k,f); %建立2*2子图轴系,在图1处绘线性图 title('plot(k,f)');

subplot(2,2,2),stem(k,f); %建立2*2子图轴系,在图2处绘脉冲图 title('stem(k,f)');

subplot(2,2,3),stairs(k,f); %建立2*2子图轴系,在图3处绘阶梯图 title('stairs(k,f)');

subplot(2,2,4),bar(k,f); %建立2*2子图轴系,在图4处绘条形图 title('bar(k,f)'); (4)

k=-20:0.05:20; f=k.*sin(k);

subplot(2,2,1),plot(k,f); %建立2*2子图轴系,在图1处绘线性图 title('plot(k,f)');

subplot(2,2,2),stem(k,f); %建立2*2子图轴系,在图2处绘脉冲图 title('stem(k,f)');

subplot(2,2,3),stairs(k,f); %建立2*2子图轴系,在图3处绘阶梯图 title('stairs(k,f)');

subplot(2,2,4),bar(k,f); %建立2*2子图轴系,在图4处绘条形图 title('bar(k,f)');

4. 简单的流程控制编程 例1-2

X=0; %给变量X赋初值0

for n=1:32 %确定循环变量及其取值范围 X=X+n^2; %循环体 end 练习题: (1)

X=0; %给变量X赋初值0

for n=1:20 %确定循环变量及其取值范围 X=X+(2*n-1)^2; %循环体 end

(2)

X=0; %给变量X赋初值0

for n=1:99 %确定循环变量及其取值范围 X=X+n*(n+1); end

(3)

a=[]; %定义数组a为空

a(1)=1; %给数组第一个元素赋值1 a(2)=1; %给数组第二个元素赋值1 for k=1:18 %确定循环变量及其取值范围 a(k+2)=a(k)+a(k+1); %循环体 end

实验二:时域离散信号的产生 (2) ①

n1=-3;n2=4;n0=0; %在起点为n1、终点为n2的范围内,于n0处产生冲激 n=n1:n2; %生成离散信号的时间序列 f=[n==n0]; %建立信号f

stem(n,f,'filled'); %绘制脉冲杆图,且在圆心处用实心圆表示 title('单位脉冲序列')

axis([n1 n2 0 1.1*max(f)]); %限定横坐标和纵坐标的显示范围 ylabel('f(n)'); ②

n1=-5;n2=5;n0=0;

n=n1:n2; %生成离散信号的时间序列 f=[n>=n0]; %生成离散序列f stem(n,f,'filled');

title('单位阶跃序列')

axis([n1 n2 0 1.1*max(f)]);%限定横坐标和纵坐标的显示范围 ylabel('幅度f(n)'); ③

n=0:16;

f=exp((0.1+1.6*pi*j)*n); %建立信号f stem(n,f,'fill'),grid on xlabel('n'),title('f(n)'); ④

n=0:20;

f=3*sin(pi/4*n); %建立信号f stem(n,f,'fill'),xlabel('n'),grid on title('f(n)')

axis([0,20,-3.5,3.5]); %限定横坐标和纵坐标的显示范围 ⑤

n=-20:20;

f=sinc(n/5); %建立信号f stem(n,f,'fill'),xlabel('n'),grid on title('f(n)') (3) f=50; Um=2;

nt=2; %显示周期个数 N=16; %采样点数 T=1/f; %信号周期

dt=T/N; %采样时间间隔

n=0:nt*N-1; %建立离散时间的时间序列

tn=n*dt; %确定时间序列样点在时间轴上的位置 x=1+0.5*Um*sawtooth(2*f*pi*tn);%产生时域信号 subplot(2,1,1);plot(tn,x); %显示原连续信号

axis([0 nt*T 0 2]); %限定横坐标和纵坐标的显示范围 ylabel('x(t)');

subplot(2,1,2);stem(tn,x); %显示经采样的信号 axis([0 nt*T 0 2]); ylabel('x(n)'); (4)

f=200;

nt=2; %显示周期个数 Fs=4000;N=Fs/f; %求采样点数 T=1/f; %求信号周期 dt=T/N; %采样时间间隔

n=0:nt*N-1; %建立离散时间的时间序列

tn=n*dt; %确定时间序列样点在时间轴上的位置 x=square(2*f*pi*tn); %产生时域信号 subplot(2,1,1);plot(tn,x); %显示原连续信号

axis([0 nt*T -1 1]); %限定横坐标和纵坐标的显示范围 ylabel('x(t)');

subplot(2,1,2);stem(tn,x); %显示经采样的信号 axis([0 nt*T -1 1]); ylabel('x(n)');

实验三:离散序列的基本运算 (2) ①

n1=-5;n2=5;n0=0;n3=-3;n4=4;

n=n1:n2; %生成离散信号的时间序列 f1=[n==n0]; %建立f1信号 f2=[n==n3]; %建立f2信号

f3=[n==n4]; %建立f3信号 f=f2+2*f3; %建立f信号

stem(n,f,'filled'); %画f信号的波形图

axis([n1 n2 0 1.1*max(f)]); %限定横坐标和纵坐标的显示范围 ylabel('f(n)');

n1=-5;n2=5;n0=0;n3=2;n4=-2; n=n1:n2;

f1=[n>=n0]; %建立f1信号 f2=[n>=n3]; %建立f2信号 f3=[n>=n4]; %建立f3信号 f=f2+f3; %建立f信号

stem(n,f,'filled'); %画f信号的波形图

axis([n1 n2 0 1.1*max(f)]); %限定横坐标和纵坐标的显示范围 ylabel('f(n)');

n1=0;n2=20;n3=3;n4=-3; n=n1:n2;

x1=3*cos(2*pi*n/10); %建立原信号x(n) x2=3*cos(2*pi*(n-n3)/10); %建立x(n-3)信号 x3=3*cos(2*pi*(n-n4)/10); %建立x(n+3)信号 subplot(3,1,1);stem(n,x1,'filled');%画x1的波形图 ylabel('x(n)');

subplot(3,1,2);stem(n,x2,'filled');%画x(n-3)的波形图 ylabel('x(n-3)');

subplot(3,1,3);stem(n,x3,'filled');%画x(n+3)的波形图 ylabel('x(n+3)'); ④

n1=0;n2=24; n=n1:n2;

x1=exp((-n)/16); %建立x1(n)信号 x2=5*sin(2*pi*n/10); %建立x2(n)信号

x=x1.*x2; %建立x1(n)*x2(n)信号 subplot(3,1,1);stem(n,x1,'filled');%画x1(n)的波形图 ylabel('x1(n)');

subplot(3,1,2);stem(n,x2,'filled');%画x2(n)的波形图 ylabel('x1(n)');

subplot(3,1,3);stem(n,x,'filled'); %画x1(n)*x2(n)的波形图 ylabel('x(n)'); (3)

n1=0;n2=20; n=n1:n2;

x0=n.*sin(n); %建立原信号x(n)

y1=(n-3).*sin(n-3); %建立信号x(n-3) y2=(-n).*sin(-n); %建立信号x(-n) y3=-(n.*sin(n)); %建立信号-x(n) y4=(-n+3).*sin(-n+3); %建立信号x(-n+3) y5=n/2.*sin(n/2); %建立信号x(n/2) subplot(5,1,1);stem(n,y1,'filled'); ylabel('y1(n)=x(n-3)');

subplot(3,2,2);stem(n,y2,'filled'); ylabel('y2(n)=x(-n)');

subplot(3,2,3);stem(n,y3,'filled'); ylabel('y3(n)=-x(n)');

subplot(5,1,4);stem(n,y4,'filled'); ylabel('y4(n)=x(-n+3)');

subplot(3,2,5);stem(n,y5,'filled'); ylabel('y5(n)=x(n/2)'); (4) ①

n1=-4:-1;

x1=2*n1+5; %建立信号x1(n) n2=0:4;

x2=6; %建立信号x2(n)

n=min([n1,n2]):max([n1,n2]); %为x信号建立时间序列n N=length(n); %求时间序列n的点数N y1=zeros(1,N); %新建一维N列的y1全0数组 y2=zeros(1,N); %新建一维N列的y2全0数组 y1(find((n>=min(n1))&(n<=max(n1))))=x1; %为y1赋值 y2(find((n>=min(n2))&(n<=max(n2))))=x2; %为y2赋值 x=y1+y2; %建立信号x stem(n,x,'filled');

axis([min(n),max(n),1.1*min(x),1.1*max(x)]); ②

n1=-4;n2=4;

n3=-4;n4=-3;n5=-2;n6=-1;n7=0;n8=1;n9=2;n10=3;n11=4; n=n1:n2;

x1=[n==n3]; %建立信号x1 f1=(-3)*x1; %建立信号f1 x2=[n==n4]; f2=(-1)*x2; x3=[n==n5]; f3=x3; x4=[n==n6]; f4=3*x4; x5=[n==n7]; f5=6*x5;

x6=[n==n8]; f6=6*x6; x7=[n==n9]; f7=6*x7; x8=[n==n10]; f8=6*x8; x9=[n==n11]; f9=6*x9;

f=f1+f2+f3+f4+f5+f6+f7+f8+f9; %建立信号f stem(n,f,'filled'); %画信号f的波形 ylabel('f(n)'); ③

n1=-4:-1; x1=2*n1+5; n2=0:4; x2=6;

n=min([n1,n2]):max([n1,n2]); %为x信号建立时间序列n n3=n+2; n4=n-2; n5=2-n;

N=length(n) %求时间序列n的点数N; y1=zeros(1,N); %新建一维N列的y1全0数组 y2=zeros(1,N); %新建一维N列的y2全0数组 y1(find((n>=min(n1))&(n<=max(n1))))=x1; %为y1赋值 y2(find((n>=min(n2))&(n<=max(n2))))=x2; %为y2赋值 x=y1+y2; %建立信号x y3=2*x %建立信号y3 y4=2*x; %建立信号y4 y5=x; %建立信号y5 subplot(3,1,1);stem(n3,y3,'filled');title('x1(n)'); axis([min(n3),max(n3),1.1*min(y3),1.1*max(y3)]); subplot(3,1,2);stem(n4,y4,'filled');title('x2(n)'); axis([min(n4),max(n4),1.1*min(y4),1.1*max(y4)]); subplot(3,1,3);stem(n5,y5,'filled');title('x3(n)'); axis([min(n5),max(n5),1.1*min(y5),1.1*max(y5)]);

附录一 信号、系统和系统响应 1、理想采样信号序列

(1)首先产生信号x(n),0<=n<=50 n=0:50; %定义序列的长度是50 A=444.128; %设置信号有关的参数 a=50*sqrt(2.0)*pi; T=0.001; %采样率 w0=50*sqrt(2.0)*pi;

x=A*exp(-a*n*T).*sin(w0*n*T); %pi是MATLAB定义的π,信号乘可采用“.*” close all %清除已经绘制的x(n)图形 subplot(3,1,1);stem(x); %绘制x(n)的图形 title(‘理想采样信号序列’);

(2)绘制信号x(n)的幅度谱和相位谱 k=-25:25;

W=(pi/12.5)*k;

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)改变参数为:

n=0:50; %定义序列的长度是50 A=1; %设置信号有关的参数 a=0.4;

T=1; %采样率 w0=2.0734;

x=A*exp(-a*n*T).*sin(w0*n*T); %pi是MATLAB定义的π,信号乘可采用“.*” close all %清除已经绘制的x(n)图形 subplot(3,1,1);stem(x); %绘制x(n)的图形 title(‘理想采样信号序列’); k=-25:25;

W=(pi/12.5)*k;

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 (‘理想采样信号序列的相位谱’) 2、单位脉冲序列

在MatLab中,这一函数可以用zeros函数实现: n=1:50; %定义序列的长度是50

x=zeros(1,50); %注意:MATLAB中数组下标从1开始 x(1)=1;

close all;

subplot(3,1,1);stem(x);title(‘单位冲击信号序列’); 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 (‘单位冲击信号的相位谱’)

本文来源:https://www.bwwdw.com/article/kxv3.html

Top