Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: КИХ фильтр
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
glb
Доброго времени суток. В ЦОС новичок, возникла необходимость установить в канале корректирующий фильтр, для выравнивания АЧХ ЦАП, решил воспользоваться методом частотных выборок опираясь на эту статью http://www.dsplib.ru/content/filters/fir/fir.html при расчете получаются комплексные коэффициенты ИХ. Нашел еще статью Нажмите для просмотра прикрепленного файла, в ней говорится, что для получения их, при наличие только АЧХ можно воспользоваться следующей формулой, получаю ИХ состоящую из действительных коэффициентов, все бы хорошо, но при восстановлении АЧХ из ИХ получаю совсем не то что должно быть.. Долго бьюсь, но понимание так и не наступает.
прикладываю код в Matlab
Ts = 0.5e-6;%длительность сигнала
Fd = 720e5; %частота дискретизации
Ns = Fd*Ts;%количество отсчетов
f = 0:Fd/Ns:Fd-Fd/Ns;%вектор частот

%%
K=((sinc((f)/F_cap))); %АЧХ ЦАП
H=1./K; %АЧХ фильтра

%%
P=29; %порядок фильтра
N=P-1; %колтчестов отсчетов ИХ
alfa = (N-1)/2;
for n = 0:N-1
k = [1:N/2-1];
h(n+1) = (1/N)*(sum(2*abs(H(k+1)).*cos(2*pi.*k*(n-alfa)/N))+H(1));%формула из статьи
plot((abs(freqz((h),1,720000)))); %восстановленная АЧХ
end

glb
Если делать по алгоритму приведенном в ссылке, то выполняя пример как у них все получается как надо
R = [1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1];
for k = 0:15
if (k<N/2)
FI(k+1) = -(N-1)*pi*k/N;
else
FI(k+1) = -(N-1)*(k-N)*pi/N;
end
end
K = H.*exp(j*FI);

Однако, если изменить АЧХ на ту которая нужна 1/sinc(x), и оставить длину ИХ 16, опять импульсная характеристика получается комплексная
stealth-coder
АЧХ и ИХ связаны между собой через преобразование Фурье.
Для получения АЧХ из ИХ нужно выполнить преобразование Фурье, результат комплексный, т.к. содержит не только АЧХ, но и ФЧХ. Для выделения АЧХ надо получить амплитудный спектр (корень квадратный из суммы квадратов действительной и мнимой частей).
glb
Цитата(stealth-coder @ Sep 20 2015, 16:58) *
АЧХ и ИХ связаны между собой через преобразование Фурье.
Для получения АЧХ из ИХ нужно выполнить преобразование Фурье, результат комплексный, т.к. содержит не только АЧХ, но и ФЧХ. Для выделения АЧХ надо получить амплитудный спектр (корень квадратный из суммы квадратов действительной и мнимой частей).



С этим все понятно, я не об этом спрашиваю, у меня в импульсной характеристики получились комплексные коэффициенты.
andyp
Цитата(glb @ Sep 25 2015, 16:27) *
С этим все понятно, я не об этом спрашиваю, у меня в импульсной характеристики получились комплексные коэффициенты.


Для того, чтобы ИХ перестала быть комплексной требуется, чтобы реальная часть передаточной характеристки была четной, а мнимая - нечетной функцией от частоты. В этом стоит убедиться перед тем, как сделали обратное преобразование Фурье.
glb
Цитата(andyp @ Sep 25 2015, 19:05) *
Для того, чтобы ИХ перестала быть комплексной требуется, чтобы реальная часть передаточной характеристки была четной, а мнимая - нечетной функцией от частоты. В этом стоит убедиться перед тем, как сделали обратное преобразование Фурье.


АЧХ имеет вид sinc(x), значит она нечетна и ИХ будет только комплексной?
andyp
Цитата(glb @ Sep 25 2015, 19:07) *
АЧХ имеет вид sinc(x), значит она нечетна и ИХ будет только комплексной?


>> ifft(ifftshift(sinc(-3:0.5:3)))
ans =

Columns 1 through 4:

0.16181 + 0.00000i 0.14505 - 0.00000i 0.16662 + 0.00000i 0.11143 - 0.00000i

Columns 5 through 8:

-0.00573 - 0.00000i 0.00241 + 0.00000i -0.00068 + 0.00000i -0.00068 - 0.00000i

Columns 9 through 12:

0.00241 - 0.00000i -0.00573 + 0.00000i 0.11143 + 0.00000i 0.16662 - 0.00000i

Column 13:

0.14505 + 0.00000i

вполне себе действительная (мнимая часть ~ 3e-18)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.