MATLAB信號與系統分析(一)——連續時間信號與系統的時域分析


一、連續時間信號的表示:

1、向量表示法:

     在MATLAB中,是用連續信號在等時間間隔點的樣值來近似表示連續信號,當取樣時間間隔足夠小時,這些離散的樣值就能較好地近似出連續信號。

     對於連續時間信號f(t),一般是用兩個行向量f和t來表示。t=t1:p:t2 ,t1 表示的是信號的起始時間,t2為終止時間,p為時間的間隔。而f為連續時間f(t)在向量t所定義的時間范圍內對應的樣值。

2、符號運算表示法:

     使用sym定義變量,然后進行表示。

Eg:分別采用上述兩種方法畫出抽樣信號:

image

clear all;
t=-10:1.5:10;%取點數比較少,圖形會比較失真
f=sin(t)./t;
subplot(2,2,1),plot(t,f)

t=-10:0.1:10;%取點數比較多,圖形會比較接近
f=sin(t)./t;
subplot(2,2,2),plot(t,f)

f=sym('sin(t)/t');%采用符號方法
subplot(2,2,3),ezplot(f,[-10 10])
t=-3*pi:pi/100:3*pi;

ft=sinc(t/pi);%直接用malab中的函數
subplot(2,2,4),plot(t,ft)

 

二、一些常用信號的表示:

1、單位階躍信號:

(1)利用符號函數maple中的內核函數Heaviside

(2)利用自編函數Heaviside(t)

function f=Heaviside(t)
f=(t>0);

(3)利用符號函數來生成單位階躍函數

image

t=-10:0.1:10;
f=sign(t)/2+0.5;
plot(t,f);
axis([-5,5,-1.2,1.2]);
image
clear all
%利用maple中的heaviside函數來實現u(t+3)-2u(t)
subplot(2,2,1);
syms t
f=heaviside(t+3)-2*heaviside(t);
ezplot(f,[-3*pi,3*pi])
axis([-5,5,-1.2,1.2]);
title('u(t+3)-2u(t)');

%利用自己編寫的heaviside函數來實現u(t+3)-2u(t)
subplot(2,2,2);
t=-5:0.01:5;
f=Heaviside(t+3)-2*Heaviside(t);
plot(t,f);
axis([-5,5,-1.2,1.2]);
title('u(t+3)-2u(t)')

%利用符號函數來實現單位階躍信號
subplot(2,2,3);
t=-5:0.05:5;
f=sign(t);
ff=1/2+1/2*f;
plot(t,ff);
axis([-5 5 -0.1 1.1]);
title('u(t)')

%利用符號函數來實現u(t+3)-2u(t)
subplot(2,2,4);
t=-5:0.01:5;
f=(1/2+1/2*sign(t+3))-2*(1/2+1/2*sign(t));
plot(t,f),axis([-5,5,-1.2,1.2]),title('u(t+3)-2u(t)')
      PS:由於自己生成的階躍函數定義u(0)=0,而自帶的定義為u(0)=1,所以會出現這種圖形沒有連接起來的問題。

image

 

2、MATLAB信號處理工具箱提供的連續信號:

(1)使用MATLAB自帶函數生成:

%指數信號的表示y=A*exp(a*t)
subplot(2,4,1);
A=1;
a=-0.4;
t=0:0.01:10;
ft=A*exp(a*t);
plot(t,ft);
title('指數信號')  %要放在plot后面
grid on

%正弦信號y=A*sin(w0*t+phi)
subplot(2,4,2);
A=1;
w0=2*pi;
phi=pi/6;
t=0:0.001:8;
ft=A*sin(w0*t+phi);
plot(t,ft);
title('正弦信號');
grid on;

%抽樣函數sinc(t)=sin(pi*t)/pi*t
subplot(2,4,3);
t=-3*pi:pi/100:3*pi;
ft=sinc(t/pi);
plot(t,ft);
title('抽樣函數信號');
grid on;

%矩形脈沖信號y=rectpuls(t,width)產生一個幅值為1,寬度為width,相對於t=0點左右對稱的矩形波信號
subplot(2,4,4);
t=0:0.001:4;
T=1;
ft=rectpuls(t-2*T,2*T);
plot(t,ft);
axis([-1 5 -0.5 1.5]);  %要放在plot后面
title('矩形脈沖信號');
grid on;

