Matlab与通信仿真课程设计报告

  • 格式:pdf
  • 大小:239.29 KB
  • 文档页数:10

Matlab与通信仿真课程设计报告

Matlab与通信仿真课程设计报告

班级:12通信(1)班

姓名:诸葛媛

学号:Xb12680129

实验⼀S-函数&锁相环建模仿真

⼀、实验⽬的1.了解S函数和锁相环的⼯作原理

2.掌握⽤S函数建模过程,锁相环载波提取仿真

⼆、实验内容1、⽤S函数编写Similink基本模块

(1)信源模块

实现⼀个正弦波信号源,要求其幅度、频率和初始相位参数可以由外部设置,并将这个信号源进⾏封装。

(2)信宿和信号显⽰模块

实现⼀个⽰波器⽊块,要求能够设定⽰波器显⽰的扫描周期,并⽤这个⽰波器观察(1)的信源模块

(3)信号传输模块

实现调幅功能,输⼊⽤(1)信源模块,输出⽤(2)信宿模块;

基带信号频率1KHz,幅度1V;载波频率10KHz,幅度5V

实现⼀个压控正弦振荡器,输⼊电压u(t)的范围为[v1,v2]V,输出正弦波的中⼼频率为f0Hz,正弦波的瞬时频率f随控制电压线性变化,

控制灵敏度为kHz/V。输⼊⽤(1)信源模块,输出⽤(2)信宿模块2、锁相环载波提取的仿真

(1)利⽤压控振荡器模块产⽣⼀个受10Hz正弦波控制的,中⼼频率为100Hz,频偏范围为50Hz到150Hz的振荡信号,并⽤⽰波器模块和频谱

仪模块观察输出信号的波形和频谱。

(2)构建⼀个抑制载波的双边带调制解调系统。载波频率为10KHz,被

调信号为1KHz正弦波,试⽤平⽅环恢复载波并进⾏解调。

(3)构建⼀个抑制载波的双边带调制解调系统。载波频率为10KHz,被

调信号为1KHz正弦波,试⽤科斯塔斯环恢复载波并进⾏解调。

(4)设参考频率源的频率为100Hz,要求设计并仿真⼀个频率合成器,其输出频率为300Hz。并说明模型设计上与实例3.26的主要区别

三、实验结果分析1、⽤S函数编写Similink基本模块(3)

为了使S函数中输⼊信号包含多个,需要将其输⼊变量u初始为制定维数或⾃适应维数,⽽在S函数模块外部采⽤Simulink基本库中的复⽤器(Mux)将3

个信号复⽤在⼀根信号线上。MUX实质上是将多个单⾏的信号序列组成⼀个多⾏的信号矩阵。采⽤Fcn函数模块则可以从输⼊信号矩阵中取出相应元素进⾏计

算。设置参数如下:输⼊信号源为常数值2的信号,subsystem中的信号输⼊为频率为1000Hz,幅度为1的正弦信号,仿真步长设置为2e-5;最后利⽤做成的显⽰模块来观察输出信号的波形。测试模型:

signal generator:基带信号

constant:直流偏置

signal generator1:载波信号显⽰结果:

Subsystem中的M⽂件:

function [sys,x0,str,ts] = zgy1(t,x,u,flag,Amp,Freq,Phase)

%正弦波信号源

switch flag,

case 0 %flag=0初始化

[sys,x0,str,ts]=mdlInitializeSizes;

case 3 %flag=3计算输出

sys=mdlOutputs(t,Amp,Freq,Phase);

case{1,2,4,9} %其他作不处理的flag

sys=[]; %⽆⽤的flag时返回sys为空矩阵otherwise %异常处理

error(['Unhandled flag = ',num2str(flag)]);

end

%主函数结束

%⼦函数实现(1)初始化函数

function [sys,x0,str,ts]=mdlInitializeSizes

sizes = simsizes; %获取simulink仿真变量结构

sizes.NumContStates = 0; %连续系统的状态数为0

sizes.NumDiscStates = 0; %离散系统的状态数为0

sizes.NumOutputs = 1; %输出信号数⽬是1

sizes.NumInputs = 0; %输⼊信号数⽬是0

sizes.DirFeedthrough = 0; %这系统不是直通的

sizes.NumSampleTimes = 1; %这⾥必须为1

sys = simsizes(sizes);

str = []; %通常为空矩阵

x0 = []; %初始状态矩阵x0(零状态情况)

ts = [0 0]; %表⽰连续取样时间的仿真

%⼦函数实现(2)系统输出⽅程函数

function sys=mdlOutputs(t,Amp,Freq,Phase)sys = Amp*sin(2*pi*Freq*t+Phase); %这⾥写⼊系统的输出⽅程矩阵形式

%修改这个函数可以得到任意的波形输出

%系统输出⽅程函数结束

S-function中的M⽂件:

function [sys,x0,str,ts] = zgy4(t,x,u,flag)

%输⼊信号的代数运算实例:调幅

%输出u是3⾏1列矩阵,u(1),u(2),u(3)分别表⽰基带信号,直流偏置和载波

%size(u)

switch flag,

case 0 %flag=0初始化

sizes = simsizes; %获取simulink仿真变量结构

sizes.NumContStates = 0; %连续系统的状态数是0

sizes.NumDiscStates = 0; %离散系统的状态数是0

sizes.NumOutputs = 1; %输出信号数⽬是1

sizes.NumInputs = -1; %输⼊信号数⽬是⾃适应

sizes.DirFeedthrough = 1; %该系统是直通的

sizes.NumSampleTimes = 1; %这⾥必须为1

sys = simsizes(sizes);

str = [];

x0 = []; %初始状态矩阵x0

ts = [-1 0];%采样时间由外部模块给出

case 3 %flag=3计算输出

sys=(u(1)+u(2))*u(3); %调幅输出计算

case{1,2,4,9} %其他作不处理的flag

sys=[]; %⽆⽤的flag时返回sys为空矩阵

otherwise %异常处理

error(['Unhandled flag = ',num2str(flag)]);

end

显⽰模块中的M ⽂件:function [sys,x0,str,ts] = zgy2(t,x,u,flag,numofshowsteps)

%显⽰⽰波器

global T Y N; %声明使⽤的全局变量

switch flag,

case 0 %flag=0初始化

sizes = simsizes; %获取simulink仿真变量结构sizes.NumContStates = 0; %连续系统的状态数为0

sizes.NumDiscStates = 0; %离散系统的状态数为0

sizes.NumOutputs = 0; %输出信号数⽬是0

sizes.NumInputs = 1; %输⼊信号数⽬是0

sizes.DirFeedthrough = 1; %该系统是直通的

sizes.NumSampleTimes = 1; %这⾥必须是1

sys = simsizes(sizes);

str=[]; %通常为空矩阵

x0=[]; %初始化状态矩阵x0(零状态情况)

ts=[0,0]; %表⽰连续取样时间的仿真

N=0; %缓冲区全局变量初始化

T=zeros(1,numofshowsteps-1);

Y=zeros(1,numofshowsteps-1);

case 3 %flag=3计算输出

if N

N=N+1; %缓冲区数组跑标

Y(N)=u; %记录当前信号

T(N)=t; %记录当前时刻

else %缓冲区满(⼀帧完成)则作图

figure(1);

plot(T-min(T),Y); %做出⼀帧信号波形

axis([0 max(T)-min(T) 1.1*min(Y) 1.1*max(Y)]); %坐标范围 set(gcf,'DoubleBuffer','on'); %双缓冲避免作图闪烁

drawnow; %作图

N=0; %缓冲区跑标复位

end

case{1,2,4,9} %其他作不处理的flag

sys=5; %⽆⽤的flag时返回sys为空矩阵

otherwise %异常处理

error(['Unhandled flag = ',num2str(flag)]);

end

压控正弦振荡器:其中控制信号输⼊幅度为4、频率为1Hz的正弦波,压控振荡器的中⼼频率设置为10Hz,控制灵敏度为1Hz/V,初始相位为0,输出幅度为2V。测试模型:

S-function中的M⽂件:

function [sys,x0,str,ts] = zgy5(t,x,u,flag,Amp,f0,k,phi0)%VCO的实现

switch flag,

case 0 %flag初始化

sizes = simsizes; %获取simulink仿真变量结构

sizes.NumContStates = 1; %连续系统状态为1

sizes.NumDiscStates = 0; %离散系统状态数是0

sizes.NumOutputs = 1; %输出信号数⽬是1

sizes.NumInputs = -1; %输⼊信号数⽬是⾃适应的

sizes.DirFeedthrough = 0; %该系统不是直通的

sizes.NumSampleTimes = 1; % 这⾥必须是1

sys = simsizes(sizes);

str = []; %通常为空矩阵

x0 = [0]; % 初始状态矩阵x0

ts = [-1 0]; %采样时间由外部模块给出

case 1 %flag=1计算连续系统状态⽅程

sys=2*pi*f0+2*pi*k*u; %VCO输出⽅程

case 3 %flag=3 计算输出

sys=Amp*sin(x+phi0); %VCO输出⽅程

case{2,4,9} %其他作不处理的flag

sys=[]; %⽆⽤的flag时返回sys为空矩阵

otherwise %异常处理

error(['Unhandled flag = ',num2str(flag)]);

end显⽰结果:

2、锁相环载波提取的仿真

构建⼀个抑制载波的双边带调制解调系统。载波频率为10KHz,被调信号为1KHz正弦波,试⽤平⽅环恢复载波并进⾏解调。仿真模型:

AWGN:

信道Analog

filter:

低通滤