用FFT做譜分析

2022-12-31 02:27:02 字數 3672 閱讀 6113

實驗一:用fft做譜分析

1、實驗目的

(1)進一步加深dft演算法原理和基本性質的理解。

(2)熟悉fft演算法原理和fft子程式的應用。

(3)學習用fft對連續訊號和時域離散訊號進行譜分析的方法,了解可能出現的分析誤差及其原因,以便在實際中正確應用fft。

2、實驗原理

dft是週期序列,有n個獨立的數值,所以它的許多特性可以通過有限長序列沿拓來得到。對於乙個長度為n的有限長序列x(n),也即小(n)只在0~n-1各點上有非零值,即

把序列x(n)以n為週期進行週期沿拓得到週期序列,則有

所以,有限長序列x(n)的離散傅利葉變換(dft)為

逆變換3、實驗內容

編制訊號產生子程式,產生以下典型訊號供譜分析:

, ,

,其它n

,1 , 其它n

應當注意,如果給出的是連續訊號,則首先要根據其最高頻率確定取樣速率以及由頻率解析度選擇取樣點數n,然後對其進行軟體取樣(即計算,),產生對應序列。對訊號,頻率解析度的選擇要以能分辨開其中的三個頻率對應的譜線為準則。對週期序列,最好擷取週期的整數倍進行譜分析,否則有可能產生較大的分析誤差。

4、實驗結果與分析

(1)%用fft對訊號進行頻譜分析

clear all;

n=0:15;k1=0:15;

x1=(n<=3);%產生長度為4的矩形序列

x1=fft(x1,16);

figure(1);

subplot(2,1,1);stem(n,x1);title('x1的訊號序列');xlabel('n');ylabel('x2');

axis([0,16,0,1.5]);

subplot(2,1,2);stem(k1,x1);title('x1的幅頻特性');xlabel('k');ylabel('x1(k)');

axis([0,16,-2,5]);

x1(n)是乙個長度為4的矩形序列,離散傅利葉變換的n點變換在頻域範圍內表現為對傅利葉變換即z變換在單位圓上的抽樣。|x1(k)|的值是以4為週期的,如n=16時,k=2、6、10、14處的x1(k)的值是相等的。

(2),其他n0, 其他n

%x2的頻譜分析

m=0:7;

k2=0:15;

m=8;

xa=1:(m/2);

xb=(m/2):-1:1;

x2=[xa,xb];%產生長度為8的三角波序列

x2=fft(x2,16);

figure(2);

subplot(2,1,1);stem(m,x2);title('x2的訊號序列');xlabel('n');ylabel('x2');

axis([0,16,0,5]);

subplot(2,1,2);stem(k2,x2);

title('x2的幅頻特性(n=16)');xlabel('k');ylabel('x2(k)');

axis([0,16,-8,20]);

%x3的頻譜分析

k3=0:15;

x3=[xb,xa];

x3=fft(x3,16);

figure(3)

subplot(2,1,1);stem(m,x3);title('x3的訊號序列');xlabel('n');ylabel('x3');

axis([0,16,0,5]);

subplot(2,1,2);stem(k3,x3);

title('x3的幅頻特性(n=16)');xlabel('k');ylabel('x3(k)');

axis([0,16,-5,20]);

該訊號的週期為8,為做16點dft,將訊號看作以16週期,對其取16點進行離散傅利葉變換的結果實際上是對原輸入的週期訊號進行傅利葉級數變換所擷取的主值序列,從上圖可以看出週期函式的傅利葉變換在以π/8為間隔的變換值即k=0,1,2,3,4,5,6,7,8,90,11,1,21,13,14,15的所對應的離散傅利葉變換值和其傅利葉級數是一樣的。

