關於傅立葉分解非整週期截斷的理解

 今天寫畢設論文,寫到空載反電動勢fft分析的時候,發現整週期截斷又忘記是什麼意思了。寫個博客幫我記一記。

1、什麼是整週期截斷(整週期採樣)?

在做fft時,我們要對待測信號進行採樣。採樣長度T的選擇首先要保證能反映信號的全貌,對瞬態信號應包括整個瞬態過程;對週期信號,理論上採集一個週期信號就可以了。對於週期信號來說,只有整週期採樣的信號纔不會有頻譜泄漏現象。

以上兩個問題已經有上面兩位前輩解答的很清楚了,不清楚的可以看一看。

2、用matlab如何實現簡易fft?

clc;
clear all;
close  all
fre=50;%設置頻率爲50Hz,週期爲20ms
FFT_num=256;%FFT取點數N

t=0:20/256000:0.06;
%定義時間t數組,以20ms/256爲間隔,在0-60ms中均勻取點
%20ms由前面定義的50Hz來的,在一週期中取出256點;60ms即取三個週期

y=50+100*sqrt(2)*cos(2*pi*fre.*t+pi/6)+50*sqrt(2)*cos(3*2*pi*fre.*t+pi/6)+20*sqrt(2)*cos(5*2*pi*fre.*t+pi/6)+50*sqrt(2)*cos(9*2*pi*fre.*t+pi/6)
%定義一個波形,包含基波、三次、五次、九次諧波
%我構造的我是知道有哪些頻率分量,但我實際得到是一個數據序列

tep=fft(y(1:FFT_num),FFT_num)/(FFT_num/2);
%y(1:FFT_num)爲取的時間序列,fft(@,FFT_num)中的FFT_num爲取點數,tep爲fft的結果,是一個複數
fdat=abs(tep)/sqrt(2);
%對複數取絕對值,除根2,得到fdat爲基波和各個諧波的有效值
fdat(1)=fdat(1)/sqrt(2);
%直流分量應該取平均值,不是有效值;再除根2得到直流分量平均值

%畫圖沒啥好說的
figure(1)
hold on
subplot(211)
plot(t,y);
xlabel('t(s)')
ylabel('y(t)');
grid on;
subplot(212)
bar(0:10,fdat(1:11));
xlabel('h')
ylabel('y(h)')
grid on;

 運行結果:

圖一:FFT_num=256時,整週期截斷結果圖

 

圖二:FFT_num=250時,非整週期截斷結果圖

 

圖三:FFT_num=260時,非整週期截斷結果圖

由於我設置時間t時,是用256分割的,因此每週期中應有256點。上三圖對比,很明顯非整週期截斷出現了並不真正屬於原信號的頻率分量,即發生頻譜泄露。

3、關於matlab程序中設置的幾點討論

頻譜泄露實現了,現在來談談程序中幾個我自己感覺比較有趣的問題。

  • 對於週期信號來說,在做fft時取點是不是取越多越好?

顯然不是。按照上圖三FFT_num=260時,依然出現了頻譜泄露。即採點時,採點的第一個點也就是該週期圖像的起點,也是上個週期的終點。採集時間窗口內的信號的週期延拓與實際信號完全吻合,那麼就不會出現泄漏現象。換句話說,對於,如果採集時間窗口內正好包含整數個信號週期,週期信號就能避免頻譜泄漏。還是那句話,要整週期截斷。

不大好理解的話上圖:

                                                圖四: 採集時間窗口內的信號的週期延拓與實際信號完全吻合

如果DFT採集時間窗口內的信號的週期延拓與實際信號不完全吻合,就會在週期延拓的邊界上出現不連續點,就會出現泄漏現象。

                                            圖五: 採集時間窗口內的信號的週期延拓與實際信號完全吻合

我開始誤以爲採樣取點N時是框定一個週期T,然後在該週期內取點;我就很疑惑:那點數越多不是越好?就像用點畫正弦圖像,點越多不是越像正弦嘛?

對於這個取點的過程,我們要清楚三個東西:最高分析頻率Fm,採樣頻率Fs(採樣週期Ts的倒數),採樣點數N
最高分析頻率Fm:指需要分析的最高頻率,也是經過抗混濾波後的信號最高頻率。根據採樣定理,Fm與採樣頻率Fs之間的關係一般爲:Fs=2.56Fm;而最高分析頻率的選取決定於設備轉速和預期所要判定的故障性質。根據採樣定理:不產生頻率混迭的最低採樣頻率Fs要求在2倍最大分析頻率Fm,之所以採用2.56倍主要跟計算機二進制的表示方式有關。

取點時,對待測信號的任意隨機位置取第一個點,以採樣週期Ts爲長度,取第二個點;總取點數取決於採樣點數N;按照一個更好理解的角度來說,就是以採集時間窗口去截斷信號。那麼就算整週期截斷,每次採集時間窗口內的信號也不盡相同。

綜上,採樣點數N多少就是拉長或者減短採集時間窗口的長度。那麼整週期截斷就是要求採集時間窗口的長度要與待測信號週期長度必須嚴格相同。有點一個蘿蔔一個坑的感覺。或者說像收蘋果的販子,對果農說就要直徑10cm的蘋果,大的小的都不行。

  •  在寫matlab程序時,我們定義t=0:20/256000:0.06,以取出的256點擬合畫出的信號y。那麼我們在採樣的時候是不是取得就剛好是這定的256個點?或者說必須要取這256個點?

按上一問的解釋,答案顯示是否定的。因爲對於一個僅知道波形的圖像y,取點的開始是完全任意的。

tep=fft(y(1:FFT_num),FFT_num)/(FFT_num/2);
%y(1:FFT_num)爲取的時間序列,fft(@,FFT_num)中的FFT_num爲週期取點數,tep爲fft的結果,是一個複數

但在matlab程序中我們是直接取的這256個點做的fft分析,這個當然不影響fft結果,只不過取點有點特殊化。

  • 在matlab程序中,在取t時爲什麼我們要在20ms裏剛好取256個點?(即FFT_num=256的原因)

只有採樣點數是2^n時纔可以使用fft(快速傅立葉變換),當然dft可以計算非2^n個採樣點數的情況,但是速度會慢。

 

終於寫完了,很多疑惑也是看上面兩位前輩的帖子理解的,這個東西的確只有工程上實際用過纔會理解更深。matlab程序貼在後面了,需要的朋友自行學習。

假如這篇文章對你有幫助,請點個贊鼓勵一下我啊

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