%周期性矩形信號即方波信號y=square(t,DUTY)產生一個周期為2*pi,幅值為1(-1)的周期性方波信號,duty表示占空比
subplot(2,3,4);
t=-0.0625:0.001:0.0625;
ft=square(2*pi*30*t,75);
plot(t,ft);
axis([-0.0625 0.0625 -1.5 1.5]);   
title('頻率為30赫茲的周期性方波信號');
grid on;

%三角波脈沖信號y=tripuls(t,width,skew)用以產生一個最大幅度為1,寬度為width,斜度為skew的三角波信號。
%該函數的橫坐標范圍由向量t決定,是以t=0為中心向左右各展開width/2的范圍。
%斜度skew是介於-1和1之間的值,它表示最大幅度1出現所對應的橫坐標位置。
%一般地,最大幅度1出現在t=(width/2)×skew的橫坐標位置
subplot(2,3,5);
t=-3:0.001:3;
ft=tripuls(t,4,0.5);
plot(t,ft);
axis([-3 3 -0.5 1.5]);   
title('三角波脈沖信號');
grid on;

%周期性三角波信號y=sawtooth(t,width)用以產生一個周期為2*pi,最大幅度為1,最小幅度為-1的周期性三角波信號(又稱鋸齒波信號)。
%width表示最大幅度出現的位置
subplot(2,3,6);
t=-5*pi:pi/10:5*pi;
ft=sawtooth(t,0.5);
plot(t,ft);
axis([-16 16 -1.5 1.5]);   
title('周期性三角波信號');
grid on;

image

(2)信號工具函數

%一般周期性脈沖信號y=pulstran(t,d,'func',p1,p2,...)
%t制定pulstran的橫坐標范圍,向量d用於指定周期性的偏移量(即各個周期的中心點)
%整個pulstran函數的返回值實際上就相當於y=func(t-d(1))+func(t-d(2))+......
%p1,p2...是需要傳送給func函數的額外輸入參數值(除去時間變量t外),例如rectpuls需要width這個額外參數等

%一般周期性脈沖信號y=pulstran(t,d,'func',p1,p2,...)
%t制定pulstran的橫坐標范圍,向量d用於指定周期性的偏移量(即各個周期的中心點)
%整個pulstran函數的返回值實際上就相當於y=func(t-d(1))+func(t-d(2))+......
%p1,p2...是需要傳送給func函數的額外輸入參數值(除去時間變量t外),例如rectpuls需要width這個額外參數等
clear all;
subplot(1,2,1);
t=-0.5:0.001:1.5;
d=0:0.5:1;
y=pulstran(t,d,'rectpuls',0.1);%周期性矩形信號
plot(t,y);
axis([-0.1 1.1 -0.1 1.1]);
title('周期性矩形信號')   
grid on

%周期三角波信號
subplot(1,2,2);
t=-0.2:0.001:1.2;
d=0:1/2:1;
y=pulstran(t,d,'tripuls',0.1,-1);
plot(t,y);
axis([-0.1 1.1 -0.1 1.1]);
title('周期性三角波信號');
grid on;

image

 

3、復指數信號

image

例子:image

%實現方法一:

%fuction fexp(d,w,t1,t2,a)
%繪制復指數信號時域波形程序
%d:復指數信號復頻率實部
%w:復指數信號復頻率虛部
%t1:繪制波形的起始時間
%t2:繪制波形的終止時間
%a:復指數信號的幅度
clear all
figure(1);
fexp(0,pi/4,0,15,2);

%實現方法二:
t=0:0.01:15;
a=0;b=pi/4;
z=2*exp((a+i*b)*t);
figure(2)
subplot(2,2,1),plot(t,real(z)),title('實部')
subplot(2,2,3),plot(t,imag(z)),title('虛部') 
subplot(2,2,2),plot(t,abs(z)),title('')
subplot(2,2,4),plot(t,angle(z)),title('相角')
image

 

三、連續信號的時域運算、時域變換

1、利用符號運算實現連續信號的時域變換

(1)相加:

s=symadd(f1,f2)%s=f1+f2
ezplot(s)

(2)相乘:

s=symmul(f1,f2)%s=f1*f2
ezplot(s)

(3)移位:

y=subs(f,t,t-t0)%f(t-t0)
y=subs(f,t,t+t0)%f(t+t0)
ezplot(y)

(4)反折:

y=subs(f,t,-t)
ezplot(y)

(5)尺度變換:

y=subs(f,t,a*t)
ezplot(y)

(6)倒相

y=-f
ezplot(y)

image

