Time Frequency Analysis • We want to see how the frequencies of a signal change with time. • Typical example of a Time/Frequency representation: log(freq) time Short Time Fourier Transform (STFT) • Given a signal we take the FFT on a window sliding with time w[ n ] x[n ] n N 1 n | X [k , ] | x[ n ] w[ n ] FFT n N k Spectrogram: ideally • The evolution of the magnitude with time is called Spectrogram. • Ideally we would like to have this: frequency x[n ] 1 2 2 1 time n0 time n0 1 2 Spectrogram: in practice • We need to deal with the effects of the window: main lobe and sidelobes N t N TS frequency 2 1 m N time 1 2 2 F m FS N Spectrogram: effect of window length • Let N be the length of the window frequency 2 1 m 2 N F m FS N time N • Frequency Resolution F m • Time resolution: t N TS FS N t N TS with m depending on the window; Windows Rectangular Hamming Blackman 1.5 w[ n ] 1 w[ n ] w[ n ] 0.9 0.8 0.7 1 0.6 0.5 0.4 0.5 0.3 0.2 0.1 0 0 5 10 15 20 25 30 35 40 45 0 50 0 5 10 15 20 25 30 35 40 45 50 N 1 0 W N ( ) W N ( ) W N ( ) 0 0 -10 -10 0 -10 -20 -20 -20 -30 -30 -30 -40 -40 -50 -50 -60 -60 -70 -70 -80 -80 -40 -50 -60 -70 -3 -2 -1 0 w (rad) 1 2 3 4 / N -3 -2 -1 0 w (rad) 1 2 3 8 / N -80 -3 -2 -1 0 w (rad) 1 2 3 16 / N Time/Frequency Uncertainty Principle • either you have good resolution in time or in frequency, not both. good localization in time ... either F F0 x (t ) to t … or to t good localization in freq. F F0 to t Example: a Chirp A “Chirp” is a sinusoid with time varying frequency, with expression x ( t ) A cos 2 F ( t ) t If the frequency changes linearly with time, it has the form shown below: Frequency (Hz) F1 F0 T1 t Time (sec) Chirp in Matlab Fs=10000; Ts=1/Fs; t=(0:999)*Ts; y=chirp(t, 100, t(1000), 4000); plot(t(1:300), y(1:300)) 1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 0 0.005 0.01 0.015 time (sec) 0.02 0.025 0.03 Given Data Four repetitions of a chirp: 1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 0 0.05 0.1 0.15 0.2 time (sec) 0.25 0.3 0.35 0.4 Spectrogram of the Chirp: no window spectrogram(y, rectwin(256), 250, 256,Fs,'yaxis'); Spectrogram of the Chirp: hamming window spectrogram(y, hamming(256), 250, 256,Fs,'yaxis'); Spectrogram of the Chirp: shorter window spectrogram(y, hamming(64), 60,64,Fs,'yaxis'); Spectrogram of the Chirp: shorter window spectrogram(y, hamming(64), 60,256,Fs,'yaxis'); Spectrogram of the Chirp: blackman window spectrogram(y, blackman(256), 250, 256,Fs,'yaxis'); Sealion 1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 0 0.2 0.4 0.6 0.8 1 1.2 time (sec) 1.4 1.6 1.8 2 Spectrogram of Sealion: hamming window spectrogram(y(2001:12000), hamming(256), 250, 256,Fs,'yaxis'); Spectrogram of Sealion: no window spectrogram(y(2001:12000), rectwin(256), 250, 256,Fs,'yaxis'); Spectrogram of Sealion: blackman, longer spectrogram(y(2001:12000), blackman(512), 500, 512,Fs,'yaxis'); Music spectrogram(y(2001:12000), blackman(512), 500, 512,Fs,'yaxis'); Spectrogram spectrogram(y(12001:22000), hamming(256), 250, 256,'yaxis'); Spectrogram: zoom spectrogram(y(12001:22000), hamming(256), 250, 256,'yaxis'); Not enough frequency resolution! Frequencies we expect to see Since this signal contains music we expect to distinguish between musical notes. These are the frequencies associated to it (rounded to closest integer): Notes Freq. (Hz) C Db D Eb E F Gb G Ab A Bb B 262 277 294 311 330 349 370 392 415 440 466 494 Desired Frequency Resolution***: F 2 FS 15 H z N This yields a window length of at least N=1024 ***Note: the slide in the video has a typo, showing the inequality reversed. Spectrogram: longer window spectrogram(y(12001:22000), hamming(1024), 1000, 1024,'yaxis'); Spectrogram: longer window (zoom) spectrogram(y(12001:22000), hamming(1024), 1000, 1024,'yaxis'); Spectrogram: recognize some notes spectrogram(y(12001:22000), hamming(1024), 1000, 1024,'yaxis'); Closest Notes: E: 330Hz, 660Hz D: 294Hz, 588Hz Check with the Music Score E E B D D A