书稿MATLAB部分915.docx

上传人:b****6 文档编号:6989703 上传时间:2023-01-15 格式:DOCX 页数:30 大小:371.12KB
下载 相关 举报
书稿MATLAB部分915.docx_第1页
第1页 / 共30页
书稿MATLAB部分915.docx_第2页
第2页 / 共30页
书稿MATLAB部分915.docx_第3页
第3页 / 共30页
书稿MATLAB部分915.docx_第4页
第4页 / 共30页
书稿MATLAB部分915.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

书稿MATLAB部分915.docx

《书稿MATLAB部分915.docx》由会员分享,可在线阅读,更多相关《书稿MATLAB部分915.docx(30页珍藏版)》请在冰豆网上搜索。

书稿MATLAB部分915.docx

书稿MATLAB部分915

第1章

例1-离散时间信号产生。

编写程序产生下列基本脉冲

(1)单位脉冲序列:

起点ns,终点ne,在n0处有一单位脉冲(ns≤n0≤ne)。

(2)单位阶跃序列:

起点ns,终点ne,在n0前为0,在n0处及以后为1(ns≤n0≤ne)。

(3)实数指数序列:

(4)正弦序列:

程序如下:

ns=0;ne=15;n0=5;

n1=ns:

ne;x1=[(n1-n0)==0];%单位脉冲序列

n2=ns:

ne;x2=[(n2-n0)>=0];%单位阶跃序列

n3=ns:

ne;x3=(0.9).^n3;%实数指数序列

n4=ns:

ne;x4=sin(n4);%正弦序列

subplot(2,2,1),stem(n1,x1);

title('单位脉冲序列')

subplot(2,2,2),stem(n2,x2);

title('单位阶跃序列')

subplot(2,2,3),stem(n3,x3);

title('实数指数序列')

subplot(2,2,4),stem(n4,x4);

title('正弦序列')

运行结果如图1-所示。

图1-基本脉冲序列

例1-动态演示信号序列

卷积和的过程

程序如下:

clear

len_x1=20;

len_x2=20;

nx1=0:

len_x1-1;%建立x1的时间向量

x1=0.6.^nx1;%建立x1序列

%len_x1=length(nx1);%取x1时间向量的长度

nx2=0:

len_x2-1;%x2的时间向量

%len_x2=length(nx2);%取x2的时间向量的长度

x2=ones(1,len_x2);%建立x2序列

lmax=max(len_x2,len_x1);%求最长的序列

iflen_x2>len_x1nx2=0;nx1=len_x2-len_x1;%若x2比x1长,对x1补nx1个0

elseiflen_x2

elsenx2=0;len_x1=0;%若x1和x2同长,不补0

end%长者为补0长度的基础

lt=lmax;%先将x2补得与x1同长,再将两边补最大长度的0

u=[zeros(1,lt),x2,zeros(1,nx2),zeros(1,lt)];

t1=(-lt+1:

2*lt);%先将x1补得与x2同长,再将左边补2倍最大长度的0

x1=[zeros(1,2*lt),x1,zeros(1,nx1)];%将x1左右反折

hx1=fliplr(x1);

N=length(hx1);

y=zeros(1,3*lt);%将y存储单元初始化

fork=0:

2*lt%动态演示绘图

p=[zeros(1,k),hx1(1:

N-k)];%使hx1向右循环移位

y1=u.*p;%使输入和翻转移位的脉冲过渡函数逐项相乘

yk=sum(y1);%相加

y(k+lt+1)=yk;%将结果放入数组y

subplot(4,1,1);stem(t1,u);

subplot(4,1,2);stem(t1,p);

subplot(4,1,3);stem(t1,y1);

subplot(4,1,4);stem(k,yk);%通过图形表示每一次卷积的结果

axis([-10,50,0,5]);holdon%在图形窗口上保留每一次运行的图形结果

pause(0.5);%停滞0.5秒

end

第2章

例2-求以下序列的

变换:

程序如下:

symsaznw%把字符aznw定义为基本的符号对象

x1=a^n;X1=ztrans(x1)%求x1的z变换

x2=n-1;X2=ztrans(x2)

x3=(n*(n-1))/3;X3=ztrans(x3)

x4=exp(j*w*n);X4=ztrans(x4)

运行结果如下:

