Доброе время суток, уважаемый электронщик!
Это несколько узкая тема, но на целевом форуме Техасских Инструментов на него ответа пока нет, а тут, как я понимаю, есть знающие люди.
Собственно проблема в реализации обратного быстрого преобразования Фурье средствами родной библиотеки для плавающей точки C28x FPU Library Beta1. Документация по библиотеки - в приложении к сообщению.
Исходный сигнал
Результат БПФ
Результат повторного БПФ - пример 1
Результат повторного БПФ - пример 2
Как видите, присутствует изменение амплитуды сигнала. Почему это происходит, я не понимаю. Есть идеи?
Исходный код:
// Объявления
namespace measure
{
const Uint16 fftSize=8192;
const Uint16 fftStages=13;
RFFT_F32_STRUCT fft;
RFFT_F32_STRUCT ifft;
float32 bufferA[fftSize];
float32 bufferB[fftSize];
float32 bufferC[fftSize];
}
// Инициализация
void measure::init(){
fft.InBuf=bufferA;
fft.OutBuf=bufferB;
fft.CosSinBuf=bufferC;
fft.MagBuf=fft.InBuf;
fft.FFTSize=fftSize;
fft.FFTStages=fftStages;
ifft.InBuf=fft.OutBuf;
ifft.OutBuf=fft.InBuf;
ifft.CosSinBuf=fft.CosSinBuf;
ifft.MagBuf=ifft.InBuf;
ifft.FFTSize=fftSize;
ifft.FFTStages=fftStages;
RFFT_f32_sincostable(&fft);
}
...
RFFT_f32u(&fft); // Собственно БПФ
RFFT_f32u(&ifft); // Неудачная попытка ОБПФ
...
C28x_FPU_Library_Beta1.pdf