数字信号处理MATLAB仿真(2)

2019-03-22 20:10

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);


数字信号处理MATLAB仿真(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:外科护理学普外科复习题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: