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;
