信號與系統MATLAB仿真——信號及其運算


1. 知識回顧

(1)信號的分類:

  • 確定信號與隨機信號;
  • 周期信號與非周期信號;
    • 周期信號在時間上必須是無始無終的
    • $f(t) = f(t + T)$
    • $f[k] = f[k + N]$
  • 連續時間信號和離散時間信號;
    • 連續信號是指在信號的定義域內,除若干個第一類間斷點外,對於任意時刻都由確定的函數值的信號
    • 離散信號是指在信號的定義域內,只在某些不連續規定的時刻給出函數值,而在其他時刻沒有給出函數的信號
  • 能量信號、功率信號與非功率非能量信號;
  • 時限與頻限信號;
  • 物理可實現信號。

(2)信號能量:\[E = \mathop {\lim }\limits_{T \to \infty } \int_{ - T}^T {{f^2}(t{\rm{)dt}}} \]

\[P = \mathop {\lim }\limits_{T \to \infty } \frac{1}{{2T}}\int_{ - T}^T {{f^2}(t{\rm{)dt}}} \]

\[E = \mathop {\lim }\limits_{N \to \infty } \sum\limits_{k =  - N}^N {{{\left| {f[k]} \right|}^2}} \]

\[P = \mathop {\lim }\limits_{N \to \infty } \frac{1}{{2N + 1}}\sum\limits_{k =  - N}^N {{{\left| {f[k]} \right|}^2}} \]

  • 能量信號:$0 < E < \infty $,$P = 0$;
  • 功率信號:$0 < P < \infty $,$E = \infty $。

(3)沖激函數的性質

  • 加權特性(篩選特性):\[f(t)\delta (t - {t_0}) = f({t_0})\delta (t - {t_0})\]
  • 取樣特性:\[\int_{ - \infty }^{ + \infty } {f(t)\delta (t - {t_0})}  = f({t_0})\]
  • 偶函數:\[f(t) = f( - t)\]
  • 展縮特性:\[\delta (at) = \frac{1}{{\left| a \right|}}\delta (t)\]\[\delta (at - {t_0}) = \frac{1}{{\left| a \right|}}\delta (t - \frac{{{t_0}}}{a})\]
  • 導數及其特性。

(4)正弦

  • 兩個頻率相同的正弦信號相加,即使其振幅和相位各不相同,但相加后結果仍是原頻率的正弦信號;
  • 若一個正弦信號的頻率是另一個正弦信號頻率的整數倍時,則合成信號是一個非正弦周期信號,其周期等於基波的周期。

正弦型序列:\[f[k] = A\sin ({\Omega _0}k + \varphi )\]

  • $2\pi /{\Omega _0}$是正整數:周期序列,周期為$N$;
  • $2\pi /{\Omega _0}$為有理數,$2\pi /{\Omega _0} = N/m$:周期序列,周期$N = m(2\pi /{\Omega _0})$;
  • $2\pi /{\Omega _0}$為無理數:非周期序列,但包絡仍為正弦函數。

(5)抽樣信號\[Sa(t) = \frac{{\sin t}}{t}\]

  • 偶函數;
  • $Sa(0) = 1$;
  • $t = k\pi $為其零點;
  • $\int_{ - \infty }^{ + \infty } {Sa(t){\rm{dt}} = \pi } $;
  • $\mathop {\lim }\limits_{t \to  \pm \infty } Sa(t) = 0$。

(6)信號的分解

  • 分解為直流分量與交流分量;
  • 奇偶分解;
  • 分解為實部和虛部;
  • 分解為基本信號的有限項之和;
  • 因子分解;
  • 連續信號分解為矩形脈沖序列;
  • 正交分解。

(7)系統

  • 線性系統與非線性系統:線性包含齊次性和疊加性兩個概念;
  • 時不變系統與時變系統:時不變系統的參數與時間無關而為一個常數,它的輸入與輸出的特性不隨時間的起點而變化;
  • 因果系統與非因果系統:因果系統是指響應不出現於激勵之前的系統;
  • 穩定系統與不穩定系統:若輸入有界,則輸出有界的系統稱為穩定系統(BIBO准則);
  • 記憶系統與無記憶系統:記憶系統的輸出不僅決定於當前時刻的輸入,而且與它過去的狀態(歷史)有關。

2. 連續時間信號的MATLAB實現

2.1 正弦信號

A=1;
w0=2*pi;
phi=pi/6;
t=0:0.001:4;
ft=A*sin(w0*t+phi);
plot(t,ft);

2.2 指數信號

%實指數信號
A=1;
a=-0.4;
t=0:0.001:10;
ft=A*exp(a*t);
plot(t,ft);
title('實指數信號');

