Цитата(sigmaN @ Sep 17 2009, 09:41)

Собственно говоря у меня тот-же вопрос и в сопроводительной доке ответа на него нет.
http://www.ti.com/litv/zip/sprc624 - либа вместе с докой
Вечерком ковырну исходники и посмотрю. Ну или эксперимент организую.....
Ну или накрайняк сапорт озадачить попробую......
дока отдельно:
В OutBuf лежит N чисел, причем первые N/2+1 чисел а именно OutBuf[0:N/2] - реальные части половины БПФ, а вторые N/2-1 точек OutBuf[N/2+1:N-1] - мнимые части половины БПФ отраженные зеркально. Поскольку сигнал реальный, то вторая половина БПФ симметрична первой и ее можно не учитывать. Теперь если надо делать IFFT, то надо поступить так:
R = OutBuf[0:N/2] N/2+1 реальных частей
I = OutBuf[N/2+1:N-1] N/2-1 МНИМЫХ частей
R1 = [R fliplr(R(1:N/2-1))] формируем массив N точек путем симметричного отображения
I1 = [0 fliplr(I) 0 -I] формируем массив N точек путем симметричного отображения c инверсией
fliplr отражает массив слева направо
таким образом R1+j*S1 - комплексный спектр, т.е. точный результат FFT теперь надо вязть IFFT:
IFFT(R1+j*S1) = IFFT(R1)+j*IFFT(S1) = (RR-II)/N, где RR = real(FFT(R1)), т.е. реальная часть FFT(R1) а II = imag(FFT(I1)) - мнимая часть FFT(I1)
Таким образом надо взять БПФ от реальной и мнимой части спектра
вот пример в матлабе
Код
clear all
j = sqrt(-1);
N = 64;
s = rand(1,N);
S = fft(s);
r = real(S(1:N/2+1)); % это реальная часть половины спектра в OutBuf
i = fliplr(imag(S(2:N/2))); % это мнимая часть половины спектра в OutBuf
r = [r fliplr(r(2:N/2))];% ОТРАЖАЮ зеркально
i = [0 fliplr(i) 0 -i]; % ОТРАЖАЮ зеркально с минусом
R = fft(r);
RR = real(R(1:N/2+1)); % это реальная часть половины спектра в OutBuf при fft(r)
RI = fliplr(imag(R(2:N/2))); % это мнимая часть половины спектра в OutBuf при fft(r)
I = fft(-i);
IR = real(I(1:N/2+1)); % это реальная часть половины спектра в OutBuf при fft(i)
II = fliplr(imag(I(2:N/2))); % это мнимая часть половины спектра в OutBuf при fft(i)
%отражаю вторые половины спектра:
A = [RR fliplr(RR(2:N/2))];% ОТРАЖАЮ зеркально
B = [0 fliplr(II) 0 -II]; % ОТРАЖАЮ зеркально с минусом
s0 = (A-B)/N;
plot(1:N,s,'-o',1:N,s0)
Сообщение отредактировал bahurin - Sep 17 2009, 10:58