0% found this document useful (0 votes)
35 views

Scribd

The document describes how to use the MATLAB command specgram to calculate spectrograms. Specgram divides a signal into overlapping segments, windows each segment, and forms columns of the output matrix with the discrete Fourier transforms of each segment. It explains how to specify parameters like the number of FFT points, sampling frequency, window type and length, and overlap. Examples are provided to demonstrate specgram on chirp signals and a multi-component signal.

Uploaded by

Alain
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
35 views

Scribd

The document describes how to use the MATLAB command specgram to calculate spectrograms. Specgram divides a signal into overlapping segments, windows each segment, and forms columns of the output matrix with the discrete Fourier transforms of each segment. It explains how to specify parameters like the number of FFT points, sampling frequency, window type and length, and overlap. Examples are provided to demonstrate specgram on chirp signals and a multi-component signal.

Uploaded by

Alain
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 9

MATLAB code

• You can use the MATLAB command: specgram


• SPECGRAM Spectrogram using a Short-Time Fourier Transform (STFT).
• B = SPECGRAM(A) calculates the spectrogram for the signal in vector A.
• SPECGRAM divides the signal into overlapping segments, windows each
• segment and forms the columns of B with their discrete Fourier
• transforms.

• B = SPECGRAM(A,NFFT,Fs) specifies the number of FFT points used to
• calculate the discrete Fourier transforms. If NFFT = [] or is not
• specified the default NFFT = minimum of 256 and the length of A. Fs is
• the sampling frequency which does not effect the spectrogram but is
• used for scaling plots. If Fs=[] or is not specified it defaults to 2
• Hz.

• B = SPECGRAM(A,NFFT,Fs,WINDOW,NOVERLAP) uses WINDOW to window each
• overlapping segment and forms the columns of B with their zero-padded,
• length NFFT discrete Fourier transforms. If you specify a scalar for
• WINDOW, SPECGRAM uses a Hanning window of length NFFT. WINDOW must
• have a length smaller than or equal to NFFT and greater than NOVERLAP.
• NOVERLAP is the number of samples each segement of A overlaps. The
• default value of NOVERLAP = length(WINDOW)/2.
Effect of Window Length
1
0

-1
0 50 100 150 200 250 300

5
10
15
50 100 150 200

10
20
30
50 100 150 200

20
40
60
20 40 60 80 100 120 140 160 180
Example
• %logon; • t=0:0.001:2; % 2 secs @ 1kHz
• x=logon(64,0.4,128); sample rate
• tflog=specgram(x,32,128,32,31); • tf1=specgram(y,256,1E3,256,250);
• subplot(211); • y=chirp(t,0,1,150); % Start @ DC,
• plot(real(x)); cross 150Hz at t=1sec
• subplot(212);
• t=-2:0.001:2; % +/-2 secs @ 1kHz
• imagesc(abs(tflog)); sample rate
• pause;
• figure
• y=chirp(t,100,1,200,'q'); % Start @ 100Hz,
cross 200Hz at t=1sec
• %demo signal;
• tfdemo=specgram(demosig,32,200,32,31); • tf2=specgram(y,128,1E3,128,120); %
• imagesc(abs(tfdemo));
Display the spectrogram
• pause • figure;
• figure; • subplot(211)
• % effect of the window length; • imagesc(abs(tf1));
• y=[zeros(1,128),exp(j*0.6*[1:128])]; • title('Linear Chirp: start at DC, cross 150Hz
• subplot(411); at t=1sec');
• plot(real(y)); • subplot(212)
• subplot(412);
• imagesc(abs(tf2));
• tf1=specgram(y,16,256,16,15);
• imagesc(abs(tf1)); • title('Quadractic Chip: start at 100Hz and
• subplot(413); cross 200Hz at t=1sec');
• tf2=specgram(y,32,256,32,31);
• imagesc(abs(tf2));
• subplot(414);
• tf3=specgram(y,64,256,64,63);
• imagesc(abs(tf3));
Chirp Signals
Linear Chirp: start at DC, cross 150Hz at t=1sec

20
40
60
80
100
120
50 100 150 200 250

Quadractic Chip: start at 100Hz and cross 200Hz at t=1sec

20

40

60
50 100 150 200 250 300 350 400 450
Demo Signal

10

15

20

25

30

20 40 60 80 100 120 140 160


Spectrogram Examples-2
• %spcgrm;
• x=logon(50,0.3,200)+logon(130,0.7,200)+logon(140,-0.5,200);
• S1=specgram(x,256,200,16,15);
• S2=specgram(x,256,200,32,31);
• S3=specgram(x,256,200,64,63);
• S4=specgram(x,256,200,128,127);
• subplot(221);
• imagesc(abs(S1));
• subplot(222);
• imagesc(abs(S2));
• subplot(223);
• imagesc(abs(S3));
• subplot(224);
• imagesc(abs(S4));
• %example 2;
• x=exp(j*0.5*[1:200])+exp(j*2*[1:200]);
• S=specgram(x,256,200,32,31);
• figure
• imagesc(abs(S));
Logon
1

0.5

-0.5

-1
0 20 40 60 80 100 120 140

10

20

30
10 20 30 40 50 60 70 80 90
Two Sinusoids

50

100

150

200

250
20 40 60 80 100 120 140 160
Multiple Logons

50 50
100 100
150 150
200 200
250 250
50 100 150 50 100 150

50 50
100 100
150 150
200 200
250 250
20 40 60 80 100 120 20 40 60

You might also like