Next  |  Prev  |  Up  |  Top  |  Index  |  JOS Index  |  JOS Pubs  |  JOS Home  |  Search

### Matlab listing: invmyspectrogram.m

```function a = invmyspectrogram(b,hop)
%INVMYSPECTROGRAM Resynthesize a signal from its spectrogram.
%   A = INVMYSPECTROGRAM(B,NHOP)
%   B = complex array of STFT values as generated by MYSPECTROGRAM.
%   The number of rows of B is taken to be the FFT size, NFFT.
%   INVMYSPECTROGRAM resynthesizes A by inverting each frame of the
%   FFT in B, and overlap-adding them to the output array A.
%   NHOP is the overlap-add offset between successive IFFT frames.
%

[nfft,nframes] = size(b);

No2 = nfft/2; % nfft assumed even
a = zeros(1, nfft+(nframes-1)*hop);
xoff = 0 - No2; % output time offset = half of FFT size
for col = 1:nframes
fftframe = b(:,col);
xzp = ifft(fftframe);
% xzp = real(xzp); % if signal known to be real
x = [xzp(nfft-No2+1:nfft); xzp(1:No2)];
if xoff<0 % FFT's "negative-time indices" are out of range
ix = 1:xoff+nfft;
a(ix) = a(ix) + x(1-xoff:nfft)'; % partial frames out
else
ix = xoff+1:xoff+nfft;
a(ix) = a(ix) + x';  % overlap-add reconstruction
end
xoff = xoff + hop;
end
```

Next  |  Prev  |  Up  |  Top  |  Index  |  JOS Index  |  JOS Pubs  |  JOS Home  |  Search

[How to cite this work]  [Order a printed hardcopy]  [Comment on this page via email]
[Watch the Video]  [Work some Exercises]  [Examination]