閒聊篇:
1、fourier transform 缺陷----ft局域化特性分析
ft在平穩訊號分析和處理中有著突出貢獻的基本原因在於,人們利用它可以把複雜的時間訊號和空間訊號轉換到頻率域中,然後用頻譜特性去分析和表示時域訊號的特性。
ft 正變換告訴我們:從時間(模擬)訊號中提取頻譜資訊
伊利諾依斯大學教授y. me y e r曾說:「若你記錄1小時長的資訊而在最後5分鐘出錯,這一錯誤就會毀了整個傅利葉變換。相位的錯誤是災難性的,如果在相位上哪怕犯了乙個錯誤,你最後就會發現你所幹的事與最初的訊號無關了。」
實際上,對常見的不平穩訊號,如語音頻號、**訊號、核探測的脈衝訊號、以及核醫學的影象訊號等,它們的頻域特性是隨時間變化的,人們需要了解某些區域性時段上所對應的主要頻率特性是什麼,也需要了解某些頻率的資訊出現在哪些時段上,也就是需要了解時-頻區域性化要求。對於這種時-頻區域性化要求,傅利葉變換是無能為力的。
解決方案:短時傅利葉變換、小波變換。其各有優劣,本篇聊點短時傅利葉變換,最後會引出一點小波變換。
2、短時傅利葉變換(窗式傅利葉變換)
基本思想:把非平穩過程看成是一系列短時平穩訊號的疊加,短時性可通過在時間上加窗實現。。通過該方法,人們至少可以說,無論發生了什麼,它一定是發生在訊號的某個特定部分。
視窗傅利葉變換的逆變換式:
3、小波引出
由視窗傅利葉變換對函式(訊號)進行的分析,相當於用乙個形狀、大小和放大倍數相同的「放大鏡」在時-頻相平面上移動去觀察某固定長度時間內的頻率特性。這裡的問題是:儘管窗式傅利葉變換能解決變換函式的局域化問題,但是,其視窗的大小和形狀是固定的,即視窗沒有自適應性。這意味著什麼?
而在實際問題中,對於高頻譜資訊,由於波形相對要窄,時間間隔要相對的小,以求給出比較好的精度,進而更好地確定峰值和斷點,或者說需要用窄的時域窗來反映資訊的高頻成分;而對於低頻譜資訊,由於波形相對是寬的,時間段要相對的寬才能給出完整的訊號資訊,或者說必須用較寬的時域窗來反映資訊的低頻成分。而用短時傅利葉變換,如果你選擇一扇寬窗子,低頻成分可以看得清楚,在高頻部分確定時間時就很糟糕;若你選一扇窄窗子,在高頻可以很好確定時間,但在低頻的頻率就可能裝不進去。
這樣,真正合適的做法是「放大鏡」的長寬是可以變化的,正是為了實現這樣的目的,人們引進了小波變換。
實踐篇:
主要有兩個程式,分別:短時傅利葉變換、逆短時傅利葉變換
short-time fourier transform
1: function [stft, f, t] = stft(x, wlen, h, nfft, fs)
2: if size(x,2) > 1
3: x = x';
4: end
5: xlen = length(x);
6: win = hamming(wlen, 'periodic');
7: rown = ceil((1+nfft)/2);
8: coln = 1+fix((xlen-wlen)/h);
9: stft = zeros(rown, coln);
10: indx = 0;
11: col = 1;
12: % perform stft
13: while indx + wlen <= xlen
14: xw = x(indx+1:indx+wlen).*win;
15: x = fft(xw, nfft);
16: stft(:,col) = x(1:(rown));
17: indx = indx + h;
18: col = col + 1;
19: end
20: t = (wlen/2:h:xlen-wlen/2-1)/fs;
21: f = (0:rown-1)*fs/nfft;
22: endinverse short-time fourier transform
1: function [x, t] = istft(stft, h, nfft, fs)
2: coln = size(stft, 2);
3: xlen = nfft + (coln-1)*h;
4: x = zeros(1, xlen);
5: win = hamming(nfft, 'periodic');
6: if rem(nfft, 2)
7: for b = 0:h:(h*(coln-1))
8: x = stft(:, 1 + b/h);
9: x = [x; conj(x(end:-1:2))];
10: xprim = real(ifft(x));
11: x((b+1):(b+nfft)) = x((b+1):(b+nfft)) + (xprim.*win)';
12: end
13: else
14: for b = 0:h:(h*(coln-1))
15: x = stft(:, 1+b/h);
16: x = [x; conj(x(end-1:-1:2))];
17: xprim = real(ifft(x));
18: x((b+1):(b+nfft)) = x((b+1):(b+nfft)) + (xprim.*win)';
19: end
20: end
21: w0 = sum(win.^2);
22: x = x.*h/w0;
23: actxlen = length(x);
24: t = (0:actxlen-1)/fs;
25: end測試訊號1:
這裡先是選取比較簡單的正弦訊號做測試
引數:
1: fs = 48000;
2: t = 0:1/fs:1-1/fs;
3: x = 10*sin(2*pi*t*10);
測試訊號2:
這裡選擇的是以前我們windows開機時候的那個聲音,很熟悉吧?
短時傅利葉變換
短時傅利葉變換 stft,short time fourier transform,或 short term fourier transform 是和傅利葉變換相關的一種數學變換,用以確定時變訊號其區域性區域正弦波的頻率與相位。它的思想是 選擇乙個時頻區域性化的窗函式,假定分析窗函式g t 在乙個短...
短時傅利葉變換
時間解析度和頻率解析度 時間解析度 訊號頻率隨時間變化,要將這種頻率變化分辨出來。自然,窗越短越好,以使得在窗內訊號頻率近似不變。例如,100hz的訊號和100.1hz的訊號疊加,一兩個週期恐怕看不出來,必須要足夠多的週期才能區別開。短時傅利葉變換可以看做移位訊號x n m 通過窗w m 的傅利葉變...
短時傅利葉變換
首先用一張直觀的圖來看一下什麼是傅利葉變換 圖1 平穩訊號的傅利葉變換 做完fft 快速傅利葉變換 後,可以在頻譜上看到清晰的四條線,訊號包含四個頻率成分。傅利葉變換是一種分析訊號的方法,它可分析訊號的成分,也可用這些成分合成訊號。在分析訊號時,主要應用於處理平穩訊號,通過傅利葉變換可以獲取一段訊號...