通信原理仿真实验

更新时间:2023-10-15 21:56:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

数据通信原理实验的MATLAB仿真讲义

MATLAB原意为“矩阵实验室—MA-TrixLABoratory”,它是目前控制界国际上最流行的软件,它除了传统的交互式编程之外,还提供了丰富可靠的矩阵运算、图形绘制、数据和图象处理、Windows编程等便利工具。MATLAB还配备了大量工具箱,特别是还提供了仿真工具软件SIMULINK。SIMULINK这一名字比较直观地表明了此软件的两个显著的功能:SIMU(仿真)与LINK(连接),亦即可以利用鼠标在模型窗口上“画”出所需的系统模型,然后利用SIMULINK提供的功能对控制系统进行仿真和线性化分析。

MATLAB在80年代一出现,首先是在控制界得到研究人员的瞩目。随着MAT-LAB软件的不断完善,特别是仿真工具SIMULINK的出现,使MATLAB的应用范围越来越广。

MATLAB的仿真环境(simulink)提供的系统模型库包括以下几个子模型库:Sources(输入源)、Sinks(输出源)、Discrete(离散时间系统)、Linear(线性环节)、Non-linear(非线性环节)、Connections(连接及接口)、Extras(其它环节)。打开子模型库,你会发现每个模型库都包含许多个子模块,比如Sources模型库里含有阶跃函数、正弦函数、白噪声函数、MATLAB空间变量、信号发生器等子模块。另外在Extras子模型库下还有一个BlockLibrary,集中了子模型库中最常用及其它常用的子模块,使用起来特别方便。通信系统一般都可以建立数学模型,在数学模型中,主要包括乘法器、加法器、信号发生器、滤波器等,而这些在上述的simulink系统模型库中一般都可找到,对于没有的模块(如伪随机信号发生器),可自己根据掌握的技术生成所需的子模块,随时调用。这样就可根据数学模型,建立通信系统的仿真模型。

应用MATLAB下的SIMULINK仿真工具可以很方便地进行通信系统仿真,利用SIMULINK仿真工具下的现有子模块进行仿真。

实验一.利用SIMULINK仿真常规调幅AM

滤波 调制与卷积定理

从信号与线性系统分析观点看,滤波如图 1 是系统的冲激响应 h(t)对输入信号 x(t)的卷积作用,即

y(t) = x(t) * h(t) (1) 对应的频域分析是

Y( ω) = X(ω )H(ω ) (2)

即时域卷积处理对应于频域内相乘,(1)和(2)式是时域卷积定理

图 1 滤 波 图 2 调 制 再看调制(包括解调、混频等)如图2, 是两信号相乘 即

y(t) = x(t)c(t) (3) 对应的频域分析是

Y(ω)= 2π[X(ω)*C(ω)] (4)

即时域相乘对应于频域内卷积 ,(3)和(4)式是频域卷积定理。 一般说来 卷积运算比乘法运算复杂得多, 这也是(2)式得到广泛应用的原因。对调制来

jω0t

说,由于载波高频信号多采用 cos(ω0t)或e ,它们的频谱都是离散型的δ (ω)形式,利用δ(ω)卷积性质 即

X(ω)*δ(ω±ω0)=X(ω±ω0) (5)

(4)式的卷积运算变成 X(ω)在频带上的平移操作,(即“搬迁”), 从而使(4)式的卷积运算反而变得异常简单,调制就是把调制信号“基带信号” 搬出去,解调就是把调制信号“搬回来”。而混频就是把调制信号搬到适当的位置,如中频带。

常规调幅(AM)仿真

首先建立数学模型,如图1所示,其中:调制信号f(t)=sin(ωmt),直流分量A0=常数,载波信号c(t)=cos(ω0t),相干载波c’(t)=2cos(ω0t)。然后建立

