實驗五實驗六指導書

2021-03-04 06:50:30 字數 4862 閱讀 6450

實驗五 matlab實現dft

matlab為計算資料的離散快速傅時葉變換,提供了一系列豐富的數學函式,主要有fft、ifft、fft2、ifft2和czt等。當所處理的資料的長度為2的冪次時,採用基-2演算法進行計算,計算速度會顯著增加。所以,要盡可能使所要處理的資料長度為2冪次或者用添零的方式來添補資料使之成為2的冪次。

1.fft和ifft函式

呼叫格式是:

(1)如果x是向量,則採用傅時葉變換來求解x的離散傅利葉變換;如果x是矩陣,則計算該矩陣每一列的離散傅利葉變換;如果x是維陣列,則是對第乙個非單元素的維進行離散傅利葉變換。

(2)n是進行離散傅利葉變換的x的資料長度,可以通過對x進行補零或擷取來實現。

(3)或

在引數dim指定的維上進行離散傅利葉變換;當x為矩陣時,dim用來指定變換的實施方向:dim=1,表明變換按列進行;dim=2,表明變換按行進行。

函式ifft的引數應用與函式fft完全相同。

2.fft2和ifft2函式

呼叫格式是:

(1)如果x是向量,則此傅利葉變換即變成一維傅利葉變換fft;如果x是矩陣,則是計算該矩陣的二維快速傅利葉變換;資料二維傅利葉變換fft2(x)相當於,即先對x的列做一維傅利葉變換,然後再對變換結果的行做一維傅利葉變換。

(2)通過對x進行補零或截斷,使得x成為的矩陣。

函式ifft2的引數應用與函式fft2完全相同

fftn、ifftn是對資料進行多維快速傅立變換,其應用與fft2、ifft2類似;在此,不再敘述。

3.czt函式

呼叫格式是:

式中x是待變換的時域訊號,其長度設為n,m是變換的長度,w確定變換的步長,a確定變換的起點。若m=n,a=1,則czt變成dft。

4.fftsfift

y=fftshift(x)

用來重新排列x=fft(x)的輸出,當x為向量時,把x的左右兩半進行交換,從而將零頻分量移至頻譜的中心;如果x為二維傅利葉變換的結果,它同時將x的左右和上下部分進行交換。

5.fftfilt

y=fftfilt(b,x)

採用重疊相加法fft對訊號向量x快速濾波,得到輸出序列向量y,向量b為fir濾波器的單位脈衝響應,h(n)=b(n+1),n=0,1,…,length(b)-1。

y=fftfilt(b,x,n)

自動選取fft長度nf=2^nextpow2(n),輸入資料x分段長度m=nf-length(b)+1,其中nextpow2(n)函式求得乙個整數,滿足:

2^(nextpow2(n)-1)≤n≤2^nextpow2(n)

n預設時,fftfilt自動選擇合適的fft長度nf和對x的分段長度m。

一、利用matlab實現的快速傅里的變換

例1 已知有限長序列的長度,且,用fft求,再用ifft求。

解:利用快速傅利葉變換函式求解的matlab實現程式清單如下

clear

xn=[1,2,-1,3];

x=fft(xn)

x=ifft(x)

程式執行結果如下

x = 5.00002.0000 + 1.0000i -5.00002.0000 - 1.0000i

x = 1 2 -1 3

例2 設是由兩個正弦訊號及白雜訊的疊加,試用fft檔案對其作頻譜分析。

解:程式清單如下

% 產生兩個正弦加白雜訊;

n=256;

f1=.1;f2=.2;fs=1;

a1=5;a2=3;

w=2*pi/fs;

x=a1*sin(w*f1*(0:n-1))+a2*sin(w*f2*(0:n-1))+randn(1,n);

% 應用fft 求頻譜;

subplot(2,2,1);

plot(x(1:n/4));

title('原始訊號');

f=-0.5:1/n:0.5-1/n;

x=fft(x);

y=ifft(x);

subplot(2,2,2);

plot(f,abs(x)); %也可求出將零頻分量移至頻譜的中心的頻譜幅值plot(f,fftshift(abs(x)))

title('頻域訊號');

subplot(2,2,3);

plot(real(x(1:n/4))); %y=x

title('時域訊號');

執行結果如圖1所示,該程式同時完成了傅利葉變換與傅利葉反變換。

圖1 例2執行結果

二、 matlab實現序列的移位和週期延拓運算

例3:已知,利用matlab生成並圖示,,其中n=24,,表示以8為週期的延拓。

圖2 序列的移位和週期延拓

解:程式清單如下

n=24;m=8;m=3設移位值為3

n=0:n-1;