clear all
syms t
%f=sym('(t/2+1)*(heaviside(t+2)-heaviside(t-2))')

f=(t/2+1)*(heaviside(t+2)-heaviside(t-2));
subplot(2,3,1),ezplot(f,[-3,3]),title('f(t)')

y1=subs(f,t,t+2)
subplot(2,3,2),ezplot(y1,[-5,1]),title('f(t+2)')

y2=subs(f,t,t-2)
subplot(2,3,3),ezplot(y2,[-1,5]),title('f(t-2)')

y3=subs(f,t,-t)
subplot(2,3,4),ezplot(y3,[-3,3]),title('f(-t)')

y4=subs(f,t,2*t)
subplot(2,3,5),ezplot(y4,[-2,2]),title('f(2*t)')

y5=-f
subplot(2,3,6),ezplot(y5,[-3,3]),title('-f(t)')
image

 

四、連續系統的沖激響應、階躍響應

image

1、沖激響應:

limpulse(b,a)

impulse(b,a,t)

impulse(b,a,t1:p:t2)

y=impulse(b,a,t1:p:t2)

 

2、階躍響應

step(b,a)
step(b,a,t)
step(b,a,t1:p:t2)
y=step(b,a,t1:p:t2)

      其中:

image

image

clear all;
a=[1 5 6];
b=[3 0 2];

%沖擊響應
figure(1)
subplot(2,2,1),impulse(b,a)
subplot(2,2,2),impulse(b,a,5) %繪制0~5范圍內沖激響應的時域波形
subplot(2,2,3),impulse(b,a,1:0.1:2) %繪制1~2范圍內,步長為0.1的沖激響應的時域波形
y1=impulse(b,a,1:0.1:3);%給出數值解
subplot(2,2,4),plot(1:0.1:3,y1)

%階躍響應
figure(2)
subplot(2,2,1),step(b,a)
subplot(2,2,2),step(b,a,5)
subplot(2,2,3),step(b,a,1:0.1:2)
y2=step(b,a,1:0.1:3);
subplot(2,2,4),plot(1:0.1:3,y2)
image image

 

五、求LTI連續系統的響應

1、零輸入響應:

nitial(A,B,C,D,y(0-),t)

2、零狀態響應:

Lsim(sys,X,t)
Lsim(b,a,X,t)
Lsim(A,B,C,D,X,t)

3、全響應:

lsim(A,B,C,D,X,t,y(0-))

其中:

微分方程系統函數對象的生成函數:sys=tf(b,a)

微分方程的狀態方程系數生成函數: [A,B,C,D]=tf2ss(b,a)

image

4、例子:

image

clear all;
a=[1 3 2];
b=[1 3];
t=0:0.01:10;
x=exp(-3*t);
rc=[2,1];
sys=tf(b,a)
[A,B,C,D]=tf2ss(b,a)
figure(1)
subplot(3,1,1),initial(A,B,C,D,rc,t) %零輸入響應
subplot(3,1,2),lsim(b,a,x,t)         %零狀態響應
subplot(3,1,3),lsim(A,B,C,D,x,t,rc)  %全響應,只能用狀態系數來表示系統

 

結果:

sys =
 
      s + 3
  -------------
  s^2 + 3 s + 2
 
Continuous-time transfer function.


A =

    -3    -2
     1     0


B =

     1
     0


C =

     1     3


D =

     0
image

 

六、兩個信號的卷積:

image

image

1、自編卷積函數:

function  [f,t]=gggfconv(f1,f2,t1,t2)    
    d=input(‘請輸入采樣時間間隔: ');
    f=conv(f1,f2);     %計算序列f1和f2的卷積和
    f=f*d; 
    ts=t1(1)+t2(1)   %計算序列f非零值的起始位置
    l=length(t1)+length(t2)-2; %計算序列f非零值的寬帶
    t=ts:d:(ts+l*d)      %計算序列f非零值的時間向量
    subplot(2,2,1);plot(t1,f1) 
    subplot(2,2,2);plot(t2,f2)
    subplot(2,2,3);plot(t,f);

2、例子:

image

clear all;
%計算連續時間信號卷積積分並繪波形
t1=-1:0.01:3;
f1=Heaviside(t1)-Heaviside(t1-2);               %定義信號 
t2=t1;
f2=0.5*t2.*(Heaviside(t2)-Heaviside(t2-2));     %定義信號 
[t,f]=gggfconv(f1,f2,t1,t2);                    %計算卷積積分並繪出時域波形


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM