天天看點

matlab在信号實驗中的運用一:常用信号的生成與采樣

說在前面

我們都知道Matlab是一個進行矩陣運算的數學工具,其包含多種數學函數友善我們進行多種運算。本文旨在将matlab用于信号與信号系統的模拟,本人學曆尚淺請多多指教。

Matlab模拟信号

在Matlab中變量均為矩陣,是以無法表達時域連續信号。我們首先對信号進行采樣。如下例子:

fs=10;                     %采樣頻率
n=0:1/fs:10;              %對時域采樣
y=sin(2*pi*n);                 %建立sin信号
stem(n,y,'filled');       %畫出點圖
           
matlab在信号實驗中的運用一:常用信号的生成與采樣

如果需要建立連續的圖形,應使用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裡我們通過這樣的矩陣運算可以仿真信号的變化。

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如下所示:

matlab在信号實驗中的運用一:常用信号的生成與采樣

這樣做是無法表現原信号的,其原因是頻率的混疊,這一點以後将專門講解。(或參考采樣定理)

常用信号介紹

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');       %畫出點圖
           
matlab在信号實驗中的運用一:常用信号的生成與采樣
matlab在信号實驗中的運用一:常用信号的生成與采樣

可以看到階躍函數做差後的結果是0-3上為1其餘為0;正弦函數乘e的負指數後按照正弦的頻率,做指數衰減。

值得注意的是使用函數heaviside形成的階躍響應,在0與1交界點處值為0.5,這是符合離散階躍函數定義的,但連續的階躍函數交界處應為1。

matlab在信号實驗中的運用一:常用信号的生成與采樣

小結

本節介紹了一些基本信号仿真的方法,對于剛剛接觸信号仿真的學生來說,程式設計規範十分重要,每個變量都有其實際的意義,切忌應付了事。以後有機會我盡可能分享更多這方面的經驗。

繼續閱讀