X1=z/a/(z/a-1)

X2=z/(z-1)^2-z/(z-1)

X3=1/3*z*(z+1)/(z-1)^3-1/3*z/(z-1)^2

X4=z/exp(i*w)/(z/exp(i*w)-1)

例2-求下列函数的

的反变换:

程序如下:

symsnza%把anz定义为基本的符号对象

X1=z/(z-1);x1=iztrans(X1)%求X1的z的反变换

X2=z/(1-z)^3;x2=iztrans(X2)

X3=z/(z-a)^2;x3=iztrans(X3)

运行结果如下:

x1=1

x2=1/2*n-1/2*n^2

x3=a^n*n/a

例2-已知

,试用部分分式法求

的反变换,并画

程序如下:

b=[1,0,0];

a=[1,-3,2];

[rpc]=residuez(b,a);%把b(z)/a(z)展开成部分分式

N=15;

n=0:

N-1;

x=r

(1)*p

(1).^n+r

(2)*p

(2).^n;

stem(n,x);

title('x(n)');

在命令窗口中将显示:

r=

2

-1

p=

2

1

c=

0

所以多项式分解后表示为:

运行结果如下:

图2-部分分式法求

例2-研究

右半平面的实数极点对系统响应的影响。

已知系统的零-极点模型分别为:

求这些系统的零极点分布图以及系统的冲激响应,判断系统的稳定性。

程序如下:

z1=[0]';p1=[0.5]';k=1;%输入零极点增益模型零点向量z、极点向量p和增益系数k

[b1,a1]=zp2tf(z1,p1,k);%求系数传递函数(tf)模型中分子、分母多项式的系数向量

subplot(3,2,1),zplane(z1,p1);%由零点和极点向量绘制零极点分布图

ylabel('极点在单位圆内');

subplot(3,2,2),impz(b1,a1,15);%绘制数字系统的冲激响应,取样点数为15

z2=[0]';p2=[1]';

[b2,a2]=zp2tf(z2,p2,k);

subplot(3,2,3),zplane(z2,p2);

ylabel('极点在单位圆上');

subplot(3,2,4),impz(b2,a2,15);

z3=[0]';p3=[2]';

[b3,a3]=zp2tf(z3,p3,k);

subplot(3,2,5),zplane(z3,p3);

ylabel('极点在单位圆外');

subplot(3,2,6),impz(b3,a3,15);

运行结果如下:

图2-右半平面极点对系统响应影响图

由MATLAB结果图可见,这3个系统的极点均为实数且处于z平面的右半平面。

当极点处于单位圆内,系统的冲激响应曲线随着频率的增大而衰减;当极点处于单位圆上时,系统的冲击响应曲线为等幅振荡;当极点处于单位圆外时,系统的冲击响应曲线随着频率的增大而发散。

第3章

例3-已知两个周期序列分别为

,动态演示它们的周期卷积和

程序如下:

clear

n=0:

5;%建立时间向量序列n

xn1=[0,2,1,1,0,0];%建立xn1的序列主值

xn2=[0,1,1,0,0,0];%建立xn2的序列主值

N=length(xn1);

nx=(-N:

3*N-1);

hxn2=xn2(mod(nx,N)+1);%将xn2序列周期严拓

u=[zeros(1,N),xn2,zeros(1,2*N)];%按xn2周期严拓后的长度重建主值信号

xn12=fliplr(xn1);%将xn1做左右反折

hxn1=xn12(mod(nx,N)+1);%将xn1反折后的序列周期严拓

N1=length(hxn1);

y=zeros(1,4*N);%将y存储单元初始化

fork=0:

N-1%动态演示开始

p=[zeros(1,k+1),hxn1(1:

N1-k-1)];%使hxn1向右循环移位

y1=u.*p;%使输入和翻转移位的脉冲过渡函数相乘

yk=sum(y1);%相乘之后再相加

y([k+1,k+N+1,k+2*N+1,k+3*N+1])=yk;%将结果放入数组y

subplot(4,1,1);stem(nx,hxn2);

axis([-1,3*N,0,1.1]);ylabel('x2(n)');

subplot(4,1,2);stem(nx,p);

axis([-1,3*N,0,3.3]);ylabel('x1(n)');