x1=0.8.^n;x2=[(n>=0)&(nxn=x1.*x2產生x(n)

xm=xn; nm=n+m %產生x(n-m)

xc=xn(mod(n,8)+1); %產生x(n)的週期延拓,求餘後加1是因為matlab向量下標從開始

xcm=xn(mod(n-m,8)+1); %產生x(n)移位後的週期延拓

subplot(2,2,1);stem(n,xn,'.');axis([0,length(n),0,1]);title('x(n)')

subplot(2,2,2);stem(nm,xm,'.');axis([0,length(nm),0,1]);title('x(n-m)')

subplot(2,2,3);stem(n,xc,'.');axis([0,length(n),0,1]);title('x((n)的週期延拓')

subplot(2,2,4);stem(n,xcm,'.');axis([0,length(n),0,1]);title('x(n)的迴圈移位')

程式執行結果如圖2所示。

二、 matlab驗證n點dft的物理意義

例4:已知,,繪製相應的幅頻和相頻曲線,並計算圖示n=8和n=16時的dft。

解:程式清單如下

n1=8;n2=16兩種fft的變換長度

n=0:n1-1;k1=0:n1-1; k2=0:n2-1;

w=2*pi*(0:2047)/2048;

xw=(1-exp(-j*4*w))./( 1-exp(-j*w));

%對x(n)的頻譜函式取樣2048個點可以近似的看作是連續的頻譜

xn=[(n>=0)&(n<4產生x(n)

x1k=fft(xn,n1計算n1=8點的x1(k)

x2k=fft(xn,n2計算n2=16點的x2(k)

subplot(3,2,1);plot(w/pi,abs(xw));xlabel(『w/π』)

subplot(3,2,2);plot(w/pi,angle(xw));axis([0,2,-pi,pi]);line([0,2],[0,0]);

xlabel(『w/π』)

subplot(3,2,3);stem(k1,abs(x1k),』.』);

xlabel(『k(ω=2πk/n1)』);ylabel(『|x1(k)|』);hold on

plot(n1/2*w/pi,abs(xw圖形上疊加連續頻譜的幅度曲線

subplot(3,2,4);stem(k1,angle(x1k));

axis([0,n1,-pi,pi]);line([0,n1],[0,0]);

xlabel(『k(ω=2πk/n1)』) ;ylabel(『arg[x1(k)]』);hold on

plot(n1/2*w/pi,angle(xw圖形上疊加連續頻譜的相位曲線

subplot(3,2,5);stem(k2,abs(x2k),』.』);

xlabel(『k(ω=2πk/n2)』);ylabel(『|x2(k)|』);hold on

plot(n2/2*w/pi,abs(xw))

subplot(3,2,6);stem(k2,angle(x2k),』.』);

axis([0,n2,-pi,pi]);line([0,n2],[0,0]);

xlabel(『k(ω=2πk/n2)』) ;ylabel(『arg[x2(k)]』);hold on

plot(n2/2*w/pi,angle(xw))

程式執行結果如圖3所示。

圖3 離散傅利葉變換和傅利葉變換的取樣關係

前面的理論已經知道,序列x(n)的n點dft的物理意義是對在[0,2π]上進行n點的等間隔取樣。圖3可以直觀的看到x(k)與之間的取樣關係。

實驗六:matlab實現dft的應用

一.matlab實現快速卷積

例1用快速卷積法計算下面兩個序列的卷積

, 快速卷積計算框圖如圖所示

解:程式清單如下

m=15;n=20;nx=1:15;nh=1:20;

xn=sin(0.4*nx);hn=0.9.^nh;

l=pow2(nextpow2(m+n-1));%l變為2的整數次冪

xk=fft(xn,l);

hk= fft(hn,l);

yk=xk.*hk;

yn=ifft(yk,l);ny=1:l

subplot(3,1,1);stem(nx,xn,'.');title('x(n)');

subplot(3,1,2);stem(nh,hn,'.');title('h(n)');

subplot(3,1,3);stem(ny,real(yn),'.');title('y(n)');

程式執行結果如圖1所示。

圖1 x(n)、h(n)及其線性卷積波形

fft的變換長度l必須滿足l≥n+m-1,輸出y(n)才等於x(n)和h(n)的線性卷積。計算兩個序列的卷積時,也可以直接呼叫函式conv來計算,因為matlab中的計時比較粗糙,所以只有當n和m較大的時候,才能比較兩種方法的執行時間快慢。

實驗二指導書

實驗二離散時間訊號的matlab實現 表示方法和基本運算 一 實驗目的 離散時間訊號的表示方法及其基本運算。二 實驗內容 1.訊號表示 matlab中的主要資料型別是二維或多維的實矩陣或復矩陣。數字訊號處理過程中所用到的基本資料物件 例如 一維訊號或序列,多通道訊號,二維訊號等等 都可以用矩陣來表示...

化工原理實驗4指導書

化工原理 實驗指導書 化學工程系 目錄實驗一流體機械能轉換實驗 1 實驗二離心幫浦特性曲線測定 3 實驗三對流給熱係數測定 9 實驗四篩板精餾塔實驗 13 一 實驗目的 熟悉流動流體中各種能量和壓頭的概念及其互相轉換關係,在此基礎上掌握柏努利方程。二 實驗原理 1.流體在流動時具有三種機械能 即 位...

大學物理實驗1指導書

第一章大學物理實驗學習須知 一 大學物理實驗i 20132014年度教學管理細則 課程基本情況 1.大學物理實驗i 和 大學物理實驗ii 是全校理工科類2年級本科生的必修課,共64學時4學分,其中 大學物理實驗i 32學時2學分,於每學年的第一學期開設。2.大學物理實驗i 的教學內容分為理論課和實驗...