[an error occurred while processing this directive]
Для Dark Ghost (тусклой души)
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено st256 06 октября 2003 г. 17:17

Прошу прощения за делэй, водил блондинку в ресторан...

Y(n) = X(n)*B0 + X(n-1)*B1 + Y(n-1)*A0

B0 = 7FAF
B1 = 8051
A0 = 7F5F
(дополнительный сдвиг = 1)

На счет двойной точности я что, неправильно понял?

/*-----------------------------------------*/

Немного арифметики.

B0 = -B1 =0х8000 - 0х0051
A0 = B0!^2

Проверьте, если не верите. Т.о. формула вашего фильтра мановением мой руки превращается в следующее

Y(n) = X(n) - X(n-1) + B0 * Y(n-1)

Реализация Вашего фильтра может быть, как минимум, двоякой

Господа-критиканы, даю ПРИМЕРНУЮ рыбу!!!!

Вар.1. С умножением.
- в аккумуляторе А лежит сдвинутое влево на 16 разрядов Y(n-1)
- старшие 16 разряды А домножают на 0х0051. Результат в В.
- А+В -> А
- A + X(n) -> A
- A - X(n-1) -> A

Ваш 16-ти битный результат - старшие биты A (АH).

Вар.2. Без умножения.
- в аккумуляторе А лежит Y(n-1), сдвинутое влево на 16 (а можно и больше) разрядов.
- реализуем операцию домножения на B0 при помощи трех операций сдвиг-вычитание
--- A - A(со сдвигом влево на 10 разрядов)->B
--- B - A(со сдвигом влево на 12 разрядов)->B
--- B - A(со сдвигом влево на 16 разрядов)->B
--- B + X(n) -> B
--- B - X(n-1) -> B

Кстати, этот вариант точнее, т.к. Вы можете сдвинуть влево не на 16 разрядов, а на 19.

Есть еще вариант использовать свойство того, что B0 = 32768 - 3*3*3*3. Но уже лень. Сори!


Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru