通信信號與系統分析(一)

本篇主要分爲兩部分來闡述,分別爲:離散信號和系統,Fourier分析。

(1)離散信號與系統

離散時間信號是最常見的信號形式,對連續時間信號進行採樣可以得到離散時間信號。

A離散信號

例1 畫出x=cos2t,0<=t<=2*pi的抽樣序列,抽樣週期爲0.1s。
clear all
t=0:0.1:2*pi;//抽樣時間
x=cos(2*t);
stem(t,x);

圖形爲:

B 卷積和

卷積和是求離散線性時不變系統的主要方法。MATLAB給出了求兩個線性卷和函數conv(x,y).利用它可以方便的求出兩個序列的卷積和。
2 求序列h(n)=exp(-0.1*n),x(n)=exp(-0.2*n),0<=n<=40的卷積和。代碼如下:
clear all
n=0:40;
x1=sin(2*pi*0.1*n);
x2=exp(-0.1*n);
x=x1+x2;
y=x1.*x2;
subplot(4,1,1);stem(n,x1);title('x1')
subplot(4,1,2);stem(n,x2);title('x2')
subplot(4,1,3);stem(n,x);title('x')
subplot(4,1,4);stem(n,y);title('y')

這裏寫圖片描述

C求輸出相應

一個離散時間系統可以是一個硬件裝置,也可以是一個數學表達式。總之,輸入輸出有一種關係存在,我們知道輸入,就可以得到輸出。
3 一個離散時間系統輸入/輸出關係爲:
y(n)=a*y(n-1)+x(n);
若:
(1)x(n)=1,n=0;
(2)x(n)=exp(-0.1*n),0<=n<=40;a=0.8,y(n)=0,n<0,y(0)=x(0),試求上述系統在所給定輸入下的相應。
clear all
N=60;
x1=zeros(1,N);
x1(1)=1;
x2=zeros(1,N);
x2(1:41)=exp(-0.1*(0:40));
y1(1)=x1(1);
y2(1)=x2(1);
for n=2:N
y1(n)=0.8*y1(n-1)+x1(n);
y2(n)=0.8*y2(n-1)+x2(n);
end
subplot(4,1,1);stem(x1);title('x1')
subplot(4,1,2);stem(x2);title('x2')
subplot(4,1,3);stem(y1);title('y1')
subplot(4,1,4);stem(y2);title('y2')

這裏寫圖片描述

(2)Fourier分析

Fourier分析包括了連續時間和離散時間Fourier變換和Fourier級數,以及包括數字信號處理中最基本也是最重要的離散Fourier變換(DCT);

A 連續時間信號的Fourier變換

F=fourier(f)是符號函數f的Fourier變換,默認返回是關於w的函數。
f=ifourier(F)是函數F的Fourier逆變換,默認的獨立變量是w,默認返回是關於x的函數。
注意:
(1)在調用fourier和ifourier之前,需用syms命令對所用到的變量進行說明,即要將這些變量說明成符號變量。
(2)採用fourier和ifourier得到的返回函數,仍然是符號表達式。如需對返回的函數作圖,應該用ezplot繪圖命令而不是plot命令。如果返回函數中含有狄利克雷函數,ezplot也無法繪圖。
1 試繪出連續時間信號f(t)=t*exp(-abs(t))的時域波形f(t)及相應的幅頻特性。
代碼如下:
clear all
syms t;
f=t*exp(-abs(t));
subplot(1,2,1);ezplot(f);
F=fourier(f)
subplot(1,2,2);ezplot(abs(F));

這裏寫圖片描述

2 若某信號的fourier變換F(w)=pi*exp(-abs(w)),試繪出該信號的時域波形和頻譜圖。
clear all
syms t w;
F=pi*exp(-abs(w));
subplot(1,2,1); ezplot(abs(F));
f=ifourier(F,t)
subplot(1,2,2); ezplot(f)

這裏寫圖片描述

B離散時間的Fourier變換

1 求下列序列的DTFT並繪製頻譜圖

(1)h(n)=exp(-abs(0.1*n1));-15<=n<=15
(2)h(n)=1,0<=n<=20
代碼如下:
clear all
w=-4:0.001:4;%matlab無法計算連續變量w
n1=-15:15;
n2=0:20;
h1=exp(-abs(0.1*n1));
h2(n2+1)=1;
Hjw1=h1*(exp(-j*pi).^(n1'*w));
%這裏是fourier的展開形式
Hjw2=h2*(exp(-j*pi).^(n2'*w));
subplot(2,1,1);plot(w,abs(Hjw1))
title('H1');xlabel('pi弧度(w)');ylabel('振幅')
subplot(2,1,2);plot(w,abs(Hjw2));
title('H2');xlabel('pi弧度(w)');ylabel('振幅')

這裏寫圖片描述

注意:在實域的卷積相當於在頻域相乘,因此可以通過Y->y,繞過求卷積的步驟。
1 一個系統的單位脈衝相應爲h(n)=sin(0.2*n)*exp(-0.1*n).0<=n<=30.試求:
(1)該系統的頻率相應
(2)若輸入信號爲x(n)=2*sin(0.2*pi*n)+3*cos(0.4*pi*n),0<=n<=30,確定該系統的穩態輸出相應。
程序代碼如下:

clear all
w=-1:0.001:1;
n=0:30;
h=sinc(0.2*n);
x=2*sin(0.2*pi*n)+3*cos(0.4*pi*n);
Hjw=h*(exp(-j*pi).^(n'*w));
Xjw=x*(exp(-j*pi).^(n'*w));
Yjw=Xjw.*Hjw;
n1=0:2*length(n)-2;
dw=0.001*pi;
y=(dw*Yjw*(exp(j*pi).^(w'*n1)))/(2*pi);
y1=conv(x,h);
subplot(3,1,1);plot(w,abs(Hjw))
title('H');xlabel('pi弧度(w)');ylabel('振幅')
subplot(3,1,2);plot(w,abs(Xjw));
title('X');xlabel('pi弧度(w)');ylabel('振幅')
subplot(3,1,3);plot(w,abs(Yjw));
title('Y');xlabel('pi弧度(w)');ylabel('振幅')

figure
subplot(2,1,1);stem(abs(y));title('通過IDTFT計算出的輸出序列Y');
subplot(2,1,2);stem(abs(y1));title('通過時域卷積計算出的輸出序列Y1')

這裏寫圖片描述

這裏寫圖片描述

注意:
(1)由於IDTFT的定義中用到了積分,爲了在程序中能夠實現,我們用分段求和的方法來代替積分。

C 離散Fourier變換

我們在前邊講了離散時間信號的Fourier變換,它有兩個特點:
(1)變換是用於無限長的序列。
(2)變換的結果是自變量w的連續函數。

從數值計算的角度來看,第二個特點限制了它的應用範圍,因爲要求計算序列無限項和。在前邊爲了計算無限長序列DTFT,是把序列進行截斷而得到有限長的近似。換句話說,DTFT雖然在理論上具有很重要的意義,但在實際中往往很難得到,不適合在計算機上實現。

爲了在實際中得到信號的頻域變換,需要一種在時域和頻域都是離散的Fourier變換,這就是DFT。由於長序列的DFT計算量相當大,因此出現了幾種計算DFT的高效方法,統稱爲FFT。事實上,正是由於FFT的出現,才使得DFT在實際上得到了廣泛的應用。
1  一個離散序列x(n)=sin(0.2*n)*exp(-0.1*n),0<=n<=30,試求該序列的DFT。

程序代碼如下:
clear all
n=0:30;
x=sin(0.2*n).*exp(-0.1*n);
k=0:30;
N=31;
Wnk=exp(-j*2*pi/N).^(n'*k);
X=x*Wnk;
subplot(2,1,1);stem(n,x);title('序列x')
subplot(2,1,2);stem(-15:15,[abs(X(17:end)) abs(X(1:16))])
title('X幅度')
注意:
因爲DFT默認的下標範圍是[0,N-1],採取對下標的重新排列,是爲了體現序列DFT的對稱性。

這裏寫圖片描述

Fourier變換的循環卷積和線性卷積

1  已知序列h(n)={6,3,4,2,1,-2},x(n)={3,2,6,7,-1,-3},試分別用直接法和DFT求兩個序列的循環卷積序列。
程序打碼如下:
clear all
h=[6 3 4 2 1 -2];
x=[3 2 6 7 -1 -3];
h1=fliplr(h);
H=toeplitz(h,[h(1) h1(1:5)]);%生成循環矩陣
y=H*x';

H=fft(h);
X=fft(x);
Y=H.*X;
y1=ifft(Y);

subplot(2,1,1);stem(y);title('直接計算')
subplot(2,1,2);stem(y1);title('DFT計算')

這裏寫圖片描述

DFT也可以計算線性卷積,對x(n),h(n)分別擴展。
2 已知序列h(n)sinc(0.2*n),0<=n<=20,x(n)=exp(-0.2*n),0<=n<=10,試分別用直接發和DFT計算線性卷積序列。
代碼如下:
clear all
n1=0:20;
n2=0:10;
h=sinc(0.2*n1);
x=exp(-0.2*n2);
y=conv(x,h);

h1=[h zeros(1,length(x)-1)];
x1=[x zeros(1,length(h)-1)];
H1=fft(h1);
X1=fft(x1);
Y1=H1.*X1;
y1=ifft(Y1);

subplot(2,1,1);stem(y);title('直接計算')
subplot(2,1,2);stem(y1);title('DFT計算')

結果爲:
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章