[an error occurred while processing this directive]
|
Вопрос в следующем, делается алгоритм, на вход поступают данные блоками по 32 сэмпла, внутри делается FFT по 64 точкам (перекрытие 1/2). Потом после колбасни со спектром делается IFFT и берутся 64 отсчета. Вот в чем вопрос: исключая колбасны со спектром все это действо эквивалентно свертке в частотной области с h=[1 0 0 0 0 0...]
Т.е.
N=64;
N2=32;
nf = length(IN)/N2;
for f = 1 : nf,
X( 1 : N2 ) = IN( ( f - 1 ) * N2 + 1 : f * N2 );
Y = fft( X );
Y = ifft( Y );
% Делаем перекрытие с суммированием
OUT( ( f - 1 ) * N2 + 1 : f * N2 ) = real( Y0( N2 + 1 : N) + Y( 1 : N2 ) );
Y0 = Y
end
И это работает правильно, но не учитывается spectrum leakage, т.е. FFT надо делать так (с окном):
Y = fft(hanning(N) .* X');
Но это очень сильно искажает выходной сигнал.
Чего-то я не допонимаю...
E-mail: info@telesys.ru