基于Simulink自定义模块伪码调相信号的产生*
2016-11-07宋春吉韩壮志
宋春吉 韩壮志
(解放军军械工程学院 石家庄 050003)
基于Simulink自定义模块伪码调相信号的产生*
宋春吉韩壮志
(解放军军械工程学院石家庄050003)
Simulink具有丰富的标准模块库,但并非所有仿真系统都可以通过标准模块搭建,其自定义模块实现了Simulink的功能扩展。通过研究S-函数的工作原理,介绍了S-函数创建和封装用户自定义模块的基本算法,利用S-函数M文件基本的框架资源,编写了伪随机码信号的M源文件。通过分析伪码调相信号的信号特性,实现了伪码调相连续波信号的快速生成。仿真结果表明,自定义模块扩充了Simulink的仿真功能,提供了一种新的雷达信号源产生方法,为工程人员的使用与研究提供极大方便。
Simulink;自定义模块; S-函数; 伪码调相
Class NumberTP391.9
1 引言
Simulink作为对Matlab运算环境的扩展,结合工具箱的使用,可以完成对连续系统、离散系统、连续与离散混合系统的动态性能的仿真与分析[1]。系统仿真的同时,可以将运行数据实时存储在Matlab的工作空间中,并且可以观察仿真的执行过程。正是由于这些卓越的功能,使得它成为自动控制、航空航天、汽车设计等诸多领域仿真的首选语言。虽然Simulink模块库提供了丰富的通用模块,但并不是所有数学模型或仿真系统都可以用Simulink通用模块进行搭建[2]。S-函数正好弥补了这一不足,它提供了扩展 Simulink 功能的有力工具,并且支持参数传递。用户可以建立一个能和 Simulink 模块库中的标准模块一起使用的新模块,利用封装产生一个与 S-函数文件相对应的对话框和模块图标,不断扩充 Simulink的仿真功能[3]。
伪码调相连续波信号由于具有较高的时宽带宽积,较好的自相关特性和较低的功率谱密度,被认为是雷达的理想信号波形[4~5]。但是,基于Simulink仿真系统的伪码调相连续波信号的产生方法却鲜有提及,并且Simulink此前多被用于控制领域[6~7],对雷达信号方面的仿真研究较少,所以本文在一定程度上拓宽了Simulink的应用领域,为伪码调相连续波信号源的产生方法提供新思路。
2 S-函数
S-函数,即系统函数,它是扩展Simulink功能的强有力工具。它使用户可以利用Matlab、C语言、C++语言以及FORTRAN等语言创建自定义的Simulink模块[8]。S-函数使用一种特殊的调用规则来使用户可以与Simulink的内部解法器进行交互,这种交互同Simulink内部解法器与内置的模块之间的交互非常相似[9]。
2.1S-函数工作原理
每一个Simulink模块都具有三个基本元素:输入变量、状态变量和输出向量,如图1所示。
图1Simulink模块的基本元素
其中输出变量又是输入变量、采样时间以及状态变量的函数[10]。它们之间的数学关系式如式(1)所示:
y=f0(t,x,u)
xk+1=fu(t,x,u)
(1)
其中
x=xc+xk
该式说明状态向量由连续状态和离散状态组成。
仿真过程中,Simulink自始至终在向量更新阶段产生重复调用。S-函数具有一套不同的调用方法,在模型仿真的不同阶段,Simulink会对模型中S-函数模块选择恰当的方法实现调用[11]。S-函数可以完成的任务大体分为以下几种:
1) 初始化
在进入仿真循环前,Simulink首先初始化S-函数,主要完成以下任务:
(1) 初始化包含S-函数信息的仿真结构SimSizes;
(2) 设置输入输出端口的维数;
(3) 设置模块的采样时间,即采样率的倒数;
(4) 分派内存区和sizes组数。
2) 计算下一个采样点
若用户使用了可变采样时间的模块,在这一阶段需要计算下一个采样时间点时间,也就是需要计算下一个时间步长。
3) 计算主时间步的输出量
此调用结束后,所有模块的输出端口对当前的时间步都是有效的了。
4) 更新主时间步的离散状态
5) 积分计算
这一步只有当模型带有连续状态或带有非采样过零点时才有效。
2.2M文件S-函数
M文件S-函数是具有固定变量规则的M文件,大部分S-函数都是利用模板文件 sfuntmpl. m (位于Matlab根目录的toolbox/simulink/blocks目录下)来编写的。S-函数的输入变量如表1所示,输出变量如表2所示。
表1 输入变量表
表2 输出变量表
S-函数M文件在运行过程中要检验输入变量flag的值,然后按照表的规则进行操作。
表3 S-函数Flag值的定义
3 伪码调相连续波M源文件的编写
伪码调相连续波信号的表达式如式(2)所示。其中c(t)为伪随机码编码信号,fc为载波频率。
st(t)=c(t)ej2πfct
(2)
图2 二相编码波形
典型的伪随机二相编码是由m序列、巴克码、Gold序列族、互补序列、L序列等序列对载波进行(0,π)调相来实现[12]。图2显示了伪码调相信号波形。其中tcode为码元宽度,T为载波信号周期,其中T=1/fc。
由于Simulink提供了正弦信号发生器,所以伪码调相连续波信号产生的关键在于生成伪码信号。本文以生成63位伪随机码信号为例,说明Simulink中自定义模块的创建及其封装方法,其S-函数M源文件的编写过程如下:
function [sys,x0,str,ts] = pncode(t,x,u,flag,fs,fcode)
switch flag,
case 0, %初始化
[sys,x0,str,ts]=mdlInitializeSizes(fs);
case 1, %计算连续状态导数
sys=mdlDerivatives(t,x,u);
case 2, %离散状态更新
sys=mdlUpdate(t,x,u);
case 3,%输出量计算
sys=mdlOutputs(t,x,u,flag,fs,fcode);
case 4, %计算下一个采样点时间
sys=mdlGetTimeOfNextVarHit(t,x,u,fs);
case 9,%执行仿真结束程序
sys=mdlTerminate(t,x,u);
otherwise %处置错误
error(['Unhandled flag = ',num2str(flag)]);
end
%%%%%%%%%%%%%%%%%%%%%%%
%mdlInitializeSizes当flag为0时,进行整个系统初始化
function [sys,x0,str,ts]=mdlInitializeSizes(fs)
%首先调用simsizes函数得到系统规模参数sizes,并根据离散系统实际情况设置sizes变量
sizes = simsizes;%读入初始化参数模板
sizes.NumContStates = 0; %无连续状态
sizes.NumDiscStates = 0; %无离散状态
sizes.NumOutputs= 1;%一个输出量
sizes.NumInputs= 0; %无输入量
sizes.DirFeedthrough = 1; %是否存在直接馈通,为1表示输出受到输入控制
sizes.NumSampleTimes = 1; %采样时间的个数(至少一个)
sys = simsizes(sizes); %将sizes中的信息返回
x0 = []; %初始化状态向量
str = []; %str通常为空向量
ts = [1/fs 0]; %设定采样周期
% end mdlInitializeSizes初始化结束
%%%%%%%%%%%%%%%%%%%%%%%
%mdlDerivatives当flag为1时,计算连续状态导数
function sys=mdlDerivatives(t,x,u)
sys = [];
%%%%%%%%%%%%%%%%%%%%%%%
%mdlUpdate当flag为2时,离散状态更新
function sys=mdlUpdate(t,x,u)
sys = [];
%%%%%%%%%%%%%%%%%%%%%%%
%mdlOutputs当flag为3时,计算输出变量
function sys=mdlOutputs(t,x,u,flag,fs,fcode)
tcode = 1/fcode; %设置码钟变量,决定码元宽度
load( 'SIGNAL1', 'pn' ); %置入预先设置的63位伪随机序列
Lcode=63; %序列长度
index = mod( fix( t/( tcode ) ) , Lcode) + 1; %通过取整、求余运算计算当前时刻码元位置
sys_tmp = real( pn(index )); %距离门信号输出
sys = sys_tmp;
%%%%%%%%%%%%%%%%%%%%%%%
%mdlGetTimeOfNextVarHit当flag为4时,计算下一个采样时间点
function sys=mdlGetTimeOfNextVarHit(t,x,u,fs)
sampleTime = 1/fs; % 时间步进,下一时刻为1/fs
sys = t + sampleTime;
%%%%%%%%%%%%%%%%%%%%%%%
% mdlTerminate当flag为9时,执行仿真结束程序
function sys=mdlTerminate(t,x,u)
sys = [];
将该程序以文件名 pncode.m 保存,该程序及其注释说明了S函数 M源文件编写的一般框架,可以根据需要在主程序中调用相关的子程序。在这里,通过正确编写 flag=0、2、3 标识的初始化、离散状态更新、输出计算等各阶段,就能够实现伪随机序列的生成。该自定义算法生动的展示了S函数的使用方法,为m序列伪随机信号的生成提供了较好地解决方案。
4 自定义模块的封装和调试
4.1模块的封装
通过将自定义模块封装成标准模块,用户可以直接对定义参数进行修改,可以与原有标准模块进行互联,扩展了Simulink功能的同时,为用户的使用提供方便。根据需要按照上述框架编好S-函数后,就可以对这些能实现特殊算法的模块进行封装和测试,其步骤是:
1) 向模型窗口中加入S-function模块,双击该模块,打开参数设置对话框(BlockParameters),输入源文件名“pncode”和用户定义的参数“fs、fcode”;
2) 选择该模块,右键打开封装编辑器(Mask Edition)。在 Initialization页中添加用户定义的变量参数“fs、fcode”;
3) 给模块命名;
4) 建立仿真模型框图,测试模块功能。
由式(2)可以看出伪码调相连续波信号中编码信号和载波信号之间的关系为相乘。本文搭建的仿真框图如图3所示。将各个模块拖到Simulink工作空间后,双击其中的 S-function模块,将给出如图4所示的S-函数参数设置对话框,在S-function name 栏目填写pncode,就可以建立起该模块和我们编写的 pncode.m文件之间的联系,在 S-function parameters 栏目还可以给出 S-函数的附加参数,fs和fcode,fs为系统采样时间,ts=1/fs为系统步进时间,tcode=1/fcode。在封装编辑器(Mask Edition)中输入fs和fcode 。
图3 系统仿真框图
图4 参数设置对话框
4.2模块的调试
本文设置参数fs=300MHz和fcode=0.25MHz,fc=0.25MHz获得伪随机码信号波形如图5所示,伪码调相仿真结果如图6所示。
5 结语
本文对仿真软件Simulink中S-函数的工作原理、函数格式及其封装过程作了详细的说明,通过对伪随机信号自定义模块的 M源文件的编写,充分展示了S-函数 M源文件的基本框架。扩展了Simulink使用功能的同时,提供了一种较为便利的伪码调相信号产生方法,为自定义模块的使用与研究提供可靠参考。
图5 伪随机码调制信号
图6 二相编码调制波形
[1] 李立兵,冯志彪.Simulink仿真模型稳定性研究[J].计算机仿真,2005,22(5):66-70.
[2] 王玉萍.基于Matlab/Simulink环境下的异步电机建模与仿真[J].防爆电机,2012,3(47):24-27.
[3] 胡琳静,孙正顺.Simulink中自定义模块的创建与封装[J].系统仿真学报,2004,16(3):488-491.
[4] 倪慧俊.探测高速目标的二相编码雷达技术研究[D].南京:南京理工大学,2011.
[5] 钟雄林.伪码调相连续波雷达干扰技术研究[D].西安:西安电子科技大学,2012.
[6] 侯浩亮,姚新宇,冯晓梅,等.C-MEX S-函数在Simulink中的应用[J].微计算机信息,2010,7(26):140-142.
[7] 赵富宁,王红艳.Matlab/Simulink在电路分析中的应用[J].计算机时代,2014,7(4):21-23.
[8] 马永光,冉宁,赵朋.基于S函数在自抗扰控制器Simulink仿真中的应用[J].仪器仪表用户,2012,4(19):78-80.
[9] 李晓静,黄红飞.S-函数建模和仿真过程研究[J].电子工程设计,2011,19(18):27-32.
[10] 赵玮,谭德荣,于剑峰.Simulink中自定义模块的创建[J].微计算机应用,2006,27(3):379-381.
[11] 姚俊,马松辉.Simulink建模与仿真[M].西安:西安电子科技大学出版社,2002.
[12] 张永胜.伪码调相连续波雷达的性能与应用研究[D].南京:南京理工大学,2004.
Generation of Pseudo-random Code Based on Simulink Custom Block
SONG ChunjiHAN Zhuangzhi
(Ordnance Engineering College of PLA, Shijiazhuang050003)
Simulink has a rich library of standard blocks, but not all of the simulation system can be built through the standard block, its custom block implements the function extension of Simulink. By studying the working principle of S-function,this paper introduces the basic algorithm of the S-function to create and encapsulate the user-defined block, and uses the basic framework of the S-function to write the M resource file of the pseudo-random code signal. Through the analysis of signal characteristics of pseudorandom code phase modulation signal, realize the rapid generation of pseudorandom code. The simulation results show that the custom module extends the simulation function of Simulink, a new method for generating radar signal source is provided, which can provide great convenience for the use and research of engineering personnel.
Simulink, custom block, S-function, pseudo-random code phase modulation
2016年4月17日,
2016年5月21日
宋春吉,男,硕士研究生,研究方向:雷达信号处理和弹丸初速测量。韩壮志,男,副教授,硕士生导师,研究方向:雷达高分辨弹道测量,电磁环境模拟与雷达网络化对抗。
TP391.9
10.3969/j.issn.1672-9730.2016.10.014