subplot(4,1,3);stem(k,yk);%作图表示主值区每一次卷积的结果

axis([-1,3*N,0,6.6]);holdon%在图形窗口上保留每一次运行的图形结果

ylabel('主值区');

subplot(4,1,4);stem(nx,y);

axis([-1,3*N,0,6.6]);ylabel('卷积结果');

pause(3);%停滞3秒

end

例3-求矩形序列的DTFT。

程序如下:

N=8;

xn=ones(1,N);

n=0:

N-1;

w=linspace(0,2*pi,200);%将[0,2π]频率区间分割成200份

X=xn*exp(-j*n'*w);%离散时间的傅里叶变换

subplot(3,1,1),stem(n,xn,'k');

ylabel('x(n)');

subplot(3,1,2),plot(w,abs(X),'k');%显示幅度谱

axis([-2*pi,2*pi,1.2*min(abs(X)),1.2*max(abs(X))]);

ylabel('幅度谱');

subplot(3,1,3),plot(w,angle(X),'k');%显示相位谱

axis([-2*pi,2*pi,1.2*min(angle(X)),1.2*max(angle(X))]);

ylabel('相位谱');

运行结果如下:

图3-矩形序列的DTFT

例3-求矩形序列的DFT,并与上例进行比较。

程序如下:

N=8;

xn=ones(1,N);

n=0:

N-1;

k=0:

N-1;

Xk=xn*exp(-j*2*pi/N).^(n'*k);%离散傅里叶变换

L=50;

yn=[xn,zeros(1,L-8)];%将x(n)有限长序列补足至50

m=0:

L-1;

t=0:

L-1;

Yk=yn*exp(-j*2*pi/L).^(m'*t);%离散傅里叶变换

subplot(2,2,1),stem(n,xn);%绘制原信号序列

title('x(n)');

subplot(2,2,2),stem(m,yn);

title('y(n)');

subplot(2,2,3),stem(k,abs(Xk));%傅里叶变换所对应的图形

title('|X(k)|');

subplot(2,2,4),stem(t,abs(Yk));

title('|Y(k)|');

运行结果如下:

图3-矩形序列的DFT

序列的DFT是DTFT周期内的等间隔采样,上图首先给出8点矩形序列的DTFT,然后给出通过补零加长为50点后的DTFT。

通过对比发现补零后,频谱的采样间隔变密,保留了更多的原信号的频谱特征。

第4章

例4-:

已知一个8点的时域非周期离散

信号和阶跃信号

,用

点进行FFT变换,作其时域信号图及信号频谱图。

程序如下:

n0=2;ns=0;ne=7;N=32;

n=ns:

ne;

W1=[(n-n0)==0];%建立时间信号

W2=[(n-n0)>=0];

i=0:

N-1;%频率样点自0开始

y1=fft(W1,N);

Aw1=abs(y1);%求幅度谱

y2=fft(W2,N);

Aw2=abs(y2);

subplot(2,2,1);stem(n,W1);

subplot(2,2,2);stem(n,W2);

subplot(2,2,3);plot(i,Aw1);

subplot(2,2,4);plot(i,Aw2);

运行结果如下:

图4-单位脉冲序列和单位阶跃信号及其频谱

例4-用FFT计算下列连续时间信号的频谱,并讨论

值对频谱特性的影响。

程序如下:

T0=[1,0.5,0.25,0.25];%输入不同的Ts值

N0=[256,256,256,1024];%输入不同的N值

form=1:

4;

Ts=T0(m);N=N0(m);%赋Ts和N值

n=0:

N-1;

D=2*pi/(Ts*N);%计算模拟频率分辨率

xa=sin(n*Ts)+sin(1.1*n*Ts)+sin(1.18*n*Ts);

k=floor(-(N-1)/2:

(N-1)/2);

Xa=Ts*fftshift(fft(xa,N));

[m,Xa

(1)]

subplot(2,2,m);plot(k*D,abs(Xa),'k');

axis([0,3,1.1*min(abs(Xa)),1.1*max(abs(Xa))]);

end

图4-FFT时不同

值对频谱特性的影响

,从图中可以看出,相同的

下,

越大,所取的时域信号长度

越长,则频率分辨率越高;相同的

下,

越大,则在频域抽样点数增加,则频率分辨率越高。

第5章

例5-已知系统的传递函数为

,将其从直接型转换为级联型和并联型。

从直接型转换为级联型,就是将系统传递函数模型(tf)转换为二次分式(sos)模型;从直接型转换为并联型,就是将系统的传递函数模型转换为极点留数(rpk)模型。

程序如下:

b=[4,-2,7,-2];%输入系统函数b参数

a=[1,-1.5,0.5,-0.75];%输入系统函数a参数

[sos,g]=tf2sos(b,a)%由直接型转换为级联型

[r,p,k]=residuez(b,a)%由直接型转换为并联型

运行结果如下:

sos=

1.0000-0.295901.0000-1.50000

1.0000-0.20411.68961.0000-0.00000.5000

g=

4

r=

4.2424

-1.4545+1.6713i

-1.4545-1.6713i

p=

1.5000

0.0000+0.7071i

0.0000-0.7071i

k=

2.6667

由sos和g的数据,可以写出级联型的表达式

由r、p、k的数据,可以列写出并联型的表达式

例5-已知一个FIR系统的传递函数为

,将其从级联型转换为横截型。

程序如下:

sos=[1,-2,3,1,0,0;1,-4,5,1,0,0];%输入sos参数

g=4;%输入g参数

[b,a]=sos2tf(sos,g)%由级联型转换为直接型

运行结果如下:

b=

4-2464-8860

a=

1000

由a和b的数据,可以写出级联型的表达式

第6章

例6-采用MATLAB直接法设计一个巴特沃斯型数字带通滤波器,要求:

;

描绘滤波器归一化的绝对和相对幅频特性、相频特性、零极点分布图,列出系统传递函数

程序如下:

ws1=0.2;ws2=0.8;%数字滤波器的阻带截止频率

ws=[ws1,ws2];

wp1=0.4;wp2=0.6;%数字滤波器的通带截止频率

wp=[wp1,wp2];

Rp=1;As=10;%输入滤波器的通阻带衰减指标

[n,wc]=buttord(wp,ws,Rp,As)%计算阶数n和截止频率

[b,a]=butter(n,Rp,wc)%直接求数字带通滤波器的系数

[H,w]=freqz(b,a);%求数字系统的频率特性

dbH=20*log10((abs(H)+eps)/max(abs(H)));%化为分贝值

subplot(2,2,1),plot(w/pi,abs(H));

title('幅度相应');

subplot(2,2,2),plot(w/pi,angle(H));

title('相位相应');

subplot(2,2,3),plot(w/pi,dbH);

title('幅度相应(dB)');

subplot(2,2,4),zplane(b,a);

title('零极点图');

程序执行结果:

n=2

wc=0.28630.7137

b=0.22920-0.458400.2292

a=1.0000-0.00000.2675-0.00000.1843

传递函数为

图形如下图所示

图6-巴特沃斯型数字带通滤波器设计

第7章

例7-用矩形窗设计一个FIR数字滤波器,要求:

N=16,截止频率为

,绘制理想和实际滤波器的脉冲响应、窗函数及滤波器的幅频响应曲线。

程序如下:

wc=0.5pi;%输入设计指标

N=16

tao=(N-1)/2;

n=0:

N-1;

m=n-tao+eps;

hd=sin(wc*m)./(pi*m);

windows=(boxcar(N))';%使用矩形窗,将列向量变为行向量

b=hd.*windows;%求FIR系统函数系数

[H,w]=freqz(b,1);%求解频率特性

dbH=20*log10((abs(H)+eps)/max(abs(H)));%化为分贝值

subplot(2,2,1),stem(n,hd);

axis([0,N,1.1*min(hd),1.1*max(hd)]);title('理想脉冲响应');

xlabel('n');ylabel('hd(n)');

subplot(2,2,2),stem(n,windows);

axis([0,N,0,1.1]);title('窗函数特性');

xlabel('n');ylabel('wd(n)');

subplot(2,2,3),stem(n,b);

axis([0,N,1.1*min(b),1.1*max(b)]);title('实际脉冲响应');

xlabel('n');ylabel('h(n)');

subplot(2,2,4),plot(w/pi,dbH);

axis([0,1,-80,10]);title('幅度频率响应');

xlabel('频率(单位:

\pi)');ylabel('H(e^{j\omega})');

set(gca,'XTickMode','manual','XTick',[0,wc/pi,1]);

set(gca,'YTickMode','manual','YTick',[-50,-20,-3,0]);grid

运行结果如下:

图6-FIR数字带通滤波器设计

13.FDATool工具

FDATool是MATLAB中的一个图形化的滤波器设计与分析工具。

利用FDATool这一工具,我们可以进行FIR和IIR数字滤波器的设计,并且能够显示数字滤波器的幅频响应、相位响应以及零极点分布图等。

产生的数字滤波器系数在存储为文件后,可以直接提供给DSP程序代码调试工具—CCS或DSP存储器,以完成实际的数字滤波器的调试程序,从而实现实际的滤波器。

和在MATLAB命令窗口中输入命令设计滤波器相比,利用FDATool工具设计滤波器更加直观、方便。

在MATLAB命令窗口中输入命令“fdatool”将打开FDATool工作界面,如图1所示:

图1FDATool工作界面

下面通过一个实例来介绍FDATool工具的使用方法。

例子:

已知数据采样频率为1000Hz,现要设计一6阶的巴特沃斯低通滤波器,截止频率为200Hz,求其幅度响应、相位响应、脉冲响应、零极点图、滤波器系数等。

具体步骤如下

(1)根据任务首先确定滤波器种类、类型等指标。

本题应选用Lowpass、IIR、巴特沃思滤波器。

(2)根据指标给定的阶数【FilterOrder】一栏中应选择【SpecifyOrder】,并输入滤波器的阶数,输入采样频率、截止频率等指标。

(3)指标输入完后,按【DesignFilter】进行滤波器设计,将显示图2的结果

(4)观察滤波器的其它响应形式。

利用菜单按钮可以观察其幅度响应、相位响应、脉冲响应、零极点图、滤波器系数等。

图3给出了滤波器的幅度响应、相位响应、冲激响应、和零极点图。

显示当前滤波器的幅度响应。

显示当前滤波器的相位响应。

同时显示当前滤波器的幅度和相位响应。

显示当前滤波器的群延迟响应。

显示当前滤波器的相延迟。

显示当前滤波器的脉冲响应。

显示当前滤波器的阶跃响应。

显示当前滤波器的零极点的位置。

列出了当前滤波器的系数。

列出了当前滤波器的相关信息。

图2滤波器设计结果

a)幅度响应b)相位响应

c)冲激响应d)零极点图

图3滤波器的其它响应形式

a)幅度响应b)相位响应c)冲激响应d)零极点图

利用以上例子,我们可以在MATLAB命令窗口中输入命令来设计滤波器,并和使用fdatool工具设计的结果进行对比。

MATLAB中设计滤波器及查看相应特性的命令如下:

滤波器系数:

[b,a]=butter(6,200/1000*2)%Wn=fc/(Fs/2)

幅度响应、相位响应:

freqz(b,a,128,1000)

冲激响应:

impz(b,a)

零极点图:

zplane(b,a)

在MATLAB命令窗口中输入上述命令后,MATLAB将给出所要设计的滤波器的系数并绘制出该滤波器的幅度响应、相位响应、冲激响应和零极点图,图形结果如图4所示。

从图中可以看出使用Matlab命令设计的滤波器特性和使用fdatool工具设计出来的滤波器特性结果基本一致。

a)幅度响应b)相位响应

c)冲激响应d)零极点图

图4Matlab命令设计的滤波器特性

a)幅度响应b)相位响应c)冲激响应d)零极点图

14.SPTool工具

SPTool是MATLAB工具箱中自带的交互式图形信号处理工具,它包含了信号处理工具箱中的大部分函数,可以方便快捷地完成对信号、滤波器及频谱的分析、设计和浏览。

从工程角度看SPTool是一个非常实用的工具。

以下我们将结合例子来具体说明该工具的使用方法。

在MATLAB命令窗口中输入“sptool”,将打开SPTool工作界面,如图5所示:

下面通过一个实例说明SPATool工具的使用方法,

例子:

系统采样频率为1024Hz,产生100Hz和400Hz的合成正弦波,观察信号波形和频谱;设计滤波器去除400Hz分量,观察滤波后的信号波形和频谱。

(1)在MATLAB命令窗口中输入“sptool”,打开SPTool工

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1