數字訊號處理實驗一(離散時間訊號的MATLAB實現)

YZ_51發表於2017-03-20

1.正弦序列

離散正弦序列的MATLAB表示與連續訊號類似,只不過是用stem函式而不是用plot函式來畫出序列的波形。下面就是正弦序列的MATLAB源程式。

%正弦序列實現程式
k=0:39;
fk=sin(pi/6*k);
stem(k,fk)


2.指數序列

離散指數序列的一般形式為,可用MATLAB中的陣列冪運算(即點冪運算)c*來實現。下面為用MATLAB編寫繪製離散時間實指數序列波形的函式。

function dszsu(c,a,k1,k2)
%c:指數序列的幅度
%a:指數序列的底數
%k1:繪製序列的起始序號
%k2:繪製序列的終止序號
k=k1:k2;
x=c*(a.^k);
stem(k,x,'filled')
hold on
plot([k1,k2],[0,0])
hold off


利用上述函式,實現實指數波形MATLAB程式如下(其中值分別為)。

%離散時間實指數序列實現程式
subplot 221;
dszsu(1,5/4,0,20);
xlabel('k');
title('f1[k]');
subplot 222
dszsu(1,3/4,0,20);
xlabel('k');
title('f2[k]');
subplot 223;
dszsu(1,-5/4,0,20);
xlabel('k');
title('f3[k]');
subplot 224;
dszsu(1,-3/4,0,20);
xlabel('k');
title('f4[k]');


分析程式執行結果,對於離散時間實指數序列,當的絕對值大於1時,序列為隨時間發散的序列,當的絕對值小於1時,序列為隨時間收斂的序列。同時可見,當的值小於零時,其波形在增長或衰減的同時,還交替地改變序列值的符號。

對於離散時間虛指數序列,可用通過呼叫下列繪製虛指數序列時域波形的MATLAB函式。

function[]=dxzsu(n1,n2,w)
%n1:繪製波形的虛指數序列的起始時間序號
%n2:繪製波形的虛指數序列的終止時間序號
%w:虛指數序列的角頻率
k=n1:n2;
f=exp(i*w*k);
Xr=real(f)
Xi=imag(f)
Xa=abs(f)
Xn=angle(f)
subplot(2,2,1), stem(k,Xr,'filled'),title('實部');
subplot(2,2,3), stem(k,Xi,'filled'),title('虛部');
subplot(2,2,2), stem(k,Xa,'filled'),title('模');
subplot(2,2,4), stem(k,Xn,'filled'),title('相角');


利用上述函式,實現虛指數波形MATLAB程式如下(其中虛指數分別為)

%離散時間虛指數實現程式
figure(1);
dxzsu(0,20,pi/4);
figure(2);
dxzsu(0,20,2);
程式執行結果如圖1.21(a)、(b)所示。由圖可見,只有當虛指數序列的角頻率滿足為有理數時,訊號的實部和虛部和相角都為週期序列,否則為非週期序列。
對於復指數序列,其一般形式為
可以通過呼叫下面繪製復指數序列時域波形的MATLAB函式。
function dfzsu(n1,n2,r,w)
%n1:繪製波形的虛指數序列的起始時間序號
%n2:繪製波形的虛指數序列的終止時間序號
%w:虛指數序列的角頻率
%r: 指數序列的底數
k=n1:n2;
f=(r*exp(i*w)).^k;
Xr=real(f);
Xi=imag(f);
Xa=abs(f);
Xn=angle(f);
subplot(2,2,1), stem(k,Xr,'filled'),title('實部');
subplot(2,2,3), stem(k,Xi,'filled'),title('虛部');
subplot(2,2,2), stem(k,Xa,'filled'),title('模');
subplot(2,2,4), stem(k,Xn,'filled'),title('相角');


利用上述函式,實現復指數序列波形MATLAB程式如下。

%復指數序列實現程式(r>1)
figure(1);
dfzsu(0,20,1.2,pi/4);
%復指數序列實現程式(0<r<1)
figure(2);
dfzsu(0,20,0.8,pi/4);
%復指數序列實現程式(r=1)
figure(3);
dfzsu(0,20,1,pi/4);

當r>1時,復指數序列的實部和虛部分別為幅度按指數增長的正弦序列;當0<r<1時,復指數序列的實部和虛部分別為幅度按指數衰減的正弦序列;當r=1時,復指數序列的實部和虛部分別為等幅正弦序列。

3.單位抽樣序列

可以通過藉助MATLAB中的零矩陣函式zeros表示。全零矩陣zeros(1,N)產生一個由N個零組成的列向量,對於有限區間的可以通過以下MATLAB程式表示

% 單位抽樣序列實現程式
k=-30:30;
delta=[zeros(1,30),1,zeros(1,30)];
stem(k,delta)


4.單位階躍序列

可以通過藉助MATLAB中的單位矩陣函式ones表示。單位矩陣ones(1,N)產生一個由N個1組成的列向量,對於有限區間的可以通過以下MATLAB程式表示

% 單位階躍序列實現程式
k=-30:30;
uk=[zeros(1,30),ones(1,31)];
stem(k,uk)



相關文章