Also, the final output gain depends on the type of window used. Would it be possible to have a normalisation parameter for  windows?  So ifft_output/overlap_factor/window_normalisation_param equals or aproximates the input signal gain. Not sure, but the normalisation parameter could be overcome by just normalising windows thus w[i]=Sum_[0, fftsize](w[i]). A previous email I sent a few days ago was also related to this, but I got no reply yet :-(.
Instedad of having to do this manually, IMHO it'd be nice just to use ifft_output. In this way, one could set the overlap as fft.overlap( overlap_factor ) and the normalisation should be already set when the user sets the windowing into the fft, so when windowing.blackmanHarris( size ) => fft.window is set. This way the user doesn't really need take care anymore.

eduard


On Nov 21, 2007 4:36 PM, Aylon Eduard < eduard.aylon@gmail.com> wrote:
Hi there,

In the following code ifft.last() is sometimes larger than 1, but when the input signal has unity gain, it shouldn't be like this. Actually, what happens, I think, is that the amplification is proportional to the overlap factor. So should setting ifft.gain to hopsize/fftsize be the correct way to handle this?

thanks

eduard


SinOsc s => FFT fft => IFFT ifft => dac; //blackhole;
1024 => int fftsize => fft.size;
fftsize/4 => int hopsize;
fftsize/2 => int specsize;
Windowing.blackmanHarris(fftsize) => fft.window => ifft.window;
complex spec[ specsize ];
fun void transform()
{
    fft.upchuck();
    fft.spectrum( spec );
    ifft.transform( spec );
    hopsize::samp => now;
}

while( true )
{
    if( Std.fabs(ifft.last() > 1) )
        <<< ifft.last() >>>;
    transform();
}