function xzsu(w,n1,n2,a)
%n1:繪制波形的起始時間
%n2:繪制波形的終止時間
%w:虛指數信號的角頻率
%a:虛指數信號的幅度
t=n1:0.01:n2;
X=a*exp(1i*w*t);
Xr=real(X);
Xi=imag(X);
Xa=abs(X);
Xn=angle(X);
subplot(2,2,1);plot(t,Xr);axis([n1,n2,-(max(Xa)+0.5),max(Xa)+0.5]);title('實部');
subplot(2,2,3);plot(t,Xi);axis([n1,n2,-(max(Xa)+0.5),max(Xa)+0.5]);title('虛部');
subplot(2,2,2);plot(t,Xa);axis([n1,n2,0,max(Xa)+1]);title('模');
subplot(2,2,4);plot(t,Xn);axis([n1,n2,-(max(Xn)+1),max(Xn)+1]);title('相角');
end
%虛指數信號
xzsu(pi/4,0,15,2)

%復指數信號
t=0:0.01:3;
a=-1;b=10;
z=exp((a+1i*b)*t);
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('相角');

2.3 單位沖激信號

close all
t1=-1;
t2=5;
t0=0;
dt=0.01;
t=t1:dt:t2;
n=length(t);
x=zeros(1,n);
x(1,(-t0-t1)/dt+1)=1/dt;
stairs(t,x);
axis([t1,t2,0,1.2/dt]);
title('單位沖激信號');

2.4 單位階躍信號

function f=heaviside(t)
f=(t>0);
end
t=-1:0.001:3;
y=heaviside(t);
plot(t,y);
axis([-1,3,-0.1,1.2]);
title('單位階躍信號');

2.5 符號函數

t=-5:0.01:5;
y=sign(t);
plot(t,y);
axis([-5,5,-1.1,1.1]);
title('符號函數');

2.6 抽樣函數

t=-3*pi:pi/1000:3*pi;
ft=sinc(t/pi);
plot(t,ft);
title('抽樣信號');

2.7 矩形脈沖信號

  • ft=rectpuls(t, width)用以產生一個幅值為1,寬度為width,相對於t=0點左右對稱的脈沖信號。
t=0:0.001:4;
T=1;
ft=rectpuls(t-2*T,2*T);
plot(t,ft);
grid on;
axis([0,4,-0.5,1.5]);
title('矩形脈沖信號');

2.8 三角波脈沖信號

  • y=tripuls(t, width, skew)用以產生一個最大幅值為1,寬度為width,斜度為skew的三角波信號;
  • 斜度skew是一個介於-1到1之間的數,表示最大值所對應的橫坐標位置,最大值出現在t=(width/2)×skew的位置。
t=-3:0.001:3;
ft=tripuls(t,4,0.5);
plot(t,ft);
title('三角波脈沖信號');

2.9 周期性矩形脈沖和三角波脈沖信號

  • y=square(t, DUTY)用以產生一個周期為2π,幅值為±1的周期性方波信號,DUTY表示占空比;
  • y=sawtooth(t, WIDTH)用以產生一個周期為2π,幅值為±1的周期性三角波信號,WIDTH在0到1之間,表示最大值出現的位置。
t=-0.0625:0.0001:0.0625;
y=square(2*pi*30*t,75);
plot(t,y);axis([-0.0625,0.0625,-1.5,1.5]);
grid on;

t=-5*pi:pi/100:5*pi;
ft=sawtooth(t,0.5);
plot(t,ft);
axis([-16,16,-1.5,1.5]);
grid on;

3. 離散時間信號的MATLAB實現

離散信號與連續信號的標示方法類似,只不過使用stem函數而不是plot函數來畫出序列的波形。

3.1 正弦序列

k=0:39;
fk=sin(pi/6*k);
stem(k,fk);
title('正弦序列');

3.2 指數序列

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;
end
subplot(2,2,1);dszsu(1,5/4,0,20);xlabel('k');title('f1[k]');
subplot(2,2,2);dszsu(1,3/4,0,20);xlabel('k');title('f2[k]');
subplot(2,2,3);dszsu(1,-5/4,0,20);xlabel('k');title('f3[k]');
subplot(2,2,4);dszsu(1,-3/4,0,20);xlabel('k');title('f4[k]');

