Я делаю БПФ и IFFT со звуковым сигналом.Ниже приведен код, который я использую.Но мой вопрос перед FFT, он извлекает 1 байт из короткого массива.Как вы знаете, short это 2 байта.
почему он это делает?Из-за извлечения After IFFT (FFT (original_audio_buffer)) не совпадает с original_audio_buffer.почему это приводит к потере данных?
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);
}