陳昌兆
(安徽理工大學 力學與光電物理學院,安徽 淮南232001)
《信號與系統》是電子信息類專業一門重要的專業基礎課,是進一步學習后續課程如《數字信號處理》《通訊原理》《自動控制原理》等課程的基礎.它是信息與通訊工程、電子科學與技術、控制科學與工程等國家一級學科在大學本科階段的專業必修課.主要任務是研究信號與系統理論的基本概念和基本分析方法,通過建立信號與系統的數學模型并求解,然后對所得結果給以物理解釋并開展相應的工程應用.由于課程的學習需要熟練使用多種數學工具、深刻理解其中蘊含的物理概念和原理并用來解決實際的工程問題,這些都給課程的教學造成了一定的困難.
如何積極有效地開展《信號與系統》的課程教學是擺在教師面前的十分突出的問題.由于傳統的教學方式形式單一、內容乏味,很難在數學理論、物理概念和工程應用之間建立緊密的關聯,這是導致學生難學、教師難教的主要原因.為了克服傳統教學中存在的種種弊端,激發學生的學習積極性和主動性,國內外很多高校將互聯網、多媒體、手機APP以及仿真等基于計算機的人機互動式教學手段引入到《信號與系統》課程教學中并起得不錯的教學效果[1-5].例如,美國德克薩斯大學埃爾帕索分校已經連續多個學期將信息技術手段引入到課程教學中.參加該課程的學生可以通過Connexions、四基系統、交互式模擬和Openstax Tutor四種技術參與學習,利用Connexions模塊可以在任意的時間和地點開展學習,并借助四基系統通過作業反饋等手段加深對課程中的重要專題的認識深度[4].阿根廷Rosario大學以J.C.Gomez[5]教授為首的《信號與系統》教學團隊將網上演示和測試、多媒體課件、虛擬實驗室等多種ICT(Information and Communications Technologies)工具引入到傳統的課堂教學中,多年實踐的結果表明傳統教學和這些ICT工具的綜合使用大大改善了課堂教學效果,提高了學生對課程學習的滿意度,同時也提高了他們的學習成績.
在多種多樣的基于ICT的輔助教學中,計算機仿真最為行之有效,特別是MATLAB的出現給《信號與系統》課程的計算機輔助教學帶來了便捷,其強大的數學計算功能、豐富的工具箱函數和可視化的圖形用戶界面給課程教學帶來了極大的感官刺激,增強了課堂互動性,提高了學生學習的主動性和參與度.《信號與系統》課程的MATLAB仿真國內外有不少教材和參考書,如清華大學谷源濤教授[6]主編的《信號與系統—MATLAB綜合實驗》以及韓國中央大學W.Y.Yang等人[7]編寫的《Signals and Systems with MATLAB 》,這些參考書系統、全面,但對初學者而言需要時間去練習并消化和吸收.實際上,對于初學者而言,快速入門至關重要,《信號與系統》雖然內容眾多但貫穿其中的始終是一些重要的概念和分析方法,如卷積、單位沖激響應、傅里葉變換與頻譜、拉普拉斯(z)變換與系統函數、濾波、調制和解調、根軌跡等等.在有限的教學時限下,教師選擇能夠涵蓋多個關鍵知識點的經典例題進行MATLAB仿真不僅能加深學生對多個概念之間關聯性的理解,還能取得事半功倍的教學效果.此處我們借助一個帶通濾波系統典型例題的MATLAB分析闡述仿真軟件在課程教學中的應用,雖然無法做到面面俱到,但至少是抓住了問題的關鍵.為了方便初學者,不僅附上每一個仿真的MATLAB程序,同時還有詳細的中文注解,相信這些注解對初學者是大有裨益的.
清華大學鄭君里教授主編的教材《信號與系統》(第三版,高等教育出版社)的上冊第301頁有一道關于調幅信號作用于帶通系統的例題,題干如下(略作改動):
上述例題中激勵信號是一種典型的調幅信號,cos(100t)為高頻載波,1+cost為低頻基帶信號,調幅信號就是用低頻調制信號去控制高頻振蕩的振幅,使高頻振蕩的振幅按照調制信號的規律振蕩,這種調制技術在無線電波的有效發射等涉及頻譜搬移的實際問題中都有應用.針對上述例題的MATLAB仿真至少可以包含以下內容:(1)激勵信號的頻譜觀察;(2)系統函數分析系統;(3)輸出響應;(4)在上述電路基礎上引入反饋,進而進行根軌跡分析.這些重要專題的MATLAB仿真將分開闡述.
頻譜是《信號與系統》課程中極為重要的概念,時域信號與頻譜之間通過傅里葉變換聯系.頻譜分析的目的是把復雜的時間歷程波形,經過傅里葉分析分解為諸多諧波分量來研究,以獲取動態信號中的各個頻率成分幅度和相位分布,從而得到主要幅度和能量分布的頻率值,完成對信號信息的定量解釋.激勵信號可以寫成x(t)=cos(100t)+0.5cos(101t)+0.5cos(9t),基于MATLAB程序的時域波形及其頻譜圖如下:
%% 信號波形
figure(1)
subplot(1,2,1)% 將圖1定義為1×2矩陣圖,
下一個圖位于位置(1,1)
t=0:0.01:12; % 定義時間矢量t,抽樣間隔為
0.01s
x=cos(100*t)+0.5*cos(101*t)+0.5*cos(99*t);% 定義 x矢量
N=length(x); % 求x矢量中元素個數N
plot(t,x)% 畫信號波形圖
xlabel('time in sec');
ylabel('x(t)');
title('Signal Waveform');
grid;
%% 信號頻譜
subplot (1,2,2); % 下一個圖位于位置(1,2)
x_f=fft(x); % 對信號x實行快速傅里葉變換
l=0:N-1; % 時間序列
k=(100/N)*l; % 頻率序列
stem(k,abs(x_f))% 繪制幅度譜圖
xlabel('frequency in Hz')
title('Spectrum of Signal');
grid;
從圖1可以看出輸入信號的包絡線按照1+cost變化,變化周期為2π,最大振幅為2,對應的位置點為2nπ處.頻譜圖中采樣頻率fs=100Hz,奈奎斯特頻率為fs/2=50Hz,譜圖對奈奎斯特頻率呈現對稱性,頻譜的峰值在16Hz左右,對應于原信號中角頻率為100ras/s(線頻率15.9Hz)成分,另外兩種頻率成分對應的角頻率分別為99、101rad/s,幅度只有100ras/s處頻率的一半,由于三種頻率成分十分靠近,所以頻譜疊在一起很難分辨.

