宋春吉 韓壯志
(解放軍軍械工程學院 石家莊 050003)
?
基于Simulink自定義模塊偽碼調相信號的產生*
宋春吉韓壯志
(解放軍軍械工程學院石家莊050003)
Simulink具有豐富的標準模塊庫,但并非所有仿真系統都可以通過標準模塊搭建,其自定義模塊實現了Simulink的功能擴展。通過研究S-函數的工作原理,介紹了S-函數創建和封裝用戶自定義模塊的基本算法,利用S-函數M文件基本的框架資源,編寫了偽隨機碼信號的M源文件。通過分析偽碼調相信號的信號特性,實現了偽碼調相連續波信號的快速生成。仿真結果表明,自定義模塊擴充了Simulink的仿真功能,提供了一種新的雷達信號源產生方法,為工程人員的使用與研究提供極大方便。
Simulink;自定義模塊; S-函數; 偽碼調相
Class NumberTP391.9
Simulink作為對Matlab運算環境的擴展,結合工具箱的使用,可以完成對連續系統、離散系統、連續與離散混合系統的動態性能的仿真與分析[1]。系統仿真的同時,可以將運行數據實時存儲在Matlab的工作空間中,并且可以觀察仿真的執行過程。正是由于這些卓越的功能,使得它成為自動控制、航空航天、汽車設計等諸多領域仿真的首選語言。雖然Simulink模塊庫提供了豐富的通用模塊,但并不是所有數學模型或仿真系統都可以用Simulink通用模塊進行搭建[2]。S-函數正好彌補了這一不足,它提供了擴展 Simulink 功能的有力工具,并且支持參數傳遞。用戶可以建立一個能和 Simulink 模塊庫中的標準模塊一起使用的新模塊,利用封裝產生一個與 S-函數文件相對應的對話框和模塊圖標,不斷擴充 Simulink的仿真功能[3]。
偽碼調相連續波信號由于具有較高的時寬帶寬積,較好的自相關特性和較低的功率譜密度,被認為是雷達的理想信號波形[4~5]。但是,基于Simulink仿真系統的偽碼調相連續波信號的產生方法卻鮮有提及,并且Simulink此前多被用于控制領域[6~7],對雷達信號方面的仿真研究較少,所以本文在一定程度上拓寬了Simulink的應用領域,為偽碼調相連續波信號源的產生方法提供新思路。
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值的定義
偽碼調相連續波信號的表達式如式(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.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所示。
本文對仿真軟件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