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 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 %异常处理 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库Matlab与通信仿真课程设计报告在线全文阅读。
相关推荐: