再開一個系列,這個系列主要展示一下MATLAB畫信號。


眾所周知,MATLAB是一款功能強大的科學計算軟體。

我就不做具體介紹了,基本操作也略過,這些網上一搜一大把。


安裝包網上有很多,當然你不想去找的話可以用我的 R2018B 版本的:

鏈接:百度網盤鏈接

提取碼:o3xp

該資源僅供學習之用。

1. 單位衝激信號

單位衝激信號(unit impulse signal)是最基本的信號,定義如下:

egin {cases} delta(t) = 0, t 
e 0 \ int_{-infty}^{infty}delta(t)dt = 1end{cases}

delta[k] = egin {cases} 1 & 	ext{k = 0} \ 0 & 	ext k 
e 0 end{cases}

代碼:

k = -10 : 10;
yd = (k == 0);
stem(k, yd);

xlabel(k);
ylabel(f[k]);
title(unit impulse signal);

圖形:

stem()函數是用來畫離散信號圖的,第一個參數表示橫軸刻度, 第二個參數表示幅度。與之對應的plot()函數是用來畫連續信號圖的,馬上就會看到。


2. 單位階躍信號

單位階躍信號(unit step signal)也是一個很重要的信號,定義如下:

varepsilon(t) = egin {cases} 1 & 	ext t gt 0 \ 0 & 	ext t lt 0 end{cases}

varepsilon[k] = egin {cases} 1 & 	ext k ge 0 \ 0 & 	ext k lt 0 end{cases}

代碼:

t = -10 : 0.01 : 10;
ya = stepfun(t, 0);
plot(t, ya);

hold on;

k = -10 : 10;
yd = stepfun(k, 0);
stem(k, yd);

xlabel(t / k);
ylabel(f(t) / f[k]);
title(unit step signal);

圖形:

這裡我把兩張圖畫在一起了,藍色的代表連續信號,橙色的代表離散信號。代碼中 t 表示連續時間,k 表示離散取樣,下同。


3. 正弦信號

正弦或餘弦類信號這裡統稱為正弦信號(sinusoidal signal),因為他們只是相位差 frac{pi}{2} 的關係。定義如下:

f(t) = Asin(omega t +varphi)

f[k] = Asin(omega k +varphi)

代碼:

t = -10 : 0.01 : 10;
ya = sin(t);
plot(t, ya);

hold on;

k = -10 : 10;
yd = sin(k);
stem(k, yd);

xlabel(t / k);
ylabel(f(t) / f[k]);
title(sinusoidal signal);

圖形:

這裡提一下,藍色的連續信號其實並不「連續」,因為plot()函數其實只是把那些點連成了一條曲線而已。MATLAB無法畫出真正的連續信號圖,本質是因為馮·諾依曼結構的計算機是一個離散的系統。


4. 指數信號

指數信號(exponential signal)幾乎是最常用的信號了,各種變換中隨處可見。定義如下:

f(t) = Ae^{alpha t}

f[k] = Aalpha^k

代碼:

a = -0.5;

t = 0 : 0.01 : 10;
ya = exp(a * t);
plot(t, ya);

hold on;

k = 0 : 10;
yd = a .^ k;
stem(k, yd);

xlabel(t / k);
ylabel(f(t) / f[k]);
title(exponential signal);

圖形:

可以看到,他們並沒有重合,看代碼就知道,因為指數信號在連續系統和離散系統中定義不一樣。


5. 矩形信號

矩形信號(rectangular signal)也是一個基本信號,定義如下:

g_{	au}(t) = egin {cases} 1,& 	ext  |t| lt frac{	au}{2} \ 0 & 	ext |t| gt frac{	au}{2} end{cases}

g_{	au}[k] = egin {cases} 1,& 	ext  |k| lt frac{	au}{2} \ 0 & 	ext |k| gt frac{	au}{2} end{cases}

代碼:

t = -1 : 0.01 : 1;
ya = rectpuls(t);
plot(t, ya);

hold on;

k = -1 : 1;
yd = rectpuls(k);
stem(k, yd);

xlabel(t / k);
ylabel(f(t) / f[k]);
title(rectangular signal);

圖形:

當寬度為 1 的單位矩形信號進行 T = 1 的抽樣時得到的離散信號是單位衝激信號……


6. 方波信號

方波信號(square wave signal)可看作是週期性的矩形信號。

代碼:

w = 1;

t = -10 : 0.01 : 10;
ya = square(w * t);
plot(t, ya);

hold on;

k = -10 : 10;
yd = square(w * k);
stem(k, yd);

xlabel(t / k);
ylabel(f(t) / f[k]);
title(square wave signal);

圖形:


7. 抽樣信號

抽樣信號(sampling signal)定義如下:

Sa(t) = frac{sin(t)}{t}

Sa[k] = frac{sin(k)}{k}

代碼:

t = -10 : 0.01 : 10;
ya = sinc(t / pi);
plot(t, ya);

hold on;

k = -10 : 10;
yd = sinc(k / pi);
stem(k, yd);

xlabel(t / k);
ylabel(f(t) / f[k]);
title(sampling signal);

圖形:

在MATLAB中抽樣信號是sinc()函數,定義為:sinc(t) = frac{sin(pi t)}{pi t} ,故係數要除以一個pi


以上。

推薦閱讀:

相關文章