說在前面
我們都知道Matlab是一個進行矩陣運算的數學工具,其包含多種數學函數友善我們進行多種運算。本文旨在将matlab用于信号與信号系統的模拟,本人學曆尚淺請多多指教。
Matlab模拟信号
在Matlab中變量均為矩陣,是以無法表達時域連續信号。我們首先對信号進行采樣。如下例子:
fs=10; %采樣頻率
n=0:1/fs:10; %對時域采樣
y=sin(2*pi*n); %建立sin信号
stem(n,y,'filled'); %畫出點圖
如果需要建立連續的圖形,應使用plot()函數,該函數會自動連接配接采樣點使圖形整體更加連貫。
fs=10; %采樣頻率
n=0:1/fs:10; %對時域采樣
y=sin(2*pi*n); %建立sin信号
plot(n,y); %畫出連續圖
這個過程對一個頻率為1的正弦函數進行頻率為10Hz的時域采樣。采樣間隔為1/fs=0.1s。采樣後,離散的資料被儲存為行為1的矩陣,在matlab裡我們通過這樣的矩陣運算可以仿真信号的變化。
可以看到n與y均為101點矩陣。
n=0:0.1:10這樣定義n與n=0:100這樣雖然效果均為定義101點,但第一種更為符合信号的規範,第一種定義中,n的值對應信号的時域範圍,0.1具有采樣周期的意義,而第二種沒有意義。
信号采樣的注意點
我們可以想象,如果fs很大很大,那麼在時域來看采樣後的結果将會十分接近于原來的連續信号,但是往往實際上這樣密集的采樣是難以實用且有代價的;務必注意的是fs不能過小,根據采樣定理fs應該最小應大于原信号最高頻率的2倍,例如上例sin的頻率是1故fs應大于2。如果采樣頻率fs為1.2如下所示:
這樣做是無法表現原信号的,其原因是頻率的混疊,這一點以後将專門講解。(或參考采樣定理)
常用信号介紹
heaviside 機關階躍函數
sin 正弦函數
cos 餘弦函數
sinc函數
exp 指數函數
rectpuls 門函數
tripuls 三角脈沖函數
square 周期方波
sawtooth 周期鋸齒波或三角波
簡單的例程
1、x(t)=exp(-t)sin(2Πt)[u(t)-u(t-3)]
fs=10; %采樣頻率
n=0:1/fs:10; %對時域采樣
y1=exp(-n); %指數信号
y2=sin(2*pi*n); %正弦信号
y3=heaviside(n)-heaviside(n-3); %階躍信号
y=y1.*y2.*y3; %點乘
stem(n,y,'filled'); %畫出點圖
可以看到階躍函數做差後的結果是0-3上為1其餘為0;正弦函數乘e的負指數後按照正弦的頻率,做指數衰減。
值得注意的是使用函數heaviside形成的階躍響應,在0與1交界點處值為0.5,這是符合離散階躍函數定義的,但連續的階躍函數交界處應為1。
小結
本節介紹了一些基本信号仿真的方法,對于剛剛接觸信号仿真的學生來說,程式設計規範十分重要,每個變量都有其實際的意義,切忌應付了事。以後有機會我盡可能分享更多這方面的經驗。