原文地址:/s/blog_82a927880102uwi1.html
小波和短时要一起学,至于原因往下看便知。
短时傅立叶变换基本思想是将信号加滑动时间窗,并对窗内信号做傅立叶变换,得到信号的时变频谱。因而它的时间分辨率和频率分辨率受Heisenberg测不准原理约束,一旦窗函数选定,时频分辨率便确定下来。这就使它对突变信号和非平稳信号的分析存在局限性,因而不是一种动态的分析方法, 不能敏感地反映信号的突变,只适用于对缓变信号的分析。
其不足是不能保证非负性,尤其是对多分量信号或具有复杂调制规律的信号会产生严重的交叉项干扰,这是二次型时频分布的固有结果,大量的交叉项会淹没或严重干扰信号的自项,模糊信号的原始特征。后续的有人对Cohen类中的核函数进行改造,提出了伪winger—ville分布、修正平滑伪Winger—Ville分布等各种各样的新型时频分布,对交叉项干扰的抑制起了较大的作用,但是不含有交叉项干扰且具有Winger—Ville分布聚集性的时频分布是不存在的。
但小波分解的结果依赖小波基函数,而各小波基函数的适用范围很不一致,这就造成了小波基选择问题,如果母小波选择不当,则应用效果会大受影响;小波分析不具有自适应性,一旦选择了小波基和分解尺度,则用它来分析具多频率成分的数据时,所得结果只能反映某一固定频带内的信号,所以要选择不同的小波基。
闲聊篇:
1、Fourier Transform 缺陷----FT局域化特性分析
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: end
Inverse 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: