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:
低通滤