You are on page 1of 5

WindowFT(sig,w,m,Name,titl)

function specgm = WindowFT(sig,w,m,Name,titl) % WindowFT -- Window Fourier Transform % Usage % specgm = WindowFT(sig,w,m,Name,titl) % Inputs % sig 1-d signal % w window half-length, default = n/2 % m inter-window spacing, default=1 % Name string: 'Rectangle', 'Hanning', 'Hamming', % 'Gaussian', 'Blackman'; Default is 'Rectangle' % titl Optional Title String Modifier % Outputs % specgm Window Fourier Transform of sig, n+1 by n complex matrix % Side Effects % Image Plot of the Window Fourier Transform % Description % Algorithm % supposes signal is non-periodic, i.e. zero-padded % Example % sig = ReadSignal('Caruso'); % sig = sig(1:128); % specgm = WindowFT(sig); % See Also % MakeWindow IWindowFT % References % Mallat, "A Wavelet Tour in Signal Processing"; % 4.2.3 Discrete Windowed Fourier Transform. % sig = sig(:); n = length(sig); f = [zeros(n,1); sig; zeros(n,1)]; % Default parameters, if nargin < 2, w = n/2; end; if nargin < 3, m=1; end; if nargin < 4, Name = 'Rectangle'; end; if nargin < 5, titl = []; end; % Initialize output matrix, nw = floor(n ./ m); specgm = zeros(n,nw); ix = ((-w):w); win = MakeWindow(Name,w); win = win(:); % Computing Window Fourier Transform

for l=1:nw, totseg = zeros(1,3*n); t = 1+ (l-1)*m; tim = n + t + ix; seg = f(tim); seg = seg.*win; totseg(tim) = seg; localspec = fft(totseg(n+1:2*n)); specgm(:,l) = localspec(1:n)'; %window = rshift(window')'; end % % Make Window Fourier Transform Display specgmShow = abs(specgm(1:(n/2+1),:)); spmax = max(max(specgmShow)); spmin = min(min(specgmShow)); colormap(1-gray(256)) image(linspace(0,n,n),linspace(0,n/2,n/2+1),256*(specgmShowspmin)/(spmax-spmin)); axis('xy') xlabel('') ylabel('Frequency') if nargout==0, specgm = []; end % % Copyright (c) 1996. Xiaoming Huo % % Modified by Maureen Clerc and Jerome Kalifa, 1997 % clerc@cmapx.polytechnique.fr, kalifa@cmapx.polytechnique.fr

% % % % % %

Part of Wavelab Version 850 Built Tue Jan 3 13:20:43 EST 2006 This is Copyrighted Material For Copying permissions see COPYING.m Comments? e-mail wavelab@stat.stanford.edu

1. function specgm = WindowFT(sig,w,m,Name,titl) 2. % WindowFT -- Window Fourier Transform 3. % Usage 4. % specgm = WindowFT(sig,w,m,Name,titl) 5. % Inputs 6. % sig 1-d signal 7. % w window half-length, default = n/2 8. % m inter-window spacing, default=1 9. % Name string: 'Rectangle', 'Hanning', 'Hamming', 10. % 'Gaussian', 'Blackman'; Default is 'Rectangle' 11. % titl Optional Title String Modifier 12. % Outputs 13. % specgm Window Fourier Transform of sig, n+1 by n complex matrix 14. % Side Effects 15. % Image Plot of the Window Fourier Transform 16. % Description 17. % Algorithm 18. % 1. Suppose signal is non-periodic, which I mean zeros outside sampling. 19. % Examples 20. % t = (1:16)./16 - .5; 21. % sig = sin(pi*t) + cos(2*pi*t) + sin(8*pi*t) + cos(8*pi*t); 22. % plot(sig); 23. % figure; 24. % specgm = WindowFT(sig); 25. % See Also 26. % MakeWindow Spectrogram 27. % References 28. % Mallat, "Wavelet Signal Processing"; 4.2.3 Discrete Window Fourier 29. % Transform. 30. % 31. sig = sig(:); 32. n = length(sig); 33. f = [zeros(n,1); sig; zeros(n,1)]; 34. % totseg = zeros(1,n); 35. totseg = zeros(1,3*n); 36. % Default parameters, 37. if nargin < 2, 38. w = n/2; 39. end; 40. if nargin < 3, 41. m=1; 42. end; 43. if nargin < 4, 44. Name = 'Rectangle';

45. end; 46. if nargin < 5, 47. titl = []; 48. end; 49. % Initialize output matrix, 50. nw = floor(n ./ m); 51. % specgm = zeros(2*w+1,nw); 52. specgm = zeros(n,nw); 53. ix = ((-w):w); 54. win = MakeWindow(Name,w); 55. win = win(:); 56. % Computing Window Fourier Transform 57. for l=1:nw, 58. t = 1+ (l-1)*m; 59. % if m==1 & rem(t,16)==1, 60. % fprintf('Window Fourier Transform: t=%in',t); 61. % end; 62. tim = n + t + ix; 63. seg = f(tim); 64. seg = seg.*win; 65. % totseg(n/2-w : n/2+w) = seg; 66. totseg(tim) = seg; 67. 68. % localspec = fft(seg(1:(2*w+1))); 69. % specgm(:,l) = localspec(1:(2*w+1)); 70. 71. localspec = fft(totseg(n+1:2*n)); 72. % localspec = fft(totseg(1:n)); 73. specgm(:,l) = localspec(1:n)'; 74. end 75. 76. % 77. % Make Window Fourier Transform Display 78. % specgmShow = abs(specgm(1:(w+1),:)); 79. specgmShow = abs(specgm(1:(n/2+1),:)); 80. spmax = max(max(specgmShow)); 81. spmin = min(min(specgmShow)); 82. colormap(1-gray(256)) 83. % image(linspace(0,n,n),linspace(0,n/2,w+1),256*(specgmShow-spmin)/(spmaxspmin)); 84. image(linspace(0,n,n),linspace(0,n/2,n/2+1),256*(specgmShow-spmin)/(spmaxspmin)); 85. 86. axis('xy') 87. xlabel('') 88. ylabel('Frequency') 89.

90. if nargout==0, 91. specgm = []; 92. end 93. % 94. 95. % 96. % Copyright (c) 1996. Xiaoming Huo 97. % 98. % Modified by Maureen Clerc and Jerome Kalifa, 1997 99. % clerc@cmapx.polytechnique.fr, kalifa@cmapx.polytechnique.fr 100. 101. 102. 103. % % Part of Wavelab Version 850 % Built Tue Jan 3 13:20:38 EST 2006 % This is Copyrighted Material % For Copying permissions see COPYING.m % Comments? email wavelab@stat.stanford.edu

You might also like