# How do I get the Time information after STFT?

I'm tring to code a STFT program in Matlab. I got results but I'm confused a bit. I have a audio signal of 900000 pts sampled at 1000Hz (15 min signal). I've taken fft with following parameters =>

• hop size of H = 1400 pts
• the window length M = H * 6

So, 5/6 of the window overlaps with the next one. The program runs for 637 iterations, as (637*1400 + M = 900200)

Now, I get a 637 pt vector with frequency in them. I should get a frequency vs time plot. But it only has 637 frequency bins, for a signal of 900000 time sample.

1. How, can I find the change of frequency with Time (900000 sample) or 15 min?
2. Moreover, how does changing the window length and overlap affect the outcome of STFT? The code is below.

%hop size
L = 1400;

%window length & Formation
D = 6;                        %User Defined Parameter in Cooper's paper
M = L*D;
w = hanning(M, 'periodic');    %window formation

k = 1; % k =index
j = 1; % j =result vector index
while k + M <= xlen

%data chunk
%x = x(k:1400);

%window length & Window
xw = x(k+1:k+M) .*w;                  %windowed signal

b = 5;                           %Zero Padding Factor 'b'
xw = [xw; zeros(M*5,1)];
[nft,c] = size(xw);

%plot(abs(fft(xw)))
X = abs(fft(xw));
XF = X(1:length(X)/2);
[q,ind] = max(XF);
v(j) = ((fs/2)/(nft/2)) * (ind-1);  %convert Bin to frequency
k = k+L;
j = j+1;
end

figure(1);
plot(v)
axis([0 1400 0 100])

figure(2);   %zoom version
plot(v)

• Are you saying M = H * 6 = 1400 * 6 ? It's not clear from what you've written. If that's true, then your overlap is 5/6, not 1/6? Each FFT should return a vector of length M. So you should have a $637 \times M$ matrix at the end of it. – Peter K. Nov 20 '15 at 15:07
• Oh, sorry about that. I fixed it in the question to 5/6. I'm fairly new. What I'm trying to do, is to mimick the built-in "spectrogram" function of Matlab without the color. The spectrogram function fails to detect slight change of frequency. I want to find out the change of frequency with respect to time. I don't have 637 x M matrix, because I converted each fft frame and took the frequency bin corresponding maximum amplitude, with formula v(j) = ( (fs/2) / (nft/2) ) * (index of freq correspond ot max amplitude) and save in a vector. I've attached the related code in the question now. – Rio1210 Nov 20 '15 at 15:25
• – Rio1210 Nov 20 '15 at 16:50

How, can I find the change of frequency with Time (900000 sample) or 15 min?

OK, so you need 900000 frequencies. Well, one way to do that is to take each element of your 637 length vector and expand it to (up to) $H$ samples.

Moreover, how does changing the window length and overlap affect the outcome of STFT?

The longer the window length, the better the frequency resolution is. The shorter the length, the worse the frequency resolution will be.