(3%用用fft對週期序列進行頻譜分析

clear all;

n=0:16;m=0:15;k=0:7;

x4=cos(pi*n/4);

x5=sin(pi*n/8);

x4=fft(x4,16);%對訊號做傅利葉變換

x5=fft(x5,8);

subplot(2,2,1);stem(n,x4);title('x4的訊號序列');xlabel('n');ylabel('x4');

axis([0,18,-1.5,1.5]);

subplot(2,2,2);stem(m,x4);

title('x4的幅頻特性(n=16)');xlabel('k');ylabel('x4(k)');

axis([0,18,0,10]);

subplot(2,2,3);stem(n,x5);title('x5的訊號序列');xlabel('n');ylabel('x5');

axis([0,18,-1.5,1.5]);

subplot(2,2,4);stem(k,x5);

title('x5的幅頻特性(n=8)');xlabel('k');ylabel('x5(k)');

axis([0,18,-2,6]);

由實驗可知,n取值越大,越接近余弦、正弦曲線,即越接近原輸入連續訊號,且時域週期頻域離散。原訊號週期為16,所以當n=16則取完了乙個週期的值,所以這是兩個不同的序列,所以按照x1(n)的分析方式是不對的,因為本身它們的傅利葉變換就是不一樣的。由於離散傅利葉變換是該序列週期延拓後所對應的傅利葉級數變換的主值序列,所以,當n=16時,所得的dft值與x5(n)的傅利葉級數變換的主值序列是一致的,而n=8時是x5(n)的部分序列的週期延拓後的傅利葉級數變換的主值序列,因此兩者的值是不同的。

(4)clear all;

fs=64;t=1/fs;%取樣頻率為64hz

n=32;

n=0:31;

x6=cos(8*pi*n*t)+cos(16*pi*n*t)+cos(20*pi*n*t);

x6=fft(x6,32);

subplot(2,1,1);stem(n,x6);title('x6的訊號序列');xlabel('n');ylabel('x6');

axis([0,32,-4,4]);

subplot(2,1,2);stem(n,abs(x6));

title('x6的幅頻特性(n=32)');xlabel('k');ylabel('x6(k)');

axis([0,32,0,20]);

原連續訊號的週期為0.5,當取樣頻率fs=64hz時,所形成的序列週期為0.5*64=32。所以只有n>32,才能取完乙個週期的序列。

5、實驗小結

實驗主要是求、、、、、的dft變換。其中是直接給出了離散序列,而則是經過取樣得到的。離散傅利葉變換可以看作是在時的z變換,即表明的n點dft是的z變換在單位圓上的n點等間隔取樣。

離散傅利葉變換也可以看作在時的傅利葉變換,即表明可以看作的傅利葉變換在區間上的n點等間隔取樣。

fft變換即快速傅利葉變換的性質同dft即離散傅利葉變換相同。離散傅利葉變換有兩個物理意義,一是,是對該序列的傅利葉變換w的抽樣或者說對z變換單位圓內的抽樣。二是,將該序列進行週期延拓後的傅利葉級數變換的主值序列。

通過本軟體實驗,進一步加深了我對dft演算法原理和性質的理解,通過自己編寫程式,再改正錯誤,然後分析波形,尋找出現的誤差及其原因,更能培養我們在實際中運用fft的能力。

用FFT對訊號做頻譜分析

湖北民族學院資訊工程學院實驗報告 電氣 電子類專用 班級 姓名 學號 實驗成績 實驗時間 2010 年 11 月 27 日 3 4節實驗地點 數字訊號處理實驗室 課題名稱 數字訊號處理實驗型別 設計型驗證型綜合型 實驗題目 用fft對訊號做頻譜分析 一 實驗儀器pc matlab 一 實驗目的 學習...

實驗一用FFT進行譜分析

一 實驗目的 1.進一步加深對dft演算法原理和基本性質的理解 因為fft只是dft的一種快速演算法,所以fft的運算結果必然滿足dft的基本性質 2.熟悉fft演算法原理和fft子程式的應用。3.學習用fft對連續訊號和時域離散訊號進行譜分析的方法,了解可能出現的分析誤差及其原因,以便在實際中正確...

Matlab關於用FFT作譜分析完整版

一 實驗目的 1.理解fft演算法的程式設計思想。2.熟練掌握利用fft對訊號作頻譜分析。包括正確地進行引數選擇 作頻譜圖以及讀頻譜圖。3.了解fft的應用。二 實驗環境 以上作業系統 2.安裝matlab6.0以上版本 三 實驗原理 1 離散傅利葉變換 dft dft是週期序列,有n個獨立的數值,...