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;

