C FFT хорошего мало у Вас получится. Лучше попытаться решить в (среднеквадратическом смысле) систему уравнений H*c = d, где H матрица сверти получается из вашей импульсной характеристики, с - искомая ихпульсная характеристика фильтра, d -желаемая импульсная хар-ки системы, в данном случае это вектор где один элемент =1 остальные нули. с получается в результате решения системы линейных уравнений: H'*H*c = H'*d; (см. прикрепленный файл); Это называется нормальное уравнение. Для информации можно поискать на темы "Метод наименьших квадратов" "Нормальное уравнение", или из области связи например "least square equalization".
Lh = 10; % length of impulse reponce Lc = 20; % length of fir
h = sin( (1:Lh)*2*pi*3/Lh).*exp(-0.3*(1:Lh)); h=h.'; H = convmtx(h, Lc); d = zeros(Lc+Lh-1, 1); d(6) = 1;
c = pinv(H'*H)*(H'*d); size(H)
figure(1); plot(h );
figure(2); plot©;
figure(3); plot(conv(c, h)); % plot convolution c*h
--------------------
ну не художники мы...
|