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
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();
}