圖1 信號時域波形及其頻譜
用系統函數分析系統是《信號與系統》課程中最常見的任務之一,因為系統函數刻畫的是系統本身的性質,跟外加輸入信號沒有關系.系統函數實際上是單位沖激響應的拉普拉斯變換(z變換),而頻響函數對應單位沖激響應的傅里葉變換.利用系統函數零極點分布可以分析系統的多種性質,如穩定性、因果性等等,而頻響函數可以用來分析信號作用于系統時不同頻率成分的幅度衰減和相移情況,是系統設計(如濾波器設計)的重要依據.針對當前的帶通濾波系統用Matlab繪制該系統的零極點圖、頻響曲線和單位沖激響應.程序代碼和圖形如下:
%% 定義變量
t=linspace (0,5,401); % 定義時間矢量t,0~5s
之間共401個線性等分點
w=logspace (1,3,401); % 定義頻率向量w,
10~103rad/s之間401個對數間隔點
num=[2 0]; % 定義系統函數分子多項式
den=[1 2 10001]; % 定義系統函數分母多項式
[poles,zeros]=pzmap (num,den); % 定義系統
函數零、極點向量
[mag,angle]=bode (num,den,w); % mag 和
angle定義為w處頻響的幅度和相位
[y,x]=impulse (num,den,t); % y定義為t處系
統函數的沖激響應
%% 零極點圖
figure(1)% 圖1
subplot(2,2,1)% 將圖1定義為2×2矩陣圖,
下一個圖位于位置(1,1)
plot(real(poles),imag(poles),'x',real(zeros),
imag(zeros),'o'); % 繪制零極點圖
title ('Pole-Zero Diagram'); % 添加標題
xlabel ('Real'); % 添加 x軸標簽
ylabel ('Imaginary'); % 添加 y軸標簽
axis([-1.1 0.1 -120 120]); % 定義 x、y 軸范圍
grid;
%% 頻響曲線
subplot(2,2,2); % 下一個圖位于位置(1,2)
semilogx(w,20*log10(mag)); % 繪制對數w值
幅度,以分貝為單位
title ('Magnitude of Bode Diagram'); % 添加標題
ylabel('Magnitude (dB)'); % 添加y軸標簽
xlabel('Radian Frequency (rad/s)'); % 添加x軸
標簽
axis([10 1000 -60 0]); % 定義 x、y 軸范圍
grid;
subplot(2,2,4); % 下一個圖位于位置(2,2)
semilogx(w,angle); % 繪制對數w值相位
title('Angle of Bode Diagram'); % 添加標題
ylabel('Angle (deg)'); % 添加y軸標簽
xlabel('Radian Frequency (rad/s)'); % 添加x軸
標簽
axis([10 1000 -90 90]); % 定義 x、y 軸范圍
grid;
%% 單位沖激響應
subplot (2,2,3); % 下一個圖位于位置(2,1)
plot(t,y); % 線性繪制階躍響應
title ('Impulse Response'); % 添加標題
xlabel ('Time (s)'); % 添加x軸標簽
ylabel ('Amplitude'); % 添加 y軸標簽grid;
圖2(a)顯示H(s)的零點在0,極點在-1±j100,二者都是單階的.單位沖激響應(圖2(b))是振蕩衰減的,這與H(s)的反拉普拉斯變換表達式相吻合,即

圖2(c)和(d)分別顯示系統的幅頻和相頻特性,幅頻曲線的基本特征是峰值點100rad/s,偏離此值,幅度迅速衰減.通帶集中在100rad/s附近極小的頻率范圍(99~101rad/s),在此段頻率范圍,相位呈現線性特征.系統具有明顯的帶通濾波特性,通帶的范圍很窄,有效帶寬大約2rad/s.

圖2 (a)系統零極點分布; (b)單位沖激響應;(c)幅頻特性曲線;(d)相頻特性曲線
利用lsim命令計算輸出響應,輸出信號及其頻譜的代碼和波形如下:
subplot (1,2,1);
num=[2 0]; % 定義多項式分子
den=[1 2 10001]; % 定義多項式分母
t=linspace(0,12,1201); % 定義時間矢量t,0-12s之間共1201個線性等分點
x=cos(100*t)+0.5*cos(101*t)+0.5*cos(99*t);
% 計算輸入函數
[y,x]=lsim(num,den,x,t); % 在 t時刻計算對輸入x的響應
plot(t,y); % 輸出繪圖
xlabel('Tim e (s)');
ylabel('Amplitude');
title('Output Signals');
grid;
subplot (1,2,2); % 下一個圖位于位置(1,2)
N=length(y);
y_f=fft(y); % 對信號y實行快速傅里葉變換
l=0:N-1; % 時間序列
k=(100/N)*l; % 頻率序列
stem(k,abs(y_f))% 繪制幅度譜圖
xlabel('frequency in Hz')
title('Spectrum of Signal');
grid;
輸出響應是系統在調幅波激勵下產生的零狀態響應,包含暫態和穩態分量.從圖3(a)可以看出,從第二個波包開始,輸出趨于穩定,說明暫態分量基本消失.穩態響應的輸出仍然是調幅波,但整體相對于輸入信號向右偏移0.8左右,幅度相對于輸入信號有所衰減.跟輸入信號相比,輸出信號的頻譜(圖3(b))位置并未改變,頻譜的峰值也在16Hz左右,幅度基本與輸入信號中該頻率成分一致,另外兩種頻率成分對應的角頻率分別為99、101rad/s,幅度明顯小于100ras/s處頻率的一半.這些結論跟教材中得出的如下穩態響應表達式是完全吻合的.


圖3 (a)輸出信號的波形;(b)輸出信號的頻譜
根軌跡是開環系統某個參數沿正實軸從零變化到無窮時,閉環系統特征方程式的根在s平面上的軌跡.它是一種利用幾何手段分析和設計線性時不變系統的方法.一個常見的例子是當開環增益改變時跟蹤閉環系統的極點在復平面上的變化.例如,圖4所示的反饋系統中,閉環增益由H(s)=A(s)/[1+KA(s)]給出.

圖4 比例負反饋系統框圖
上式中A(s)一般是s的有理分式,MATLAB提供了一個叫“rlocus”的函數計算根軌跡.假設A(s)=2s/(s2+2s+10001),則相應的程序代碼和根軌跡圖如下:
num=[2 0];
den=[1 2 10001];
rlocus(num,den)%畫根軌跡
xlabel ('Re(s)');
ylabel ('Im(s)');
title('Locus of Roots');
從圖5可以看出,根軌跡有兩條.一條從-1+j100出發通過實軸上點-100然后沿實軸正方向終止于原點,另一條從-1-j100出發通過實軸上點-100然后沿負實軸終止于無窮遠處.根軌跡中不在實軸上的部分一定關于實軸鏡像對稱.

圖5 根軌跡圖
《信號與系統》課程教學中引入MATLAB仿真可以大大改善課堂教學效果.我們以帶通濾波器作為示例,展示了課程教學中幾個關鍵性專題的MATLAB實現方法,不僅能夠引導學生快速入門,還能夠進一步加深學生對課程中最為重要的幾個知識點的理解.