備註:MOOC上西電《信號與系統》課程中的MATLAB編程部分筆記,chapter爲對應章節。
chapter1
%連續信號
%f(t) = 5e.^(-0.8t)sin(πt) 0<t<5
b = 5;a = 0.8;t = 0:0.001:5;
x = b*exp(-a*t).*sin(pi*t)
plot(t,x)
%離散信號
%f(k) = 2(0.8).^k
c = 2;d = 0.8;k = -5:5;
y = c*d.^k;
stem(k,y)
chapter2
求LTI系統的零狀態相應的函數爲lsim,調用格式爲:
y = lsim(sys,f,t)
其中,t表示計算系統相應的抽樣點向量;f是系統輸入信號,sys是LTI系統模型,表示微分方程。
系統模型sys要藉助tf函數,調用格式爲:
sys = tf(b,a)
b和a分別爲微分方程的右端和左端的各項係數。
例如:
%微分方程
a=[1,5,6];b=[1,0,2];
sys=tf(b,a)
例題:系統的微分方程爲,在t≥0接入激勵,求零狀態響應。
b=[1];a=[1 2 77];
sys=tf(b,a);
t = 0:0.01:5;
f = 10*sin(2*pi*t);
y = lsim(sys,f,t);
plot(t,y);
xlabel('Time(sec)')
ylabel('y(t)')
2.求解衝激響應和階躍響應
LTI系統的微分方程爲:
衝激響應的函數爲:impulse(b,a)
階躍響應的函數爲:step(b,a)
例題:求下列系統的衝激響應和階躍響應。
a=[7 4 6];
b=[1 1];
subplot(2,1,1)
impulse(b,a);
subplot(2,1,2)
step(b,a)
3.卷積的求解
MATLAB中處理離散卷積的函數爲:conv(f1,f2),對序列做卷積運算。
處理連續信號的卷積時,需要對連續信號取相同的步長,結果再乘實際步長。
例題:
已知兩個連續時間信號爲:
利用MATLAB畫出f1(t)* f2(t)的時域波形圖。
t11=0;t12=1;t21=0;t22=2;
t1=t11:0.001:t12;
ft1=2*rectpuls(t1-0.5,1); %幅值爲1,寬度爲1,t1=0.5點對稱的方波信號
t2=t21:0.001:t22
ft2=t2;
t3=t11+t21:0.001:t12+t22;
ft3=conv(ft1,ft2);
ft3=ft3*0.001;
plot(t3,ft3)
title('ft1(t)*ft2(t) ')
chapter3
1.求解單位脈衝響應
MATLAB提供了專門用於求LTI離散系統的單位脈 衝響應的函數:
h=impz(b,a,k)
其中a=[a0 ,a1 ,a2 ,…, an ],b=[b0 ,b1 ,b2 ,…, bn ]分別是差分方程左右的係數向量,k表示輸出序列的取值範圍,h 就是系統的單位脈衝響應。
例題:
求離散系統的單位脈衝響應。
k=0:10;
a=[1 3 2]; %構造方程左右係數向量
b=[1];
h=impz(b,a,k); %求單位脈衝響應並繪圖
stem(k,h,'.')
2.卷積和的求解(離散)
MATLAB中用於計算離散序列卷積的函數爲: conv(x1,x2)
例:求以下兩個離散序列的卷積。
k1=0:10; %x1的變量取值範圍
x1=sin(k1); %構建x1序列
k2=0:15; %x2的變量取值範圍
x2=0.8.^k2; %構建x2序列
y=conv(x1,x2);
subplot(3,1,1)
stem(k1,x1)
subplot(3,1,2)
stem(k2,x2)
subplot(3,1,3)
stem(y)
chapter4
1.求解系統響應
例題:
已知系統的頻率響應函數和輸入分別爲:
試用Matlab求解系統的響應。
t=0:pi/100:4*pi;
b=[-1,1]; %頻率響應函數的分子係數
a=[1 1]; %頻率響應函數的分母系數
ft=sin(t)+sin(3*t); % 激勵
yt=lsim(b,a,ft,t); %求解響應
plot(t,ft,'r')
hold on
plot(t,yt,'b')
2.Sa信號的採樣和恢復
例:信號Sa(t)作爲被採樣信號,信號帶寬B=1, 採樣頻 率ωs=2B,此頻率下的採樣爲Nyquist採樣,對採樣及恢復過程用Matlab進行仿真。
B=1; %信號帶寬
wc=B; %濾波器截止頻率
Ts=pi/B; %採樣間隔
ws=2*pi/Ts %採樣角頻率
N=100; %濾波器時域採樣點數
n=-N:N;
nTs=n.*Ts; %採樣數據的採樣時間
fs=sinc(nTs/pi); %函數的採樣點
Dt=0.005; %恢復信號的採樣間隔
t=-15:Dt:15; %恢復信號的範圍
fa=fs*Ts*wc/pi*sinc((wc/pi)*(ones(length(nTs),1)*t-nTs'*ones(1,length(t))));
%信號重構
error=abs(fa-sinc(t/pi)); %求重構信號與原信號的歸一化誤差
subplot(2,1,1)
plot(t,fa)
title('由 sa(t)=sinc(t/pi)的 Nyquist抽樣信號重構 sa(t)')
subplot(2,1,2)
plot(t,error)
title('Nyquist抽樣信號與原信號的誤差 error(t)')
從誤差圖形中可以看到,用採樣信號恢復的信號與原始信號的誤差是極小的,而且這種誤差來自於計算過程的數值計算誤差。
表明:對一個信號進行Nyquist採樣後,能夠無誤差地從採樣信號中恢復出原信號。
------------------------------------
以下的部分在:MOOC西電《工程信號與系統》
1.拉普拉斯變換的求解
MATLAB內置了符號函數laplace 和ilaplace函數分別對應拉普拉斯變換與反變換。
例: 計算的卷積。
這裏先求拉普拉斯變換,然後時域卷積等於頻域乘積。最後再反變換得到時域的卷積。
syms t;t=sym('t','positive'); %t定義爲正的“符號”變量
fs1=laplace(exp(-t)); %f1(t)的Laplace變換
fs2=laplace(t*exp(-t/2)); %f2(t)的Laplace變換
yt=simple(ilaplace(fs1*fs2)); %利用Laplace反變換求時域解
fs1,fs2,yt
運行結果:
fs1 =
1/(s + 1)
fs2 =
1/(s + 1/2)^2
yt =
4*exp(-t) - 4*exp(-t/2) + 2*t*exp(-t/2)
2.Matlab繪製零極點圖、判斷穩定
例題:
利用MATLAB畫出系統的零極點圖,並判斷系統的穩定性。
b=[1 4 3]; %分子係數,按降冪順序排列
a=[1 3 4 6 4]; %分母系數,按降冪順序排列
sys=tf(b,a)
pzmap(sys);sgrid;
azp=roots(a); %求出極點azp,在左半平面即爲穩定
%根據參量wd的值判斷穩定:1表示穩定,0表示不穩定
wd=1;
for k=1:length(azp)
if real(azp(k))>-0.000001
wd=0;
end
if wd==0
title('不穩定系統');
elseif wd==1
title('穩定系統');
end
end
運行結果:
sys =
s^2 + 4 s + 3
-----------------------------
s^4 + 3 s^3 + 4 s^2 + 6 s + 4
Continuous-time transfer function.
系統的零極圖,如圖所示,可見系統有4個極點, 2個零點,其中在虛軸上有一對共軛極點,故該系統是不穩定的。
(知識回顧:系統穩定需要H(s)極點全部都在左半開平面)
3.求頻率響應函數,判斷穩定
例題:
已知系統函數,畫出其零極點分佈,求系統的單位衝激響應h(t) , 和頻率響應H(jw) ,並判斷系統是否穩定。
num=[1];
den=[1 2 3 1];
sys=tf(num,den);
poles=roots(den);
figure(1);
pzmap(sys);
t=0:0.02:10;
h=impulse(num,den,t);
figure(2);plot(t,h);
title('Impulse Respone')
[H,w]=freqs(num,den);
figure(3);plot(w,abs(H));
poles=-0.4302 -0.7849 +1.3071i -0.7849 -1.3071i
極點都在左半開平面,系統穩定。