from fourier series to analysis of non-stationary signals vii · an overview of fourier transforms...

28
From Fourier Series to Analysis of Non-stationary Signals – VII Miroslav Vlˇ cek, Jan Pˇ rikryl November 18, 2019 Department of Applied Mathematics, CTU FTS

Upload: others

Post on 08-Jul-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: From Fourier Series to Analysis of Non-stationary Signals VII · An overview of Fourier transforms ... audiowrite(’flute-resampled.wav’,x2, sr2); 11. MATLAB project { Spectrogram

From Fourier Series to Analysis of

Non-stationary Signals – VII

Miroslav Vlcek, Jan Prikryl

November 18, 2019

Department of Applied Mathematics, CTU FTS

Page 2: From Fourier Series to Analysis of Non-stationary Signals VII · An overview of Fourier transforms ... audiowrite(’flute-resampled.wav’,x2, sr2); 11. MATLAB project { Spectrogram

Contents

Short Time Fourier Transform

Spectrograms

Matlab project

1

Page 3: From Fourier Series to Analysis of Non-stationary Signals VII · An overview of Fourier transforms ... audiowrite(’flute-resampled.wav’,x2, sr2); 11. MATLAB project { Spectrogram

Short Time Fourier Transform

Page 4: From Fourier Series to Analysis of Non-stationary Signals VII · An overview of Fourier transforms ... audiowrite(’flute-resampled.wav’,x2, sr2); 11. MATLAB project { Spectrogram

An overview of Fourier transforms

continuous in time discrete in time

periodic in frequency

infr

equ

ency

x(t) =1

∞∫−∞

X (jω)e jωtdω x(n) =T

+π/T∫−π/T

X (e jωT )e jkωTdω

con

tin

uou

s

X (jω) =

∞∫−∞

x(t)e−jωtdt X (e jωT ) =∞∑

n=−∞x(n)e−jkωT

Fourier transform Fourier transform t = nT

infr

equ

ency

inti

me

x(t) =∞∑

k=−∞X (k)e jkω0t x(n) =

1

N

N−1∑k=0

X (k)e j2πkn/N

dis

cret

e

per

iod

ic

X (k) =ω0

π/ω0∫−π/ω0

x(t)e−jnω0tdt X (k) =N−1∑n=0

x(n)e−j2πkn/N

Fourier series Discrete Fourier transform

2

Page 5: From Fourier Series to Analysis of Non-stationary Signals VII · An overview of Fourier transforms ... audiowrite(’flute-resampled.wav’,x2, sr2); 11. MATLAB project { Spectrogram

What is wrong with Fourier Transform?

Let’s consider basis functions: sin(ωt), cos(ωt) and δ(t)

support region in time in frequency

sin(ωt) (−∞,∞) 0

cos(ωt) (−∞,∞) 0

δ(t) 0 (−∞,∞)

• The basis functions sin(ωt) and cos(ωt) are not localized in

time!

• The δ(t) is not localized in frequency!

We have learned to localize a signal in time domain by windowing

⇒ short time Fourier transform (STFT)

3

Page 6: From Fourier Series to Analysis of Non-stationary Signals VII · An overview of Fourier transforms ... audiowrite(’flute-resampled.wav’,x2, sr2); 11. MATLAB project { Spectrogram

Short Time Fourier Transform

• When sampling an audio signal at a sampling rate 44.1 kHz

• ... 1 hour of stereophonic music would be

44100× 2× 60× 60 = 317520000 samples !

• If we want to compute DFT, the closest power-of-two FFT is

228 = 268435456 per channel.

• A better approach is to break the long signal into small

segments and analyze each one with FFT ⇒ short time

Fourier transform

4

Page 7: From Fourier Series to Analysis of Non-stationary Signals VII · An overview of Fourier transforms ... audiowrite(’flute-resampled.wav’,x2, sr2); 11. MATLAB project { Spectrogram

Short Time Fourier Transform

• Assume that x [m] is an infinitely long sequence

• in order to localize energy in time and frequency we segment

the signal into short-time pieces and calculate DFT of each

one

• sampled STFT for a window defined in the region

0 ≤ m ≤ M − 1 is given by

X [k , `L] =M−1∑m=0

x [`L−m]w [m] exp

(−j2π

km

N

)

5

Page 8: From Fourier Series to Analysis of Non-stationary Signals VII · An overview of Fourier transforms ... audiowrite(’flute-resampled.wav’,x2, sr2); 11. MATLAB project { Spectrogram

Short Time Fourier Transform

6

Page 9: From Fourier Series to Analysis of Non-stationary Signals VII · An overview of Fourier transforms ... audiowrite(’flute-resampled.wav’,x2, sr2); 11. MATLAB project { Spectrogram

Short Time Fourier Transform

7

Page 10: From Fourier Series to Analysis of Non-stationary Signals VII · An overview of Fourier transforms ... audiowrite(’flute-resampled.wav’,x2, sr2); 11. MATLAB project { Spectrogram

Spectrograms

Page 11: From Fourier Series to Analysis of Non-stationary Signals VII · An overview of Fourier transforms ... audiowrite(’flute-resampled.wav’,x2, sr2); 11. MATLAB project { Spectrogram

Spectrograms

In MATLAB the command

spectrogram(x,window,noverlap,nfft,fs,’yaxis’)

performs short-time Fourier transform and plots a 2D

frequency-time diagram, where

• x is the signal specified by vector x.

• if window is an integer, x is divided into segments of length

equal to that integer value

• otherwise, window is a Hamming window of length nfft

• noverlap is the number of samples each segment of x

overlaps

8

Page 12: From Fourier Series to Analysis of Non-stationary Signals VII · An overview of Fourier transforms ... audiowrite(’flute-resampled.wav’,x2, sr2); 11. MATLAB project { Spectrogram

Spectrograms

In MATLAB the command

spectrogram(x,window,noverlap,nfft,fs,’yaxis’)

performs short-time Fourier transform and plots a 2D

frequency-time diagram, where

• x is the signal specified by vector x.

• if window is an integer, x is divided into segments of length

equal to that integer value

• otherwise, window is a Hamming window of length nfft

• noverlap is the number of samples each segment of x

overlaps

8

Page 13: From Fourier Series to Analysis of Non-stationary Signals VII · An overview of Fourier transforms ... audiowrite(’flute-resampled.wav’,x2, sr2); 11. MATLAB project { Spectrogram

Spectrograms

In MATLAB the command

spectrogram(x,window,noverlap,nfft,fs,’yaxis’)

performs short-time Fourier transform and plots a 2D

frequency-time diagram, where

• x is the signal specified by vector x.

• if window is an integer, x is divided into segments of length

equal to that integer value

• otherwise, window is a Hamming window of length nfft

• noverlap is the number of samples each segment of x

overlaps

8

Page 14: From Fourier Series to Analysis of Non-stationary Signals VII · An overview of Fourier transforms ... audiowrite(’flute-resampled.wav’,x2, sr2); 11. MATLAB project { Spectrogram

Spectrograms

In MATLAB the command

spectrogram(x,window,noverlap,nfft,fs,’yaxis’)

performs short-time Fourier transform and plots a 2D

frequency-time diagram, where

• x is the signal specified by vector x.

• if window is an integer, x is divided into segments of length

equal to that integer value

• otherwise, window is a Hamming window of length nfft

• noverlap is the number of samples each segment of x

overlaps

8

Page 15: From Fourier Series to Analysis of Non-stationary Signals VII · An overview of Fourier transforms ... audiowrite(’flute-resampled.wav’,x2, sr2); 11. MATLAB project { Spectrogram

Spectrograms

• nfft is the FFT length and is the maximum of 256 or the

next power of 2 greater than the length of each segment of x

• fs is the sampling frequency, which defaults to normalized

frequency

• using ’yaxis’ displays frequency on the y -axis and time on

the x-axis

We also use command colorbar which appends a color scale to

the current axes.

9

Page 16: From Fourier Series to Analysis of Non-stationary Signals VII · An overview of Fourier transforms ... audiowrite(’flute-resampled.wav’,x2, sr2); 11. MATLAB project { Spectrogram

Chirp signal analysis sin(2π(f0 + αt)t)

0 0.5 1 1.5 2

t [s]

-1

-0.5

0

0.5

1

f(t)

0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8

Time (secs)

0

200

400

Fre

quen

cy (

Hz)

-150

-100

-50

Pow

er/fr

eque

ncy

(dB

/Hz)

10

Page 17: From Fourier Series to Analysis of Non-stationary Signals VII · An overview of Fourier transforms ... audiowrite(’flute-resampled.wav’,x2, sr2); 11. MATLAB project { Spectrogram

Matlab project

Page 18: From Fourier Series to Analysis of Non-stationary Signals VII · An overview of Fourier transforms ... audiowrite(’flute-resampled.wav’,x2, sr2); 11. MATLAB project { Spectrogram

MATLAB project – Spectrogram I

a) Start MATLAB. Load in the audio signal with commands

filename = ’flute-C4.wav’;

[x1 sr1] = audioread(filename);

b) The sampling rate is 11 025 Hz, and the signal contains 36 250

samples.

Q: If we consider this signal as sampled on an interval [0,T ),

what is the time duration of the flute sound ?

c) Use command soundsc(x1,sr1) to obtain flute sound

click to play

d) Resample the audio signal by fr = 4000 Hz and write the sound

file to disk using

audiowrite(’flute-resampled.wav’,x2, sr2);

11

Page 19: From Fourier Series to Analysis of Non-stationary Signals VII · An overview of Fourier transforms ... audiowrite(’flute-resampled.wav’,x2, sr2); 11. MATLAB project { Spectrogram

MATLAB project – Spectrogram I

0 0.5 1 1.5 2 2.5 3 3.5

−0.05

0

0.05

Flute

Time [s]

0 0.5 1 1.5 2 2.5 3 3.5

−0.05

0

0.05

Resampled flute

Time [s])

12

Page 20: From Fourier Series to Analysis of Non-stationary Signals VII · An overview of Fourier transforms ... audiowrite(’flute-resampled.wav’,x2, sr2); 11. MATLAB project { Spectrogram

MATLAB project – Spectrogram I

e) Compute the DFT of the signal with X1 = fft(x1(1:1024));

and X2 = fft(x2(1:1024));

f) DFT of real-valued signals is always symmetric around fr/2 so

we only need to plot the first half. Display the magnitude of the

Fourier transform using

plot(f1(1:end/2+1), abs(X1(1:end/2+1)))}

g) Q: What is the approximate fundamental frequency of the flute

note C4?

13

Page 21: From Fourier Series to Analysis of Non-stationary Signals VII · An overview of Fourier transforms ... audiowrite(’flute-resampled.wav’,x2, sr2); 11. MATLAB project { Spectrogram

MATLAB project – Spectrogram I

e) Compute the DFT of the signal with X1 = fft(x1(1:1024));

and X2 = fft(x2(1:1024));

f) DFT of real-valued signals is always symmetric around fr/2 so

we only need to plot the first half. Display the magnitude of the

Fourier transform using

plot(f1(1:end/2+1), abs(X1(1:end/2+1)))}

g) Q: What is the approximate fundamental frequency of the flute

note C4? A: Find the bin corresponding to the first peak in the

magnitude spectrum.

13

Page 22: From Fourier Series to Analysis of Non-stationary Signals VII · An overview of Fourier transforms ... audiowrite(’flute-resampled.wav’,x2, sr2); 11. MATLAB project { Spectrogram

MATLAB project Spectrogram I

e) You can use a systematic way to find the frequency of the peaks

in spectrum abs(X2) using following commands:

% find local maxima

mag = abs(X2);

mag = mag(1:end/2+1);

peaks = (mag(1:end-2) < mag(2:end-1)) &

(mag(2:end-1) > mag(3:end));

f) Then evaluate the peaks at corresponding frequencies above a

threshold:

peaks = peaks & mag(2:end-1) > 0.5;

fmax = f2(peaks)

14

Page 23: From Fourier Series to Analysis of Non-stationary Signals VII · An overview of Fourier transforms ... audiowrite(’flute-resampled.wav’,x2, sr2); 11. MATLAB project { Spectrogram

MATLAB project Spectrogram I

0 1000 2000 3000 4000 5000 60000

0.2

0.4

0.6

0.8

1

1.2

1.4

Mag

nitu

de

Frequency (Hz)

Flute

0 500 1000 1500 2000 25000

1

2

3

4

5

6

7

Mag

nitu

de

Frequency (Hz)

Resampled flute

15

Page 24: From Fourier Series to Analysis of Non-stationary Signals VII · An overview of Fourier transforms ... audiowrite(’flute-resampled.wav’,x2, sr2); 11. MATLAB project { Spectrogram

MATLAB project Spectrogram I

g) Finally we will use Spectrogram with following specifications:

nwin = 512; % samples of a window

noverlap = 256; % samples of overlaps

nfft = 512; % samples of fast Fourier

transform

f = figure(1)

spectrogram(x1, nwin, noverlap, nfft, sr2,

’yaxis’);

colorbar % not stricly necessary

print -djpeg90 figure-spect % or ...

saveas(f, ’figure-spect.eps’, ’epsc);

h) Carefully study the options for the spectrogram using help!

16

Page 25: From Fourier Series to Analysis of Non-stationary Signals VII · An overview of Fourier transforms ... audiowrite(’flute-resampled.wav’,x2, sr2); 11. MATLAB project { Spectrogram

MATLAB project Spectrogram – I

0.5 1 1.5 2 2.5 30

200

400

600

800

1000

1200

1400

1600

1800

2000

Time

Fre

quen

cy (

Hz)

−140

−130

−120

−110

−100

−90

−80

−70

−60

−50

17

Page 26: From Fourier Series to Analysis of Non-stationary Signals VII · An overview of Fourier transforms ... audiowrite(’flute-resampled.wav’,x2, sr2); 11. MATLAB project { Spectrogram

MATLAB project Spectrogram – II

a) Construct a signal f of two sinusoids on interval t ∈ [0, 2)

sampled at 1 kHz

t=[0:1999]/1000;

f=cos(2*pi*137*t)+cos(2*pi*147*t);

b) Compute the DFT of f and display its magnitude in time and

frequency domain.

c) Construct a spectrogram using

spectrogram(f,512,510,512,1000,’yaxis’);

18

Page 27: From Fourier Series to Analysis of Non-stationary Signals VII · An overview of Fourier transforms ... audiowrite(’flute-resampled.wav’,x2, sr2); 11. MATLAB project { Spectrogram

MATLAB project – Spectrogram II

19

Page 28: From Fourier Series to Analysis of Non-stationary Signals VII · An overview of Fourier transforms ... audiowrite(’flute-resampled.wav’,x2, sr2); 11. MATLAB project { Spectrogram

MATLAB project Spectrogram II

20