I am doing FFT and IFFT with audio signal. The following is the code that i am using. But my question is before FFT, it extracts 1 byte from short array. As you know short is 2 bytes.
why it is doing it? Because of the extraction, After IFFT(FFT(original_audio_buffer)) is not same with original_audio_buffer. why it makes data loss?
public void calculateSignal(short[] original_audio_buffer)
{
    final int mNumberOfFFTPoints = 512;
    double mMaxFFTSample;
    int mPeakPos;
    if(converted_audio_buffer == null)
    {
        converted_audio_buffer = new short[mNumberOfFFTPoints * 2];
    }
    double temp;
    Complex[] y;
    Complex[] complexSignal = new Complex[mNumberOfFFTPoints];
    double[] absSignal = new double[mNumberOfFFTPoints/2];
    for(int i = 0; i < mNumberOfFFTPoints; i++)
    {
        temp = (double)((original_audio_buffer[2*i] & 0xFF) | (original_audio_buffer[2*i+1] << 8)) / 32768.0F;
        complexSignal[i] = new Complex(temp,0.0);
    }
    y = FFT.fft(complexSignal);
    Complex[] z = FFT.ifft(y);
    for(int i = 0; i < z.length; i++)
    {
        double tmp_re = z[i].re();
        tmp_re = tmp_re *  32768.0F;
        int tmpIntRe = (int)tmp_re;
        converted_audio_buffer[2*i] = (short)(tmpIntRe & 0x000000FF);
        converted_audio_buffer[2*i+1] = (short)( (tmpIntRe) >> 8);
    }
User contributions licensed under CC BY-SA 3.0