function dxzsu(n1,n2,w)
%n1:繪制波形的起始時間序號
%n2:繪制波形的終止時間序號
%w:虛指數序列的角頻率
k=n1:n2;
f=exp(1i*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('相角');
end
dxzsu(0,20,pi/4);

dxzsu(0,20,2);

只有當虛指數序列的角頻率滿足上文1(4)提到的條件時,信號的實部、虛部和相角都為周期序列,否則為非周期序列。

function dfzsu(n1,n2,r,w)
%n1:繪制波形的起始時間序號
%n2:繪制波形的終止時間序號
%w:復指數序列的角頻率
%r:指數序列的底數
k=n1:n2;
f=(r*exp(1i*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('相角');
end
dfzsu(0,20,1.2,pi/4);

dfzsu(0,20,0.8,pi/4);

3.3 單位沖激序列

k=-30:30;
delta=[zeros(1,30),1,zeros(1,30)];
stem(k,delta);
title('單位沖激序列');

3.4 單位階躍序列

k=-30:30;
uk=[zeros(1,30),ones(1,31)];
stem(k,uk);
title('單位階躍序列');

4. 連續時間信號的基本運算與波形變換

相加

  • s=symadd(f1,f2)
  • ezplot(s)

相乘

  • w=symmul(f1,f2)
  • ezplot(w)

微分與積分

  • h=0.001;
  • x=0:h:pi;
  • y=diff(sin(x.^2))/h;
  • Quad('function_name',a,b);

時移、反折、尺度變換

  • y=subs(f,t,t-t0);%時移
  • y=subs(f,t,-t);%反折
  • y=subs(f,t,a*t);%尺度變換
  • y=-f;%倒相變換

4.1 平移、尺度變換

clear;
t=-15:0.01:20;
f=-2*(stepfun(t,-3)-stepfun(t,0))+ ...
    2*t.*(stepfun(t,0)-stepfun(t,2))+ ...
    (-2*t+8).*(stepfun(t,2)-stepfun(t,4));
subplot(2,2,1);plot(t,f);axis([-6,6,-3,5]);grid on;text(-2,3,'f(t)');
subplot(2,2,2);plot(t+1,f);axis([-6,6,-3,5]);grid on;text(-2,3,'f(t-1)');
subplot(2,2,3);plot(0.5*t-2,f);axis([-6,6,-3,5]);grid on;text(1,3,'f(2t+4)');
subplot(2,2,4);plot(2-t,f);axis([-6,6,-3,5]);grid on;text(-3,3,'f(2-t)');

4.2 積分與微分

h=0.001;
t=-3:h:3;
ft=tripuls(t,4,0.5);
y1=diff(ft)/h;
figure(1);
for x=1:length(t)
    y2(x)=sum(ft(1:x))/1000;
end
subplot(2,2,1);plot(t,ft);
title('f(t)');
subplot(2,2,2);plot(t(1:length(t)-1),y1);
title('df(t)/dt');
subplot(2,2,3);plot(t,y2);
axis([-3,3,0,2.5]);
title('integral of f(t)');

4.3 信號的算數運算

syms t;
f1=str2sym('(-t+4)*(heaviside(t)-heaviside(t-4))');
subplot(3,2,1);ezplot(f1);title('f1(t)');
f2=str2sym('sin(2*pi*t)');
subplot(3,2,2);ezplot(f2);title('f2(t)');
y1=subs(f1,t,-t);
f3=f1+y1;
subplot(3,2,3);ezplot(f3);title('f3(t)=f1(t)+f1(-t)');
f4=-f3;
subplot(3,2,4);ezplot(f4);title('f4(t)=-f3(t)');
f5=f2*f3;
subplot(3,2,5);ezplot(f5);title('f5(t)=f2(t)*f3(t)');
f6=f1*f2;
subplot(3,2,6);ezplot(f6);title('f6(t)=f1(t)*f2(t)');

5. 離散序列的基本運算與波形變換

5.1 相加

function [f,k]=lsxj(f1,f2,k1,k2)
%離散信號的相加,f(k)=f1(k)+f2(k)
%f1、f2、k1、k2分別是參加運算的兩離散序列及其對應的時間向量
%f和k返回的是求和得到的離散序列及時間向量
k=min(min(k1),min(k2)):max(max(k1),max(k2));
s1=zeros(1,length(k));
s2=s1;
s1(find((k>=min(k1))&(k<=max(k1))==1))=f1;
s2(find((k>=min(k2))&(k<=max(k2))==1))=f2;
f=s1+s2;
stem(k,f,'filled');
axis([(min(min(k1),min(k2))-1),(max(max(k1),max(k2))+1),(min(f)-0.5),(max(f)+0.5)]);
end
f1=-2:2;
k1=-2:2;
f2=[1,1,1];
k2=-1:1;
subplot(2,2,1);stem(k1,f1);axis([-3,3,-2.5,2.5]);title('f1[k]');
subplot(2,2,2);stem(k2,f2);axis([-3,3,-2.5,2.5]);title('f2[k]');
subplot(2,2,3);[f,k]=lsxj(f1,f2,k1,k2);
title('f[k]=f1[k]+f2[k]')

5.2 相乘

function [f,k]=lsxc(f1,f2,k1,k2)
%離散信號的相乘,f(k)=f1(k)*f2(k)
%f1、f2、k1、k2分別是參加運算的兩離散序列及其對應的時間向量
%f和k返回的是求積得到的離散序列及時間向量
k=min(min(k1),min(k2)):max(max(k1),max(k2));
s1=zeros(1,length(k));
s2=s1;
s1(find((k>=min(k1))&(k<=max(k1))==1))=f1;
s2(find((k>=min(k2))&(k<=max(k2))==1))=f2;
f=s1.*s2;
stem(k,f,'filled');
axis([(min(min(k1),min(k2))-1),(max(max(k1),max(k2))+1),(min(f)-0.5),(max(f)+0.5)]);
end
f1=-2:2;
k1=-2:2;
f2=[1,1,1];
k2=-1:1;
subplot(2,2,1);stem(k1,f1);axis([-3,3,-2.5,2.5]);title('f1[k]');
subplot(2,2,2);stem(k2,f2);axis([-3,3,-2.5,2.5]);title('f2[k]');
subplot(2,2,3);[f,k]=lsxc(f1,f2,k1,k2);
title('f[k]=f1[k]*f2[k]')

5.3 差分和求和

  • y=diff(f);

  • y=sum(f(k1:k2));

5.4 時移、反折、尺度變換

clear;
k=-12:12;
k1=2.*k+4;
f=-[stepfun(k,-3)-stepfun(k,-1)]+ ...
    4.*[stepfun(k,-1)-stepfun(k,0)]+ ...
    0.5*k.*[stepfun(k,0)-stepfun(k,11)];
f1=-[stepfun(k1,-3)-stepfun(k1,-1)]+ ...
    4.*[stepfun(k1,-1)-stepfun(k1,0)]+ ...
    0.5*k1.*[stepfun(k1,0)-stepfun(k1,11)];
subplot(2,2,1);stem(k,f);axis([-12,12,-1,6]);
grid on;
text(-8,3,'f[k]');
subplot(2,2,2);stem(k+1,f);axis([-12,12,-1,6]);
grid on;
text(-9.5,3,'f[k-1]');
subplot(2,2,3);stem(k,f1);axis([-12,12,-1,6]);
grid on;
text(-8,3,'f[2k+4]');
subplot(2,2,4);stem(2-k,f);axis([-12,12,-1,6]);
grid on;
text(5.5,3,'f[2-k]');

6. 信號的分解

6.1 連續時間信號的奇偶分解

t=-2.5:0.01:2.5;
subplot(2,2,1);
y=real((1-(t-1).^2).^0.5);
plot(t,y,'k');
axis equal;
grid on;
text(-0.75,0.75,'x(t)');
subplot(2,2,3);
ye=real(0.5*((1-(1-t).^2).^0.5+ ...
    (1-(-t-1).^2).^0.5));
plot(t,ye,'k');
axis equal;
grid on;
text(-0.75,0.75,'xe(t)');
subplot(2,2,4);
yo=real(0.5*((1-(1-t).^2).^0.5- ...
    (1-(-t-1).^2).^0.5));
plot(t,yo,'k');
axis equal;
grid on;
text(-0.75,0.75,'xo(t)');

6.2 離散序列的奇偶分解

function [xeven,xodd,m]=sigevenodd(x,n)
m1=max(abs(n));
m=-m1:m1;
x1=zeros(1,length(m));
for i=1:length(m)
    x1(find((m==n(i))==1))=x(i);
end
for i=1:length(m)
    xeven(i)=(x1(find((m==n(i))==1))+x1(find((m==-n(i))==1)))/2;
    xodd(i)=(x1(find((m==n(i))==1))-x1(find((m==-n(i))==1)))/2;
end
end
n0=0;
n1=-10;
n2=10;
n=n1:n2;
x=[(n-n0)>=0];
subplot(2,2,1);
stem(n,x);
xlabel('n');ylabel('x(n)');title('Step Sequence');
grid on;
[xeven,xodd,m]=sigevenodd(x,n);
subplot(2,2,3);
stem(m,xeven);
xlabel('m');ylabel('x even(n)');title('Even Part');
grid on;
subplot(2,2,4);
stem(m,xodd);
xlabel('m');ylabel('x odd(n)');title('Odd Part');
grid on;


免責聲明!

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



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