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.
- How, can I find the change of frequency with Time (900000 sample) or 15 min?
- 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
%zero padding
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)
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. $\endgroup$