SIMULINK仿真模型,如图2所示,图2中,载波信号和相干载波的频率都设为30rad/s,直流分量A0取值为1,滤波器的截止频率定为10rad/s,f(t)为调制信号,s(t)为AM信号,f’(t)为解调后的信号。仿真结果如图3所示。图3中,由上往下的三个波形分别解调出的信号f’(t),AM信号s(t)和调制信号f(t)。可见,f’(t)与f(t)除了有时间上的延迟外,完全一样。

图3 AM通信系统的数学模型

图4 AM通信系统的仿真模型

主要仿真参数: 载波角频率:30rad/s 调制信号频率:6 rad/s 直流分量:1 滤波器通带截止频率:7~50 rad/s 图5 AM通信系统仿真波形

实验步骤:

1. 启动MATLAB,并在命令窗口中敲入simulink,回车,进入SIMULINK仿真模块。

2. 在SIMULINK仿真模块中新建一个模型,需要保存时命名为AM。

从SIMULINK工具箱中找到图2中出现的各个器件,并拖动到AM模型的工作界面里。具体方法是:从Simulink模块的Sources(输入源)子模块中寻找正、余弦和常数发生器;从Simulink模块的Math Operation子模块中寻找加法器和乘法器;从Simulink模块的Sinks(输出源)中找到示波器,并且改变示波器的参数Number of axes的值为3,使得可以在同一个示波器上看到解调后的信号、AM信号和调制信号的波形。 3.按图2所示,连接各个器件。 4.运行模型

5.观察示波器的输出波形,即为图3所示。

6.改变滤波器的截止频率,观察输出波形,描述此时波形的变化

实验报告要求:

1.写出常规幅度调制、解调的原理。

2.写清楚实验步骤。

3.改变滤波器的截止频率,观察输出波形,描述此时波形的变化,并解释原因。

实验二. DSB调制与解调仿真

方法一:SIMULINK模型法

双边带幅度调制 DSB 和解调 原理图如图 6所示

图 6 DSB 原理图

和实验一中类似,我们可以在SIMULINK 中建立如下仿真模型:

图7 DSB仿真模型

仿真结果如图8所示:

图8 DSB仿真波形一

方法二:M文件编程

在MATLAB中,除了用SIMULINK仿真模块仿真通信系统以外,还可以编写MATLAB脚本(.m文件)来仿真通信系统。

DSB通信系统仿真的M文件如下:

% 双边带幅度调制(DSB)和解调 n=1024;fs=n;

%设取样频率fs=1024Hz m=640*pi;

%产生调制信号s(t) i=0:1:n-1; t=i/n;

t1=(t-1/8).^2;t3=(t-3/8).^2;t4=(t-4/8).^2; t6=(t-6/8).^2;t7=(t-7/8).^2;

s=exp(-m*t1)+exp(-m*t3)+exp(-m*t4)+exp(-m*t6)+exp(-m*t7); c=cos(2*pi*100*t);

%产生载波信号 载波频率fc=30Hz x=s.*c;

%正弦波幅度调制(DSB) y=x.*c; %解调

wp=0.1*pi;ws=0.12*pi;Rp=1;As=15;%设计巴特沃思数字低通滤波器 [N,wn]=buttord(wp/pi,ws/pi,Rp,As);

[b,a]=butter(N,wn); s1=filter(b,a,y); %滤波 s1=2*s1; S=fft(s,n);

%求上述各信号及滤波器的频率特性 C=fft(c,n); X=fft(x,n); Y=fft(y,n);

[H,w]=freqz(b,a,n,'whole'); n2=300;

f=(-n/2:1:n/2-1); %绘图

subplot(521),plot(s); title('调制信号的波形') subplot(523),plot(c); title('载波的波形') subplot(525),plot(x); title('已调信号的波形') subplot(527),plot(y); title('解调信号的波形')

subplot(529),plot(f,abs(fftshift(H))); title('滤波器传输特性')

subplot(522),plot(f,abs(fftshift(S))); title('调制信号的频谱')

subplot(524),plot(f,abs(fftshift(C))); title('载波的频谱')

subplot(526),plot(f,abs(fftshift(X))); title('已调信号的频谱')

subplot(528),plot(f,abs(fftshift(Y))); title('解调信号的频谱') subplot(5,2,10),plot(s1); title('解调滤波后的频谱')

执行结果如图9所示:

图9 DSB仿真波形二

实验三.幅度键控ASK

1. ASK简单介绍

在幅度键控中载波幅度是随着调制信号而变化的。最简单的形式是载波在二进制信号1或0的控制下通或断,此种调制方式称为通-断键控。其时域表达式为:

S(t)=anAcosωct,其中an为二进制数字。

2. MATLAB实现

方法一:SIMULINK模型法

我们可以在SIMULINK 中建立如下仿真模型:

图10 ASK仿真模型

主要调制参数: pulse period: 2secs pulse width: 50% sine wave frequency: 2*pi sine wave sample time: 0.01 仿真结果如图11所示:

图11 ASK仿真波形一

方法二:M文件编程

对于二元序列10110010,画出2ASK的波形。 实现如下:

新建一个M文件,在程序编辑窗口中输入以下命令行: t=0:0.01:8;

y=sin(2*pi*t); %载波

x=[ones(1,100),zeros(1,100),ones(1,100),ones(1,100),zeros(1,100),zeros(1,100),ones(1,100),zeros(1,101)]; %定义一个与二元序列对应的时间序列 z=x.*y; %幅度键控 plot(t,z) %画出波形

运行,可以看到Figure文件中的ASK波形如下:

图12 ASK仿真波形二

思考题:请在上面实验三的基础上,对于二元序列10111110,画出它的2ASK的波形(新建一个M文件)。

实验四.频移键控FSK

1. FSK简单介绍

将数字信号调制在载波的频率上的调制方法称为频移键控,它包括二电平频移键控(BFSK)和多电平频移键控(MFSK)。

在二进制数字调制中,若正弦载波的频率随二进制基带信号在f1和f2两个频率点间变换,即二进制移频键控信号可以看成是两个不同载波的二进制振幅键控信号的叠加,则产生二进制移频键控信号(2FSK信号)。若二进制移频键控信号的1符号对应于载波频率f1,0符号对应于载波频率f2,则二进制移频键控信号的时域表达式为:

s(t)=anAcosω1t+bncosω2t, 其中an为二进制数字,bn为an的反码。

2. MATLAB实现

方法一:SIMULINK模型法

我们可以在SIMULINK 中建立如下仿真模型:

图13 FSK仿真模型 主要调制参数: pulse period: 1secs pulse1 period: 1secs;pulse1 phase delay: 0.5sec pulse width: 50% pulse width: 50% sine wave frequency: 10*pi sine wave sample time: 0.01 sine wave1 frequency: 10*pi sine wave1 sample time: 0.01

仿真结果如图14所示:

图14 FSK仿真波形一

方法二:M文件编程

对于二元序列10110010,画出2FSK的波形。

新建一个M文件,在程序编辑窗口中输入以下命令行: t=0:0.01:8;

y1=sin(2*pi*t); %载波1 y2=sin(4*pi*t); %载波2

x1=[ones(1,100),zeros(1,100),ones(1,100),ones(1,100),zeros(1,100),zeros(1,100),ones(1,100),zeros(1,101)]; %定义一个与二元序列对应的时间序列

x2=[zeros(1,100),ones(1,100),zeros(1,100),zeros(1,100),ones(1,100),ones(1,100),zeros(1,100),ones(1,101)]; %定义一个与二元序列的反码对应的时间序列 z=x1.*y1+x2.*y2; %移频键控 plot(t,z)

运行,可以看到Figure文件中的FSK波形如下:

图15 FSK仿真波形二

思考题:请在上面实验二的基础上,对于二元序列10111110,画出它的2FSK的波形(新建一个M文件)。

实验五.模拟信号的采样

1. 低通采样定理

对于一个频带限制在(0,fH)的连续信号,该信号可以用等间隔的采样值来唯一的表示,最低采样间隔为2 fH。

