西邮DXP基于matlab的数字信号处理仿真实习报告.docx
《西邮DXP基于matlab的数字信号处理仿真实习报告.docx》由会员分享,可在线阅读,更多相关《西邮DXP基于matlab的数字信号处理仿真实习报告.docx(22页珍藏版)》请在冰豆网上搜索。
西邮DXP基于matlab的数字信号处理仿真实习报告
实验题目
题目六:
一实验题目:
(提取淹没在噪声中的周期信号)提取淹没在噪声中的周期信号要求自相关(以判断周期)和互相关(以恢复信号自身)。
(a)生成信号x[n]=sin(0.1*n*pi),0
n
499.增加一些均匀分布的随机噪声(其噪声幅度为2,平均值为0)以得到噪声信号s[n]。
作出每个信号随参数n变化的图形。
是否能够从所画的x[n]中判断出任何的周期性?
如果可以,求周期N。
能否由所画得s[n]判断出任何周期性?
(b)求x[n]的周期自相关rpx[n]并作图。
能否由所作的rpx[n]判断出任何周期性?
如果可以,求周期N。
这个N是否与x[n]的周期相同?
(c)利用上面所求的N值(如果没有,则由x[n]判断)生成一个500样本的冲击串
0≤n≤499。
求出s[n]和i[n]的周期互相关。
二:
实验目的
提取淹没在噪声中的周期信号,用Multable编写所要求的内容,并画出图形。
要求自相关(以判断周期)和互相关(以恢复信号自身)。
三:
实验原理:
通过自相关函数判断周期,再利用互相关函数恢复原信号。
互相关说的是两个时间序列之间在任意两个不同时刻的取值之间的相关程度。
互相关函数给出了在频域内的两个信号是否相关的一个判断指标,把两测点之间信号的互谱与各自的自谱联系起来。
它能用来确定输出信号有多大程度来自于输入信号,对修正测量中接入噪声源而产生的误差非常有效。
正基于相关函数的这些特点,所以可以达到实验的目的。
四:
实验步骤简述
首先生成一个信号x(n),画出图形,从所画图形判断其周期性。
判断其周期时,当一个周期不好观察出来时可以在一段时间上看有多少个完整的波形,然后用时间段除以完整波形的个数就可的周期。
叠加上噪声v(n)后,再判断s(n)=x(n)+v(n)的周期性,并画出图形。
做x(n)的自相关r(n),画出图形,并从所画图形判断周期。
在做s(n)的图形,并从所画图形判断出周期。
再生成一个冲击串i(n),做s(n)和i(n)的互相关。
五:
程序框图
六:
源程序
(a)
1)x的代码:
n=0:
1:
500;%n从0到500变化,每间隔为1
x=5*sin(0.1*pi*n);%正弦函数表达式
s='b-';
figure:
subplot(2,1,1),plot(n,x,s);holdon;%画出线条
xlabel('N');%横坐标为N
ylabel('幅度');%纵坐标为“幅度”
2)x的自相关(判断周期)的代码:
n=0:
1:
500;%n从0到500变化,每间隔为1
x=5*sin(0.1*pi*n);%正弦函数表达式
[rxx,n]=xcorr(x);
s='b-';%线条颜色为蓝色
figure;subplot(2,1,1),plot(n,rxx,s);holdon;%画出线条
xlabel('N');%横坐标为N
ylabel('幅度');%纵坐标为“幅度”
3)v(随机噪声)的代码:
v=2*rand(1,500);%产生随机噪声
s='b-';%线条颜色为蓝色
figure;subplot(2,1,1),plot(n,v,s);holdon;%画出线条
xlabel('N');%横坐标为N
ylabel('幅度');%纵坐标为“幅度”
title('v=2*rand(1,500)');%名称为v=2*rand(1,500)
4)y(噪声信号)的代码:
n=1:
1:
500;%n从0到500变化,每间隔为1
x=5*sin(0.1*pi*n);%正弦函数表达式
v=2*rand(1,500);%产生随机噪声
y=x+v;%产生噪声信号
s='b-';%线条颜色为蓝色
figure;subplot(2,1,1),plot(n,y,s);holdon;%画出线条
xlabel('N');%横坐标为N
ylabel('幅度');%纵坐标为“幅度”
title('y=5*sin(0.1*pi*n)+2*rand(0,500)');%名称为y=5*sin(0.1*pi*n)+2*rand(0,500)
5)y的自相关(判断周期)的代码:
n=1:
1:
500;%n从0到500变化,每间隔为1
x=5*sin(0.1*pi*n);%正弦函数表达式
v=2*rand(1,500);%产生随机噪声
y=x+v;%产生噪声信号
[ryy,n]=xcorr(y);
s='b-';%线条颜色为蓝色
figure;subplot(2,1,1),plot(n,ryy,s);holdon;%画出线条
xlabel('N');%横坐标为N
ylabel('幅度');%纵坐标为“幅度”
(c)的代码:
n=0:
499;
x=5*sin(0.1*n*pi);
v=rand(1,500)*2;
s=x+v;
i=(n/20==floor(n/20));%冲击串
re=xcorr(s,i);
N=length(re);
n=1:
N;
subplot(2,2,[1:
2]);
stem(i);
title('冲击串图象');
subplot(2,2,[3:
4]);
plot(n,re);
title('经过躁声的周期性函数与冲击串的互相关图象');
七程序结果及图表
由图形可以判断原函数与其自相关函数的周期是相同的,都为N=20。
1)x的图形:
2)x的自相关图形:
3)v随机噪声的图形:
4)y(噪声信号)的图形:
5)y的自相关图形:
(c)互相关的图形:
根据自相关函数和冲击与原函数的互相关函数图形的一致性可以得出或者说是验了证通过自相关函数判断周期,再利用互相关函数恢复原信号了的这想法。
进而达到实验目的。
八.实验总结
通过此次试验感觉到理论学习和实际动手会有一定的距离,通过图形很直观的就能感受到自相关函数以及互相关函数在实际中的应用而不只是停留在书本上,感觉到理论和实际结合的美妙。
通过这实验也进一步掌握了一定的Mutlab基础知识,在试验中遇到的问题也知道了如何去解决,比如说那自相关函数咋在程序中应用,可以先自己简单的编写一个程序在Mutlab中运行感受这函数咋用。
出错时可以有参考书,或者和同学一块讨论。
题目七:
一实验题目:
该题目的目的是说明一个PN扩频信号在抑制正弦干扰中的有效性。
现考虑下图所示的二进制通信系统,对信号发生器的输出乘上一个二进制(
1)PN序列。
同一个二进制PN序列用来与解调器输入相乘,因此消除了这个PN序列在期望信号上的影响。
信道将传送信号受到一宽带加性噪声序列ω(n)和一正弦干扰序列i(n)=Asinω0n,0<ω0<π的污损。
可以假定A≥M,这里M是来自调制器的每比特的样本数。
用和不用PN序列执行这个仿真系统,并在条件A≥M下,对不同的M值(如M=50,100,500,1000)测量差错率。
画出每种情况的差错率曲线,作比较并说明结论。
说明这个PN序列对于正弦干扰信号的效果。
由此说明为什么PN扩频系统在正弦干扰信号存在下优于常规的二进制通信系统。
二:
实验目的
通过模拟一个通信系统,说明一个PN扩频信号在抑制正弦干扰中的有效性。
三:
实验原理
对于如何去衡量PN扩频信号在抑制正弦干扰中的有效性,采用了横纵比较,在同一长度序列下的不同信噪比的情况下有PN以及没有PN差错率的变化情况。
以及不同长度序列下的比较,基本上可以说是达到比较理想的检验对于PN扩频信号在抑制正弦干扰中的有效性。
通过查询matlab仿真在现代通信中的应用一书了解到扩频通信是将基带信号数据用速率高得多的正交码组调制,实现频谱扩展后再传输,接收端则采用相同的码进行解调处理,恢复原始信息数据。
这种通信方法与常规的窄带通信方式相比信息的频谱扩展后形成宽带传输;相关处理后,恢复成窄带信息数据;抗干扰,抗噪声等。
function[s]=randout(M)该模块使用,采用模块化,每一个模块完成一个功能。
四:
实验步骤简述
二进制序列x(n)与序列p(n)进行调制(即异或),对其结果给一个增益Z,给噪声w(n)增益B,使Z大于正弦信号的幅度A,再与正弦信号i(n)相加,再加上噪声。
设置一个门限,使其将噪声滤除,再与p(n)进行解调(即异或),其结果与输入的二进制序列比较,统计差错率,增加信号的幅度,画出不同信噪比时的差错率曲线。
当没有PN序列时,上述过程中去掉调制与解调,得到另一组差错率曲线。
五:
程序框图
六:
源程序
function[]=ti7()
w0=0.2*pi;
n=4;
while
(1)
N=input('请选择样本数M:
\n1----M=50\n2----M=100\n3----M=500\n4----M=1000\n0----quit\n');
ifN==1
M=50;%二进制序列的长度
A=60;%正弦信号的幅度
Z=90;
B=40;
p(n,A,M,Z,B,w0);
elseifN==2
M=100;
A=110;
Z=150;
B=70;
p(n,A,M,Z,B,w0);
elseifN==3
M=500;
A=550;
Z=700;
B=300;
p(n,A,M,Z,B,w0);
elseifN==4
M=1000;
A=1100;
Z=1200;
B=530;
p(n,A,M,Z,B,w0);
elseifN==0
break;
end
end
%计算差错概率和信噪比
function[]=p(n,A,M,Z,B,w0)
s=randout(M);
r=pn(n,M);
fork=1:
19
Z=Z+B;
%加入PN序列
g=xor(s,r)*Z;%调制
q=sinout(A,w0,M);
x=g+q;
re=B*wout(M);
x1=re+x;
r2=x1>Z/2;%设置一个门限,滤除噪声
r3=xor(r2,r);%解调
i=1:
M;
r4=s(i)~=r3(i);%检测
r5=length(find(r4));%计算错误的个数
cc(k)=r5/M;%错误的概率
i=1:
M;
me=0;
me=me+g(i).^2;
mp=me/M;%计算信号的功率
j=1:
M;
se=0;
se=se+q(j).^2+re(j).^2;
sp=se/M;%计算噪声的功率
sn(k)=mp/sp;%计算信噪比
%没有加入PN序列
s1=Z*s;
d1=s1+q;
d2=re+d1;
d3=d2>Z/2;
i=1:
M;
d4=s(i)~=d3(i);
d5=length(find(d4));
dc(k)=d5/M;
i=1:
M;
de=0;
de=de+g(i).^2;
dp=de/M;
j=1:
M;
sd=0;
sd=sd+q(j).^2+re(j).^2;
ep=sd/M;
dn(k)=dp/ep;
end
%画信噪比与差错率曲线
figure;
stem(dn,dc,'.');
holdon;
stem(sn,cc,'g');
xlabel('信噪比');
ylabel('差错率');
title('信噪比与差错率曲线');
grid
pause;
closeall;
%二进制数据的产生
function[s]=randout(M)
n=0:
M;
s=rand(1,M);
j=1:
M;
s(j)=s(j)>0.5;
%PN序列的产生
function[p_s]=pn(n,M)
a=zeros(1,n);
a(n)=1;
fori=1:
1000
y(i)=a(n);
temp=mod(a(n-1)+a(n),2);
forj=n:
-1:
2
a(j)=a(j-1);
end
a
(1)=temp;
end
p_s=y(1:
M);
%正弦信号的产生
function[in]=sinout(A,w0,M)
n=1:
M;
in=A*sin(w0*n);
%随机噪声的产生
function[w]=wout(M)
w=rand(1,M);
七程序结果及图表
M=1:
M=2:
M=3:
M=4:
从图中可以得到以下结论:
同一序列长度下,一定的信噪比范围内,随着信噪比的增加差错率减小;同一信噪比下加PN序列比不加PN的差错率小。
随着序列长度的增加在同一信噪比情况下差错率较高。
通过这些结论对以后信道的改进提供了更多考虑的角度,以及方法。
八实验总结
刚拿到题去理解的时候发现搞不懂为什么一PN序列就有这大作用,后来查了些相关书籍解决了这一困惑但到实验结束还不是很透彻希望以后的学习可以进一步了解。
再者就是通过什么方式去体现PN的加入对信道的影响也是一个问题。
考虑到在学习通信原理时老师讲过衡量一个信道的好坏可以从信噪比,以及传输时的误码率等角度去考虑。
然后顺着这思路设计了这个程序。
实验中遇到的问题:
在对PN序列的产生,以及对信道过程的描述,是比较不容易解决的。
心得:
通过该实验的学习,知道遇到的有些问题不可能一次性解决,而是一层一层,解决了眼前这问题就有利于以后问题的解决。
学会了二进制序列的产生,对matlab编程有了更多的了解,通过PN的加入和去掉,对比出PN对信道的影响。
题目九:
一实验题目:
设有一长序列x(n)
x(n)=
令x(n)通过一离散系统,其单位抽样响应h(n)=
试编程序分别用重叠保留法、重叠相加法、快速卷积法实现该系统对x(n)的滤波。
二:
实验目的
分别用重叠保留法、重叠相加法、快速卷积法实现该系统对x(n)的滤波。
三:
实验原理
重叠保留法:
将序列x(n)分成长度为N的小序列,使每个小序列与前一个序列重叠M个样本。
为了统一,在分段前应在序列x(n)前补M个零,每个小序列分别与h(n)进行卷积,去掉卷积后的前M个样本,再将所有的结果合并,则可得到y(n)。
重叠相加法:
将序列x(n)分成长度为N的小序列,各小序列互不重叠,每个小序列分别与h(n)进行卷积,卷积的结果重叠M-1,去掉相重叠的M-1后,合并所得的结果,则可得到y(n)。
其计算过程如下图:
快速卷积法:
若序列x(n)的长度为N,h(n)的长度为M,当循环卷积的长度L大于等于N+M-1时,循环卷积的结果就等于线性卷积的结果。
如果取L=N+M-1,则可用DFT(FFT)计算线性卷积,计算框图如下图所示,其中DFT和IDFT通常用快速算法(FFT)来实现,故称其为快速卷积。
四:
实验步骤简述
由于序列x(n)为分段函数,首先要把分段函数的的表达式合并起来,再与h(n)进行卷积。
用快速卷积法实现时,首先要给序列x(n)、h(n)补零,再分别进行DFT运算,再进行IDFT的运算,得到y(n)。
用重叠相加法实现时,可调用函数-----来实现,但matlab由于中不支持该函数,则在确定每一个小序列的长度和序列重叠的样本数后,可采用快速卷积法的原理分别计算每段,最后再去掉重叠,得到y(n)。
在用重叠相加法实现时,可直接调用函数fftfilt()来实现。
五:
程序框图
六:
源程序
1)重叠相加法:
n1=0:
1:
50;
x1=n1./5;
m=0:
1:
2;
h=1./(2.^m);
k1=0:
1:
52;
y1=conv(x1,h);
l1=length(y1);
n2=51:
1:
99;
x2=20-n2./5;
k2=51:
1:
101;
y2=conv(x2,h);
l2=length(y2);
y1=[y1,zeros(1,102-l1)];
y2=[zeros(1,102-l2),y2];
subplot(2,2,1),stem(y1);
ylabel('y1');
subplot(2,2,2),stem(y2);
ylabel('y2');
y=y1+y2;
subplot(2,2,[3:
4]),stem(y);
ylabel('y');
%快速卷积法:
x1=n1./5;
l1=length(x1);
x1=[x1,zeros(1,100-l1)];
n2=51:
1:
99;
x2=20-n2./5;
l2=length(x2);
x2=[zeros(1,100-l2),x2];
x=x1+x2;
subplot(2,2,[1:
2]),stem(x,'.');
ylabel('x');
m=0:
1:
2;
h=1./(2.^m);
M=length(h);
h=[h,zeros(1,100-M)];
N=length(x);
L=N+M-1;
X=fft(x,L);
H=fft(h,L);
Y=X.*H;
y=ifft(Y,L);
k=1:
L;
subplot(2,2,[3:
4]),stem(k,y,'.');
ylabel('y');
%重叠保留法:
n=0:
50;
xn1=n/5;
n=51:
99;
xn2=20-n/5;
xn=[xn1xn2];%分段序列x(n)的表示
n=0:
99;
subplot(2,2,1),stem(n,xn,'.');%调用函数显示x(n)的波形
title('序列x(n)的图象');
xlabel('n');
ylabel('幅度');
n=0:
2;
hn=1./(2.^n);%序列h(n)的表示
subplot(2,2,2),stem(n,hn,'.');
title('序列h(n)的图象');
xlabel('n');
ylabel('幅度');
%用重叠保留法计算卷积
x1=length(xn);%计算序列x(n)的长度
h1=length(hn);
m1=h1-1;
v=15-m1;
hn=[hnzeros(1,15-h1)];%在序列h(n)后预置(15-h1)个零
x=[zeros(1,m1),xn,zeros(1,14)];%在序列x(n)前预置(h1-1)个零
k=floor((x1+m1-1)./v)+1;%计算段数
y=zeros(k+1,15);%把(k+1)*15阶输出矩阵y初始化
cleary;
fork=0:
k-1%利用循环实现各段的卷积
xk=x(k*v+1:
k*v+15);
x11=length(xk);
h22=length(hn);
xa11=[xk,zeros(1,15-x11)];
h=[hn,zeros(1,15-h22)];
xx=fft(xa11,15);
hh=fft(h,15);
yy=xx.*hh;
y1=ifft(yy,15);
y(k+1,:
)=y1;
end
y=y(:
h1:
15)';%y中各行均去掉前(h1-1)个样本,转置后构成新的y
y2=(y(:
))';%装成单列向量再转置成行向量输出
n=0:
103;
subplot(2,2,3),stem(n,y2,'.');
axis([0101020]);
title('重叠保留法计算结果y(n)');
xlabel('n');
ylabel('幅度');
七程序结果及图表
重叠相加法的图形:
快速卷激法的图形:
重叠保留法的图形:
通过图形的比较,用三种不同的方法得到了同样的结果。
八.实验总结:
通过此次实验,了解了重叠保留法、重叠相加法、快速卷积法的定义以及为什么会出现这三种方法,也就是他们使用时序列有啥特点,能更好的展现各方法的优势。
学习了使用matlab对这三种方法的实现,在对序列拼接时写的有点困难,但经过一步一步慢慢分析还是理解了该那么做,而且使用了两种方法,都达到了序列拼接的目的。
在使用matlab画图时对图的标题应该做以描述,因为三种方法得到的图形很相似。