Signal Processing Stack Exchange is a question and answer site for practitioners of the art and science of signal, image and video processing. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I am working on a sinusoidal encoder & decoder to compress .wav files. For now I am trying to regenerate the audio by combining all the frequencies of the original .wav file. Here is the code I am using:

[x fs] = wavread('clip.wav');
x  = mean(x,2);
NFFT = 1024;
hop = NFFT/2;
win = hann(NFFT);

[S F]= spectrogram(x, win, hop, NFFT, fs);
freq = linspace(0, fs/2, hop + 1);
numFrames = size(S,2);
mag = abs(S);
phase = angle(S);

output = zeros(size(x));
t = 0:(1/fs):(((NFFT-1)/fs));
sumOfCosine = zeros(1, NFFT );
frameStart = 1;
frameEnd = NFFT;

%f = frame
for f = 1:numFrames
    sumOfCosine = zeros(1, NFFT );

    %k = sinusoids in each frame
    for k = 1:hop+1
       sumOfCosine =  sumOfCosine + (mag(k,f)*cos(2*pi*F(k)*t + phase(k,f)));

 sumOfCosine = sumOfCosine.*win';
 a = hop;
 % Normalize the window
 sumOfCosine = (sumOfCosine./a);
 sumOfCosine = sumOfCosine';
 output(frameStart:frameEnd) = ((output(frameStart:frameEnd)+ sumOfCosine));
 frameStart = frameStart + (hop);
 frameEnd = frameEnd + (hop);


When I play play output, there is still some noise in it. I tried comparing the original matrix x multiplied by the window, win to the output frame by frame, and I can see that output represented by green doesn't completely overlap with the original windowed signal. I am pasting the images for the first three frames below.

Frame 1

Frame 2

Frame 3

As it can be seen there is some error due to the overlapping of windows maybe? I'd appreciate help in fixing this and make the output sound cleaner. Thanks!

share|improve this question

For the phases of sinusoids within the frame overlaps to sum constructively, either t has to be adjusted to be frame relative, or the fft phase result has to be adjusted to be relative to the same absolute time as t.

share|improve this answer
t lasts for 1 frame(1024 samples or 23 ms). What do you mean by "fft phase result has to be adjusted to be relative to the same absolute time as t"? Sorry if it seems like a stupid question. – dawnoflife Dec 1 '12 at 20:06
I tried changing the size of t to 23/2 ms, but that didn't do anything... – dawnoflife Dec 2 '12 at 1:11

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.