信号处理实验文档格式.docx
- 文档编号:20040318
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:47
- 大小:440.66KB
信号处理实验文档格式.docx
《信号处理实验文档格式.docx》由会员分享,可在线阅读,更多相关《信号处理实验文档格式.docx(47页珍藏版)》请在冰豆网上搜索。
给定模拟信号xa(t)=e-1000|t|,t的单位毫秒。
图1.1模拟信号及其频谱
1)利用MATLAB绘制出其时域波形和频谱图(傅里叶变换),估计其等效带宽(忽略谱分量降低到峰值的3%以下的频谱)
2)用两个不同的采样频率对给定的xa(t)进行采样.
a.以Fs=5000样本/秒采样xa(t)得到x1(n).求并画出x1(n),X1(ejw).
b.以Fs=1000样本/秒采样xa(t)得到x2(n).求并画出x2(n),X2(ejw)
3)完成实验报告。
对实验结果分析、讨论。
可能用到的Matlab函数:
fliplr(x),plot(x,y)。
左图1.1为xa(t)的实验结果示意。
二.非带限信号的取样
1.原理
有一指数型衰减信号x(t)=e-atcos(2pf0t),采样频率fs=1/T.为方便,重写成复指数形式x(t)=e-atej2f0t,
采样后的信号为x(nT)=e-aTnej2f0Tn,加窗后的长度为L的形式xL(nT)=x(nT),n=0,1,…,L-1.这三个信号的幅度谱分别为:
模拟信号幅度谱:
|X(f)|2=
采样信号幅度谱:
|
(f)|2=
加窗信号幅度谱:
L(f)|2=
且满足如下关系:
L(f)=
(f)
T
(f)=X(f)
2.实验内容
取a=0.2sec-1,f0=0.5Hz,采样频率fs=1Hz和fs=2Hz,L=10.
1)在同一张图上画出:
模拟信号幅度谱|X(f)|2;
fs=1Hz和fs=2Hz时,采样信号幅度谱|T
(f)|2(0≤f≤3Hz);
-1-
2)在同一张图上画出:
模拟信号幅度谱|X(f)|;
fs=2Hz时,采样信号幅度谱|T
(f)|2;
加窗后信号幅度谱|T
L(f)|2,(0≤f≤3Hz);
改变L值,结果又如何?
分析图形结果.上述极限的含义?
上述复信号和实际实信号处理的主要区别是什么?
图1.2为示意结果。
subplot,plot,axis,xlable,etc.
三.理想采样、平顶采样、自然采样对信号频谱的影响
1.基本原理
信号的理想采样、平顶采样、自然采样由图1.3示意。
设原模拟信号为xa(t);
p(t)为宽度为t,周期为T的矩形脉冲串;
p(t)=周期为T的理想冲击序列。
则
理想采样得信号:
xa'
(t)=xa(t)p(t)
=Sn=-xa(nT)d(t-nT),
t为连续变量
平顶采样得信号:
'
(t)=Sn=-xa(nT)[u(t-nT)-u(t-nT-t)],
自然采样得信号:
xa'
(t)=xa(t)pT(t)
=Sn=-xa(t)[u(t-nT)-u(t-nT-t)],
t为连续变量
取xa(t)=e-atcos(2pf0t),a=0.2sec-1,f0=0.5Hz,采样频率fs=2Hz,L=20.t³
0.
1)编写MatLab程序,画出上述3种采样得到的信号时域波形。
2)编写程序,画出上述3种采样序列的频谱分布。
提示:
已知信号的时域序列时,可以用MatLab内部函数fft().m直接得到信号的频谱。
具体函数的使用句法可查阅MatLab的help。
3)比较得到的3种频谱特征,分析不同的采样方式得到的序列的频谱有何异同?
4)你可以改变本节所用的相关参数,如取样脉冲的宽度t,再进行仿真实验。
总结实验结果,分析对实际应用的采样过程,有何指导意义?
-2-
-3-
专题二.离散时间系统,卷积
通过5个子模块的计算机仿真实验,使学生加深理解卷积运算、卷积滤波的概念和快速卷积的实现。
复习卷积运算与信号经过LTI系统的关系,卷积滤波的物理含义。
学会用Matlab编制简单的算法程序。
概述:
线性系统的最重要的运算是“线性卷积”。
FIR滤波器常用线性卷积实现。
DFT是在频域实现线性系统的实用近似方法,尤其是FFT可快速地完成DFT。
但DFT的结果是“圆周卷积”,与“线性卷积”是不同的。
当“圆周卷积”的点数等于或大于“线性卷积”的结果序列点数时,两者可得到同样的结果。
实现用快速的“圆周卷积”完成“线性卷积”。
图2.1卷积运算的中间结果
一.线性卷积运算
Matlab基本函数中有卷积函数conv(x,y);
可以直接调用,计算线性卷积。
但下面的程序为深入理解卷积的运算过程提供了演示工具。
图2.1为运算中间结果。
例2.1线性卷积验示程序
clear
x1s=ones(1,8);
%输入x数组
lx=length(x1s);
h1s=exp(-0.1*[1:
15]);
%输入h数组
lh=length(h1s);
lmax=max(lx,lh);
iflx>
lhnx=0;
nh=lx-lh;
%ifxislongerthanh,addnhzerostoh
elseiflx<
lhnx=lh-lx;
nh=0;
%ifhislongerthanx,addnxzerostox
elsenx=0;
%x,hareinthesamelength,nozerosadded
end
dt=0.5;
%dt运算时间间隔;
lt=lmax;
%取长者为补零长度基准
%先将x补得与h同长,再两边补上同长度的零
x=[zeros(1,lt),x1s,zeros(1,nx),zeros(1,lt)];
t1=(-lt+1:
2*lt)*dt;
%totallengthoft1is3*lmax
%将h补得与u同长,再前面补上2*lt长度的零
h=[zeros(1,2*lt),h1s,zeros(1,nh)];
hf=fliplr(h);
%将h的左右翻转,记为hf
y=zeros(1,3*lt);
%y数组初始化
fork=0:
2*lt
p=[zeros(1,k),hf(1:
end-k)];
%使hf向右循环移位,hf(1:
end-k)=hf(1:
3*lt-k)
y1=x.*p*dt;
%使输入和翻转移位的脉冲过渡函数逐项相乘,再乘dt
yk=sum(y1);
%相加,等效于积分
y(k+lt+1)=yk;
%将结果放入数组y
-4-
%axis把各子图的横坐标统一起来,纵坐标随数据自动调整
subplot(4,1,1);
stairs(t1,x)
%stairs是避免在突跳点形成斜边
axis([-lt*dt,2*lt*dt,min(x),max(x)]),holdon;
ylabel('
x(t)'
);
subplot(4,1,2);
stairs(t1,p)
axis([-lt*dt,2*lt*dt,min(p),max(p)]),
h(k-t)'
subplot(4,1,3);
stairs(t1,y1)
axis([-lt*dt,2*lt*dt,min(y1),max(y1)+eps]),
s=x*h(k-t)'
subplot(4,1,4);
stem(k*dt,yk)%用stem表示每次卷积和的结果
axis([-lt*dt,2*lt*dt,floor(min(y)+eps),ceil(max(y)+eps)]),
holdon,ylabel('
y(k)=sum(s)*dt)'
ifk==round(0.8*lt)disp('
pausepressanykeytocountinue'
),pause
图2.2含位置信息的卷积运算结果
elsepause
(1),
2.实验内容:
给出以下两个序列:
x(n)=[3,11,7,0,-1,4,2],-3≤n≤3;
h(n)=[2,3,0,-5,2,1],-1≤n≤4
试求其卷积y(n)=x(n)*h(n),并画出x(n),h(n),y(n)的波形,横坐标对齐。
编写Matlab程序,写出实验报告。
图2.2为实验结果示意。
Matlab中,有限长序列可用一向量表示,但Matlab的数组下标不许取负值,无法表示采样位置信息。
完全表示数字序列x(n),要用x,n两个向量。
如题目中的x(n)在matlab中表为:
x=[3,11,7,0,-1,4,2];
nx=[-3:
3]%是序列x(n)的采样时间点序列。
考虑到采样位置信息的序列卷积可用下列自编的卷积函数实现(Matlab基本函数库中没有,建议卷积运算均用此扩展的函数):
function[y,ny]=conv_m(x,nx,h,nh)%ny是输出y(n)的时间点序列。
nyb=nx
(1)+nh
(1);
nye=nx(length(x))+nh(length(h));
ny=[nyb:
nye];
y=conv(x,h);
二.滤波的思想实现卷积
当已知输入序列x(n)是有限长的,LTI系统的脉冲响应h(n)是无限长序列。
欲求其系统输出y(n),
方法1:
对h(n)取足够长的一段,用扩展的卷积函数conv_m.m计算。
见程序库中jj4.m
方法2:
由h(n)写出LTI系统的差分方程,此差分方程两边:
输出y(n),…,y(n-i)等、输入x(n),…,x(n-k)等的系数,就是该系统(滤波器)传输函数的分母,分子多项式的系数a(i),b(i)。
这时可用filter(b,a,x)函数。
输入是有限序列:
x(n)=u(n)-u(n-10),而脉冲响应是无限序列:
h(n)=(0.9)nu(n),
-5-
编写Matlab程序,利用内部库函数filter(),求y(n)=x(n)*h(n).并画出x(n),h(n),y(n)波形。
3.完成实验报告。
提示:
1)学习函数filter(b,a,x)的使用。
2)由脉冲响应h(n)求出LTI系统的差分方程描述,则y(n)可由filter()函数求得.由h(n)的表示式(0.9)h(n-1)=(0.9)(0.9)n-1u(n-1)=(0.9)nu(n-1)
或h(n)-(0.9)h(n-1)=(0.9)nu(n)-(0.9)nu(n-1)
=(0.9)n[u(n)-u(n-1)]=(0.9)n(n)
=(n)
图2.3信号x(n)经系统h(n)的输出y(n)
最后一步是因为(n)只在n=0处非零.根据定义,h(n)是输入为(n)时LTI系统的输出.因此可把(n)换成x(n),h(n)换成y(n),差分方程为:
y(n)-0.9y(n-1)=x(n)
现在MATLAB的filter()函数可以间接用来计算卷积了.
其中阶跃序列可用下函数实现:
%阶跃函数stepseq.m
function[x,n]=stepseq(n0,n1,n2)
n=[n1:
n2];
x=[(n-n0)>
=0];
)
图2.3的输出是同时画出x(n),h(n)的结果。
三.圆周卷积
两个N1、N2点序列的线性卷积结果是长N1+N2-1的序列。
如果卷积中两序列均为N点,且移位用圆周移位代替线性移位,则称N点圆周卷积,卷积结果仍是N点序列。
圆周卷积与线性卷积的关系:
1)当N=N1+N2-1时,N点圆周卷积就是线性卷积。
2)圆周卷积中两序列长不等于N时,要后补零构成N点的序列,结果才是相应的线性卷积。
3)圆周卷积定理:
两序列DFT的乘积等于此两序列圆周卷积的DFT。
该定理给出了时域圆周卷积的快速算法,也隐含了线性卷积的快速算法。
可以由两种途径得到:
时域(按定义)及频域(DFT)
下面的函数程序给出时域和频域计算圆周卷积的算法。
(1)在时域中计算圆周卷积。
(MATLAB代码如下)
%circonvt.m
functiony=circonvt(x1,x2,N)
%在x1和x2:
(时域)之间的N点圆周卷积
%-----------------------------------------
%[y]=circonvt(x1,x2,N)
%y=包含圆周卷积的输出序列
%x1=长度N1<
=N的输入序列
%x2=长度N2<
%N=循环缓冲器的大小
%方法y(n)=sum(x1(m)*x2((n-m)modN))
%检查x1的长度:
iflength(x1)>
N
error('
N必须>
=x1的长度'
%检查x2的长度:
iflength(x2)>
=x2的长度'
x1=[x1zeros(1,N-length(x1))];
x2=[x2zeros(1,N-length(x2))];
m=[0:
1:
N-1];
x2=x2(mod(-m,N)+1);
H=zeros(N,N);
forn=1:
H(n,:
)=cirshftt(x2,n-1,N);
y=x1*H'
;
其中包含的子函数:
%cirshftt.m
functiony=cirshftt(x,m,N)
%长度为N的x序列:
(时域)作m个样本的循环移位
%---------------------------------------
%[y]=cirshftt(x,m,N)
%y=包含循环移位的输出序列
%x=长度<
%m=移位样本数
%N=循环缓冲器长度
%方法:
y(n)=x((n-m)modN)
%检查x的长度
iflength(x)>
=x的长度'
x=[xzeros(1,N-length(x))];
n=[0:
n=mod(n-m,N);
y=x(n+1);
%mod.m
functionm=mod(n,N)
%计算m=(nmodN)下标
m=rem(n,N);
m=m+N;
m=rem(m,N);
(2)在频域中计算圆周卷积(MATLAB代码)
%circonvf.m
functiony=circonvf(x1,x2,N)
(频域)之间的N点圆周卷积
%[y]=circonvf(x1,x2,N)
%方法y(n)=IDFT(X1(k).X2(k))
iflength(x1)>
-6-
X1=dft(x1,N);
X2=dft(x2,N);
X=X1.*X2;
Y=idft(X,N)
y=real(Y);
%dft.m
function[Xk]=dft(xn,N)
%计算离散傅里叶变换
%-----------------------------------
%[Xk]=dft(xn,N)
%Xk=在0<
=n<
=N-1间的DFT系数数组
%xn=N点有限持续时间序列
%N=DFT的长度
%
%n的行向量
k=[0:
%k的行向量
WN=exp(-j*2*pi/N);
%Wn的因子
nk=n'
*k;
%产生一个含nk值的N乘N维矩阵
WNnk=WN.^nk;
%DFT矩阵
Xk=xn*WNnk;
%DFT系数的行向量
%idft.m
function[xn]=idft(Xk,N)
%计算逆离散傅里叶变换
%-----------------------------
%[xn]=idft(Xk,N)
%xn=在0<
=N-1间的N点有限持续时间序列
=k<
%k的行向量
%产生一个含nk值的N乘N维矩阵
WNnk=WN.^(-nk);
%IDFT矩阵
xn=(Xk*WNnk)/N;
%IDFT的行向量
图2.4圆周卷积与线性卷积的关系
设x1(n)={1,2,2},x2(n)={1,2,3,4},编写Matlab程序,计算:
(1)5点圆周卷积y1(n)
(2)6点圆周卷积y2(n)
(3)线性卷积y3(n)
(4)画出的y1(n),y2(n),y3(n)波形,时间轴对齐。
3.完成实验报告:
根据实验结果,讨论圆周卷积与线性卷积的结果。
图2.4为实验结果示意。
四.分段卷积
-7-
如果N很大,必须用分段卷积的方法进行DFT处理,这种处理思想更便于对数字信号进行实时处理。
常见的分段卷积法有:
重叠保留法,重叠相加法.
●重叠相加:
把x(n)分成长为L的小段xk(n),每段与h(n)(h(n)的长度为M)的线性卷积通过快速卷积计算,把割断的卷积加起来,就近似是系统输出.各段圆周卷积结果有N-L=M-1点的重叠.
●重叠保留:
把x(n)分成长为L的小段xk(n),每段与前一段重叠M-1个样本的多段,保留后面的(L-M+1)个输出样本,最后把这些输出连成一个序列.
下面的函数程序给出这两种分段卷积的算法。
(1)算法(MATLAB代码)
a.重叠保留法
%ovrlpsav.m
function[y]=ovrlpsav(x,h,N)
%用重叠保留法作分段卷积
%----------------------------------
%[y]=ovrlpsav(x,h,N)
%y=输出序列
%x=输入序列
%h=脉冲响应
%N=段长
Lenx=length(x);
M=length(h);
M1=M-1;
L=N-M1;
h=[hzeros(1,N-M)];
x=[zeros(1,M1),x,zeros(1,N-1)];
%预置(M-1)个零
K=floor((Lenx+M1-1)/(L));
%段数
Y=zeros(K+1,N);
%与后续各段卷积
K
xk=x(k*L+1:
k*L+N);
Y(k+1,:
)=circonvt(xk,h,N);
Y=Y(:
M:
N)'
%去掉前(M-1)个样本
y=(Y(:
))'
%转成输出
b.重叠相加法
%ovrlpadd.m
function[y]=ovrlpadd(x,h,N)
%用重叠相加法作分段卷积
%[y]=ovrlpadd(x,h,N)
lenx=length(x);
%x的长度
M=length(h);
%h的长度
N1=N+M-1;
%圆周卷积点数,即每一个输出序列Yi的长度
m=rem(lenx,N);
%求余
ifm~=0
x=[xzeros(1,N-m)];
%末尾补零,使每段长度为N
K=floor(lenx/N)+1;
else
x=x;
K=floor(lenx/N);
end
ytemp=zeros(1,N1-N);
%N1-N为重叠部分,使其初始化为零
n1=1;
n2=N;
fork=1:
xk=x(n1:
n2);
-8-
Y(k,:
)=circonvt(xk,h,N1);
图2.5两种分段卷积运算
fori=1:
N1-N
Y(k,i)=Y(k,i)+ytemp(i);
ytemp(i)=Y(k,i+N);
y(n1:
n2)=Y(k,1:
N);
%输出结果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信号 处理 实验