从物理概念上可以这样解释:由于一个频带受限的信号波形不可能在很短的时间内产生独立的、实质的变化,它的最高变化速度受最高频率分量fH的限制。因此为了保留这一频率分量的全部信息,一个周期的间隔内至少要采样两次。

2. 低通采样的MATLAB实现

有一信号s(t)=sa2(200t),分别用两种采样频率对其进行采样,

f1=100Hz,f2=200Hz,通过m文件得到采样后的图像及频谱,并做出结论。

%lowpsample.m, 第一部分:画出模拟信号的波形和频谱 clear

t0=10; %定义时间长度 ts=0.001; %采样周期 ts1=0.01; %欠采样周期 ts2=0.005; %正确采样周期 fs=1/ts; fs1=1/ts1; fs2=1/ts2;

df=0.5; %定义频率分辨力 t=[-t0/2:ts:t0/2]; %定义时间序列 %定义采样函数的平方,即信号序列 x=sin(200*t); m=x./(200*t)

w=t0/(2*ts)+1; %确定t=0的点 m(w)=1; %t=0点的信号值为1 m=m.*m; m=50.*m;

[M,mn,dfy]=fftseq(m,ts,df); %傅立叶变换 M=M/fs;

f=[0:dfy:dfy*length(mn)-dfy]-fs/2; %定义频率序列 %f=[0:df:df*length(m)-df]-fs/2; %定义频率序列 subplot(2,1,1); plot(t,m)

xlabel('时间'); title('原信号的波形') axis([-0.15,0.15,-1,50]); subplot(2,1,2)

plot(f,abs(fftshift(M))) %作出原信号的频谱 xlabel('频率'); axis([-500,500,0,1]); title('原信号的频谱fH约为64 Hz')

图1 模拟信号的波形和频谱图

%lowpsample.m, 第二部分:画出模拟信号采样不足时的波形和频谱 t1=[-t0/2:ts1:t0/2]; %定义采样时间序列

x1=sin(200*t1); %计算对应采样序列的信号序列 m1=x1./(200*t1); % 计算函数序列

w1=t0/(2*ts1)+1; %由于除0产生了错误值,计算该值标号 m1(w1)=1; %将错误值修正 m1=m1.*m1;m1=50.*m1;

[M1,mn1,df1]=fftseq(m1,ts1,df); % 对采样序列进行傅立叶变换 M1=M1/fs1;

N1=[M1, M1, M1, M1, M1, M1, M1, M1, M1, M1, M1, M1, M1]; f1=[-7*df1*length(mn1):df1:6*df1*length(mn1)-df1]-fs1/2; pause; subplot(2,1,1);stem(t1,m1);

xlabel('时间'); title('采样不足信号的波形') axis([-0.15,0.15,-1,50]); subplot(2,1,2)

plot(f1,abs(fftshift(N1))) %作采样不足信号的频谱 title('采样不足信号的频谱fs=100Hz<2fH') axis([-500,500,0,1]); xlabel('频率')

图2 欠采样的波形和频谱图

对情况f2=200Hz,其表示式为: S?t??sinc?200t??2??k???

???t?T2?2???sin200?t?0.005k??????t?0.005k??k????200?

%lowpsample.m, 第三部分:画出模拟信号正确采样时的波形和频谱 t2=[-t0/2:ts2:t0/2]; %定义采样时间序列

x2=sin(200*t2); %计算对应采样序列的信号序列 m2=x2./(200*t2); % 计算函数序列

w2=t0/(2*ts2)+1; %由于除0产生了错误值,计算该值标号 m2(w2)=1; %将错误值修正 m2=m2.*m2; m2=50.*m2;

[M2,mn2,df2]=fftseq(m2,ts2,df); % 对采样序列进行傅立叶变换 M2=M2/fs2;

N2=[M2, M2, M2, M2, M2, M2, M2, M2, M2, M2, M2, M2, M2]; f2=[-7*df2*length(mn2):df2:6*df2*length(mn2)-df2]-fs2/2; pause; subplot(2,1,1);stem(t2,m2);

xlabel('时间'); title('采样满足信号的波形')

axis([-0.15,0.15,-1,50]); subplot(2,1,2)

plot(f2,abs(fftshift(N2))) %作采样满足信号的频谱 title('采样满足信号的频谱fs=200Hz>2fH') axis([-500,500,0,1]); xlabel('频率')

图3 采样足够的波形和频谱图

function [M,m,df]=fftseq(m,ts,df) % [M,m,df]=fftseq(m,ts,df) % [M,m,df]=fftseq(m,ts)

?TSEQ 生成M, 它是时间序列m的FFT % 对序列填充零,以满足所要求的频率分辨率df % ts是采样间隔. 输出df是最终的频率分辨率 % 输出m是输入m的补过零的版本,M是FFT. fs=1/ts;

if nargin == 2 %函数变量个数为2,表示 [M,m,df]=fftseq(m,ts) n1=0;

else %否则函数变量个数为3,表示[M,m,df]=fftseq(m,ts,df) n1=fs/df; end

n2=length(m); %求序列长度

n=2^(max(nextpow2(n1),nextpow2(n2))); %将n1或n2值按2的幂次度量,取大者 M=fft(m,n); %得到FFT

m=[m,zeros(1,n-n2)]; %时间序列补零 df=fs/n; %得到最终的频率分辨率

实验六.数字基带通信系统的性能分析

码间干扰和噪声是影响数字基带通信系统性能的两个重要因素。码间干扰问题与系统的发送滤波器、信道特性、接收滤波器特性等因素有关,当系统总的特性为理想低通时,可以完全消除码间干扰,但是理想低通滤波器在现实的通信系统中是无法实现的。因此在现实的通信系统中码间干扰是一定存在的,设计者只能让系统函数逼近理想低通来提高系统的性能,降低误码率。为了让对由码间干扰所引起的误码率有一个直观的认识,观察眼图是一个很好的方法。眼图可以借助于通信原理实验箱来观察,也可以借助于MATLAB的系统仿真功能来实现。下面就是运用MATLAB来仿真通信系统、模拟眼图的程序。

global dt t df N close all

k=input('取样点数=2^k, k取13左右'); if isempty(k), k=13; end

z=input('每个信号取样点数=2^z, z

aa=input('滚降系数=[0.5]'); if aa==[],aa=0.5;end N=2^k; L=2^z; M=N/L;

Na=2; %示波器扫描宽度为4个码元 Rb=2; %码速率是2Mb/s Ts=1/Rb; %码元间隔 dt=Ts/L; %时域采样间隔 df=1/(N*dt); %频域采样间隔 T=N*dt; %截短时间 Bs=N*df/2; %系统带宽 f=[-Bs+df/2:df:Bs]; %频域横坐标 t=[-T/2+dt/2:dt:T/2]; %时域横坐标

g=sin(pi*t/Ts).*cos(pi*t*aa/Ts)./[pi*t/Ts.*(1-4*t.^2*aa^2/Ts^2)];%升余弦脉冲波形

GG=t2f(g);

EP=zeros(size(f))+eps; for ii=1:30

b=sign(randn(1,M))+1; %发送码元取值为0、2 s=zeros(1,N); %产生冲激序列 s(L/2:L:N)=b; SS=t2f(s);

S=SS.*GG; %升余弦信号的傅氏变换 a=f2t(S); %升余弦信号的时域波形 a=real(a);

P=S.*conj(S)/T; %升余弦信号的功率谱 EP=(EP*(ii-1)+P+eps)/ii;

figure(1) %输出的功率画图 plot(f,30+10*log10(EP),'g'); grid

xlabel('f (MHz)')

ylabel('Ps(f) (dBm/MHz)') figure(2) hold on

tt=[0:dt:Na*L*dt]; %系统的眼图画图 for jj=1:Na*L:N-Na*L plot(tt,a(jj:jj+Na*L));

title('升余弦滚降波形的眼图'); end end

本文来源:https://www.bwwdw.com/article/9ghf.html

Top