通信原理实验报告.docx
- 文档编号:3704844
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:30
- 大小:352.89KB
通信原理实验报告.docx
《通信原理实验报告.docx》由会员分享,可在线阅读,更多相关《通信原理实验报告.docx(30页珍藏版)》请在冰豆网上搜索。
通信原理实验报告
通信原理实验报告
————————————————————————————————作者:
————————————————————————————————日期:
通信原理实验报告
实验名称:
实验一数字基带传输系统的MATLAB仿真
实验二模拟信号幅度调制仿真实验
班级:
10通信工程三班
学号:
2010550920
姓名:
彭龙龙
指导老师:
王仕果
实验一数字基带传输系统的MATLAB仿真
一、实验目的
1、熟悉和掌握常用的用于通信原理时域仿真分析的MATLAB函数;
2、掌握连续时间和离散时间信号的MATLAB产生;
3、牢固掌握冲激函数和阶跃函数等函数的概念,掌握卷积表达式及其物理意义,掌握卷积的计算方法、卷积的基本性质;
4、掌握利用MATLAB计算卷积的编程方法,并利用所编写的MATLAB程序验证卷积的常用基本性质;
5、掌握MATLAB描述通信系统中不同波形的常用方法及有关函数,并学会利用MATLAB求解系统功率谱,绘制相应曲线。
基本要求:
掌握用MATLAB描述连续时间信号和离散时间信号的方法,能够编写MATLAB程序,实现各种常用信号的MATLAB实现,并且以图形的方式再现各种信号的波形。
二、实验内容
1、编写MATLAB程序产生离散随机信号
2、编写MATLAB程序生成连续时间信号
3、编写MATLAB程序实现常见特殊信号
三、实验原理
从通信的角度来看,通信的过程就是消息的交换和传递的过程。
而从数学的角度来看,信息从一地传送到另一地的整个过程或者各个环节不外乎是一些码或信号的交换过程。
例如信源压缩编码、纠错编码、AMI编码、扰码等属于码层次上的变换,而基带成形、滤波、调制等则是信号层坎上的处理。
码的变换是易于用软件来仿真的。
要仿真信号的变换,必须解决信号与信号系统在软件中表示的问题。
3.1信号及系统在计算机中的表示
3.1.1时域取样及频域取样
一般来说,任意信号s(t)是定义在时间区间(-∞,+∞)上的连续函数,但所有计算机的CPU都只能按指令周期离散运行,同时计算机也不能处理(-∞,+∞)这样一个时间段。
为此将把s(t)按区间
截短为sT(t),再对sT(t)按时间间隔Δt均匀取样,得到取样点数为:
(3-1)
仿真时用这个样值集合来表示信号s(t)。
显然Δt反映了仿真系统对信号波形的分辨率,Δt越小则仿真的精确度越高。
据通信原理所学,信号被取样以后,对应的频谱时频率的周期函数,其重复周期是
。
如果信号的最高频率为fH,那么必须有fH≤
才能保证不发生频域混叠失真。
设
(3-2)
则称Bs为仿真系统的系统带宽。
如果在仿真程序中设定的采样间隔是Δt,那么不能用此仿真程序来研究带宽大于Bs的信号或系统。
此外,任意信号s(t)的频谱S(f)通常来说也是定义在时间区间(-∞,+∞)上的连续函数,所以仿真频域特性时,也必须把S(f)截短并取样。
考虑到系统带宽为Bs,便把频谱的截短区间设计为[-Bs,Bs]然后再按间隔Δf均匀取样,得到取样点数为:
(3-3)
将式(3-2)代入式(3-3)得
(3-4)
同样,信号在频域被离散后,对应到时域也是一个周期信号,其周期为
。
如果时域截短时间为T,那么必须T≤1/df才能保证不发生频域混叠失真。
也就是说,如果仿真程序中设定得频域采样间隔是Δf,那么就不能仿真截短时间超过
的信号。
所以,可以把频域的取样间隔设计为:
(3-5)
将式(3-5)代入式(3-1)得
(3-6)
这样一来,时域的总取样点数及频域的总取样点数都相等,为
。
要提高仿真的精度,就必须降低时域取样间隔Δt及频域取样间隔Δf,也就是要加大总取样点数N。
这说明仿真的精度与仿真系统的运算量直接有关。
为了处理上的方便,我们今后规定采样点数N为2的整幂。
举例来说,例如设计要求的系统带宽为1MHz,频域最好分辨率为10kHz,那么据此可求得
,则取N=256。
对应的其他参数为Bs=1MHz,
,
,
。
3.1.2频域分析
限于篇幅,在此不介绍MATLAB中关于傅立叶变换的有关函数。
为了方便仿真,我们利用MATLAB提供的函数编写了两个函数t2f和f2t。
t2f的功能是做傅立叶变换,f2t的功能是做傅立叶反变换,它们的引用格式分别为X=t2f(x)及x=f2t(X),其中x是时域信号x(t)j截短并采样所得的取样值矢量,X是对x(t)的傅立叶变换X(f)截短并采样所得的取样值矢量。
这两个函数分别如附录所示。
我们关心的另一个指标是信号的功率谱密度,任意信号s(t)的功率谱的定义是
,其中
是s(t)截短后所得信号
的傅立叶变化,
是
的能量谱,
是
在截短时间T内的功率谱。
对于MATLAB仿真系统,若x是时域取样值矢量,X是对应的傅立叶变换,那么x的功率谱便为矢量
。
3.2与随机信号产生相关的指令
3.2.1高斯噪声的产生
由于函数randn(1,N)产生N个互不相关的、均值为零、方差为1的高斯随机数,所以可用它来产生高斯白噪声。
设仿真系统的取样点数是N,系统带宽为Bs,矢量
的总功率为
,最高频率分量为Bs,并且各样点的值互不相关,故它代表双边功率谱密度为
(W/Hz)的白噪声。
3.2.2随机码序列的产生
语句round(rand(1,M))产生M个取值1、0等概的随机码。
函数round表示四舍五入。
函数rand产生均匀分布于区间[0,1]的随机数。
语句sign(rand(1,M))产生M个取值±1等概的随机码。
函数sign(x)对矢量x的元素取正负号,而高斯数randn取正负数的概率是相等的。
3.2.3产生数字随机信号的一般方法
一般来说,随机数字信号可以直接或间接表示成PAM信号(请参阅通信原理教材)。
PAM信号是指所有形如
的信号。
它可以用如下的等效模型来表示:
故对所有不同的数字信号,都可以用相同的方法来产生。
1)产生随机序列矢量a
a=round(rand(1,M));
为了方便起见,一般规定a的长度M是2的整幂。
2)产生冲击序列信号imp(t)
imp=zeros(1,N);
imp(1:
L:
M)=a/dt;
矢量imp代表信号imp(t)。
其中,N是imp的矢量长度,M是码元矢量a中的码元数,L是每码元内的采样点数。
现规定M、N都是2的整幂,于是L自然也是2的整幂。
3)产生PAM数字信号s(t)
代表脉冲波形,例如,升余弦滚降要求的波形有:
设
的傅立叶变换为
,
的傅立叶变换为
,则有:
%t2f为傅立叶变换函数
%f2t为傅立叶反变换函数
设矢量s代表数字信号
,矢量g代表脉冲波形
,矢量G代表其频谱
。
那么s的产生方法是:
s=conv(imp,g);
其中,函数conv表示卷积。
卷积后s的长度是length(imp)+length(g)-1。
扣除延迟时间及拖尾时间后,数字信号为:
Ii=find(g=max(g));
s=s([1:
N]+ii
(1));
也可用频域的方法产生数字信号
:
s=f2t(t2f(imp).*G);
注意,此时imp的点数应与g或G相同。
若g的宽度小于imp,则应用零补齐。
3.3信号的仿真
3.3.1连续时间信号的仿真
如前所述,MATLAB有很多内部数学函数可以用来产生这样的数字序列,例如sin()、cos()、exp()等函数可以直接产生一个按照正弦、余弦或指数规律变化的数字序列。
例如,运行如下程序
%program1_1
%Thisprogramisusedtogenerateasinusoidalsignalanddrawitsplot
clear,%Clearallvariables
closeall,%Closeallfigurewindows
dt=0.01;%Specifythestepoftimevariable
t=-2:
dt:
2;%Specifytheintervaloftime
x=sin(2*pi*t);%Generatethesignal
plot(t,x)%Openafigurewindowanddrawtheplotofx(t)
title('Sinusoidalsignalx(t)')
xlabel('Timet(sec)')
在《通信原理》课程中,单位阶跃信号u(t)和单位冲激信号δ(t)是二个非常有用的信号。
它们的定义如下:
这里分别给出相应的简单的产生单位冲激信号和单位阶跃信号的扩展函数。
产生单位冲激信号的扩展函数为:
functiony=delta(t)
dt=0.01;
y=(u(t)-u(t-dt))/dt;
产生单位阶跃信号的扩展函数为:
%Unitstepfunction
functiony=u(t)
y=(t>=0);%y=1fort>0,elsey=0
请将这二个MATLAB函数分别以delta和u为文件名保存在work文件夹中,以后,就可以像教材中的方法使用单位冲激信号δ(t)和单位阶跃信号u(t)。
3.3.2离散时间信号的仿真
程序Program1_2用来产生离散时间信号x[n]=sin(0.2πn)。
%Program1_2
%Thisprogramisusedtogenerateadiscrete-timesinusoidalsignalanddrawitsplot
clear,%Clearallvariables
closeall,%Closeallfigurewindows
n=-10:
10;%Specifytheintervaloftime
x=sin(0.2*pi*n);%Generatethesignal
stem(n,x)%Openafigurewindowanddrawtheplotofx[n]
title('Sinusoidalsignalx[n]')
xlabel('Timeindexn')
请仔细阅读该程序,比较程序Program1_1和Program1_2中的不同之处,以便自己编程时能够正确使用这种方法方针连续时间信号和离散时间信号。
程序Program1_3用来仿真下面形式的离散时间信号:
x[n]={....,0.1,1.1,-1.2,0,1.3,….}
↑n=0
%Program1_3
%Thisprogramisusedtogenerateadiscrete-timesequence
%anddrawitsplot
clear,%Clearallvariables
closeall,%Closeallfigurewindows
n=-5:
5;%Specifytheintervaloftime,thenumberofpointsofnis11.
x=[0,0,0,0,0.1,1.1,-1.2,0,1.3,0,0];%Generatethesignal
stem(n,x,'.')%Openafigurewindowanddrawtheplotofx[n]
gridon,
title('Adiscrete-timesequencex[n]')
xlabel('Timeindexn')
由于在程序的stem(n,x,'.')语句中加有'.'选项,因此绘制的图形中每根棒条线的顶端是一个实心点。
如果需要在序列的前后补较多的零的话,可以利用函数zeros(),其语法为zeros(1,N):
圆括号中的1和N表示该函数将产生一个一行N列的矩阵,矩阵中的所有元素均为零。
利用这个矩阵与序列x[n]进行组合,从而得到一个长度与n相等的向量。
例如,当x[n]={0.1,1.1,-1.2,0,1.3}时,为了得到程序Program1_3中的序列,
↑n=0
可以用这个MATLAB语句x=[zeros(1,4)xzeros(1,2)]来实现。
用这种方法编写的程序如下:
%Program1_4
%Thisprogramisusedtogenerateadiscrete-timesinusoidalsignal
%anddrawitsplot
clear,%Clearallvariables
closeall,%Closeallfigurewindows
n=-5:
5;%Specifytheintervaloftime
x=[zeros(1,4),0.1,1.1,-1.2,0,1.3,zeros(1,2)];%Generatethesequence
stem(n,x,'filled','r')%Openafigurewindowanddrawtheplotofx[n]
gridon,
四、实验步骤
(1)分析程序每条指令的作用,运行该程序,将结果保存,贴在下面的空白处。
然后修改程序,将dt改为0.2,并执行修改后的程序,保存图形,看看所得图形的效果怎样。
dt=0.01时的信号波形
dt=0.2时的信号波形
请问:
上述的两幅图形有什么区别,哪一副图形看起来更接近于实际信号波形?
为什么会有这种区别?
答:
前者波形曲线光滑,后者曲折,第一幅图更接近于实际信号波形。
(2)修改program1_1,,存盘程序名为Q1_2,生成实指数信号x(t)=e-2t。
要求在图形中加上网格线,并使用函数axis()控制图形的时间范围在0~2秒之间。
然后执行该程序,保存所的图形。
修改Program1_1后得到的程序Q1_2如下:
%program1_1
%Thisprogramisusedtogenerateasinusoidalsignalanddrawitsplot
clear,%Clearallvariables
closeall,%Closeallfigurewindows
dt=0.01;%Specifythestepoftimevariable
t=-2:
dt:
2;%Specifytheintervaloftime
X=exp(-2*t);%Generatethesignal
plot(t,x)%Openafigurewindowanddrawtheplotofx(t)
axis{[0,2,0,2]}
Gridon,
title('Sinusoidalsignalx(t)彭龙龙熊犇')
xlabel('Timet(sec)')
图形结果如下:
(3)将前文中所给的单位冲激信号和单位阶跃信号的函数文件在MATLAB文件编辑器中编写好,并分别以文件名delta和u存入work文件夹中以便于使用。
抄写函数文件delta如下:
unctiony=delta(t)
dt=0.01;
y=(u(t)-u(t-dt))/dt;
抄写函数文件u如下:
f%Unitstepfunction
Functiony=u(t)
y=(t>=0);%y=1fort>0,elsey=0
(4)修改程序Program1_4,并以Q1_4为文件名存盘,利用axis()函数,将图形窗口的横坐标范围改为-2≤n≤5,纵坐标范围改为-1.5≤x≤1.5。
修改Program1_4后得到的程序Q1_4如下:
%Program1_4
%Thisprogramisusedtogenerateadiscrete-timesinusoidalsignal
%anddrawitsplot
clear,%Clearallvariables
closeall,%Closeallfigurewindows
n=-2:
5;%Specifytheintervaloftime
axis{[-2,5,-1.5,1.5]}
x=[zeros(1,4),0.1,1.1,-1.2,0,1.3,zeros(1,2)];%Generatethesequence
stem(n,x,'filled','r')%Openafigurewindowanddrawtheplotofx[n]
gridon,
信号的波形图
(5)根据示例程序的编写方法,编写一个MATLAB程序,以Q1_5文件名存盘,给给定信号
x(t)=e-0.5tu(t)
求信号y(t)=x(1.5t+3),并绘制出x(t)和y(t)的图形。
编写的程序Q1_5如下:
%Program1_5
%Thisprogramisusedtogenerateadiscrete-timesequence
%anddrawitsplot
clear,%Clearallvariables
closeall,%Closeallfigurewindows
t=-5:
0:
2:
10
%y=exp(-0.5*t)*u(t);
y=exp(-0.5*(1.5*t+3))*u(1.5*t+3);
plot(t,y);
gridon
title('Sinusoidalsignalx(t)penglonglongxiongben')
x(t)和y(t)的图形分别为:
(6)仔细分析附录中的PCM编码和PCM解码的子函数,分别说明两程序的编程思路。
答:
求函数m(t)傅立叶变换的函数T2F有两个输入参数,两个输出参数。
输入参数t表示输入数组的时间变量,st存放输入数组,它的长度由length(t)决定;输出参数f表示输出的傅立叶变换对的频率变量,sf用来存放输出数组。
求函数m(t)傅立叶反变换的函数F2T有两个输入参数,两个输出参数。
输入参数f表示输入数组的时间变量,sf存放输入数组,它的长度由length(t)决定;输出参数t表示输出的傅立叶变换对的频率变量,st用来存放反变换后的数组。
五、实验报告要求
1、按要求完整书写你所编写的全部MATLAB程序
2、详细记录实验过程中的有关信号波形图(存于自带的U盘中),图形要有明确的标题。
全部的MATLAB图形应该用打印机打印,然后贴在本实验报告中的相应位置,实验报告必须手写。
3、实事求是地回答相关问题,严禁抄袭。
本实验完成时间:
年月日
附录
在进行信号时域和频域特性分析时,经常要求函数的傅立叶变换和傅立叶反变换运算,为了编程的方便,可将傅立叶变换和反变换分别自定义为两个子函数,在编程时直接调用可提高编程的灵活性和方便程度。
下面将这两个常用的子函数定义如下:
1.T2F子函数
求函数m(t)傅立叶变换的函数T2F有两个输入参数,两个输出参数。
输入参数t表示输入数组的时间变量,st存放输入数组,它的长度由length(t)决定;输出参数f表示输出的傅立叶变换对的频率变量,sf用来存放输出数组。
T2F函数的程序如下:
function[f,sf]=T2F(t,st)
%ThisisafunctionusingtheFFTfunctiontocalculateasignal'sFourier
%Transiation
%Inputisthetimeandsignalvectors,thelengthoftimemustgreater
%than2
%Outputisthefrequencyandthesignalspectrum
dt=t
(2)-t
(1);
T=t(end);
df=1/T;
N=length(st);
f=-N/2*df:
df:
N/2*df-df;
sf=fft(st);
sf=T/N*fftshift(sf);
2.F2T子函数
求函数m(t)傅立叶反变换的函数F2T有两个输入参数,两个输出参数。
输入参数f表示输入数组的时间变量,sf存放输入数组,它的长度由length(t)决定;输出参数t表示输出的傅立叶变换对的频率变量,st用来存放反变换后的数组。
F2T函数程序如下:
function[t,st]=F2T(f,sf)
%Thisfunctioncalculatethetimesignalusingifftfunctionfortheinput
%signal'sspectrum
df=f
(2)-f
(1);
Fmx=(f(end)-f
(1)+df);
dt=1/Fmx;
N=length(sf);
T=dt*N;
%t=-T/2:
dt:
T/2-dt;
t=0:
dt:
T-dt;
sff=fftshift(sf);
st=Fmx*ifft(sff);
实验二模拟信号幅度调制仿真实验
一、实验目的
1.加深对模拟线性调制的原理与实现方法的理解;
2.掌握AM、DSB、SSB功率谱密度函数的特点,并进行对比;
3.掌握MATLAB基本指令的使用;
4.掌握MATLAB中M文件的调试以及子函数调用的方法。
二、实验内容
1.复习AM、DSB和SSB调制的相关原理
2.编写MATLAB程序实现AM调制;
3.编写MATLAB程序实现DSB调制;
4.编写MATLAB程序实现SSB调制;
三、实验原理
调制是一个将信号变换成适于在信道传输的过程。
由于信源的特性与信道的特性可能不匹配,直接传输可能严重影响传输质量。
模拟调制针对的信源为模拟信号,常用的模拟调制有调幅、调相、调频。
本次实验进行的是模拟信号的幅度调制。
幅度调制是由调制信号去控制高频载波的幅度,使之随调制信号做线性变化的过程。
由于已调信号的幅度随基带信号的规律呈正比地变化,这一特点反映在频谱结构上,表现为已调信号的频谱完全是基带信号频谱在频域内的简单搬移。
所以,幅度调制通常又称为线性调制。
幅度调制包括AM、DSB和SSB调制。
调幅(AM)是标准调幅,也就是常规双边带调制。
假设调制信号m(t)的平均值为0,将其外加一个直流偏量A0后与载波相乘,即可形成调幅信号。
其时域表达式为:
SAM(t)=[A0+m(t)]cosωct
抑制载波的双边带调制(DSB)是
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通信 原理 实验 报告