Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
( 1 + k*p ) / ( 1 + k*p +k*k*p*p) имеет частоту среза=f0=6.25, то для перевода билинейным преобразованием Вам нужно не эту ф-ию использовать, а
H(p)=(1+k*2pi*f0*p)/(1+k*2pi*f0*p+k*k*2pi*f0*2pi*f0*p*p).
А переводить проще по полюсам-нулям, хотя конечно дело вкуса.
Т.е.
H(p)=(1+k*2pi*fa*p)/(1+k*2pi*fa*p+k*k*2pi*fa*2pi*fa*p*p)=
=(p-nul)/((p-pol)*(p-pol'))
nul - корень числителя, pol,pol' - комлексно-сопряженные корни
знаменателя:-)
Вот p в (p-nul)/((p-pol)*(p-pol')) и заменяйте на Qa*(1-z^-1)/(1+z^-1)
Получите
H(Z)=B*(1+Z^-1)(1-DNUL*Z^-1)/(1-DPOL*Z^-1)*1-DPOL'*Z^-1)=
=B*[1+(1-DNUL)*Z^-1-DNUL*Z^-2]/[1-2*R*COS(FI)*Z^-1+R^2*Z^-2];
DNUL=(Qa+nul)/(Qa-nul);
DPOL=(Qa+pol)/(Qa-pol), DPOL' - комплексное сопряжение DPOL.
R=|DPOL|, FI=arctg(Im(Dpol)/Re(Dpol)).
B=(Qa-nul)/(Qa-pol)*(Qa-pol')
Итого C2=1, C1=2*R*COS(FI), C2=R^2.
D0=1, D1=1-DNUL,D2=DNUL.
А B выносится за скобки, на него можно перед фильтрацией умножить входные данные и успешно о нем забыть.
Арифметику и обратную связь лучше 32-х разрядную делать. На выход можно и до 16 разрядов округлять (но в обратную связь 32 разряда).
Составить ответ | Вернуться на конференцию
Ответы