реклама на сайте
подробности

 
 
> Реализация КИХ-фильтра с разрядностью 32 бит, на Blackfin и С
K A A
сообщение Mar 29 2007, 16:47
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 35
Регистрация: 15-06-06
Пользователь №: 18 069



Пишу программу вычисления действующего значения сигнала с помощью КИХ-фильтрации.
Алгоритм следующий: 16-бит выборки возвожу в квадрат, получаю 32 бит, затем умножаю на весовой коэффициент (32 бит) и прибавляю к аккумулятору. При такой разрядности нужно использовать все 40 бит аккумулятора MAC, и то этого мало. Но никак не пойму, как это сделать на С. Функции из fract_math.h реализуют умножение 32x32 -> 32 и сложение 32+32 -> 32, как обрабатывать дополнительные 8 бит? Или писать на ассемблере?

ЗЫ: почему такая разрядность - просто погрешность результата должна быть на уровне 0.001%. Почти получается, когда алгоритм был реализован с использованием вещественной арифметики. Для улучшения стабильности нужно увеличить размер окна в несколько раз (сейчас 4096, хорошо бы раз в 16 больше, путем интерполяции на лету), соответственно увеличить частоту - тут уже проц не поспевает. Еще возможные проблемы с float при большом окне - ограничение разрядности, когда сумма накопится большая, а слагаемые очень маленькие, при этом они будут игнорироваться.

Так как это сделать на С?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
fontp
сообщение Mar 29 2007, 17:36
Сообщение #2


Эксперт
*****

Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183



Это легко сделать инлайн вставками ассемблера. А саму переменную для накопителя можно объявить в С 64-разрядной (long long что-ли).
Чисто в С, наверно, никак
Go to the top of the page
 
+Quote Post
Stanislav
сообщение Mar 29 2007, 22:32
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 4 363
Регистрация: 13-05-05
Из: Москва
Пользователь №: 4 987



Цитата(fontp @ Mar 29 2007, 18:36) *
Это легко сделать инлайн вставками ассемблера. А саму переменную для накопителя можно объявить в С 64-разрядной (long long что-ли).
Чисто в С, наверно, никак
Присоединяюсь к данному мнению. Я искал, как это сделать, довольно тщательно. Вывод: никак нельзя.
Только я бы посоветовал даже не делать инлайн вставки, а писать на АСМе полноценные процедуры для напряжённой обработки сигнала. Выигрыш против С либо в точности, либо в производительности получается значительный.


--------------------
Самонадеянность слепа. Сомнения - спутник разума. (с)
Go to the top of the page
 
+Quote Post
K A A
сообщение Mar 30 2007, 08:53
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 35
Регистрация: 15-06-06
Пользователь №: 18 069



Спасибо, буду делать на ассемблере
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd August 2025 - 20:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01397 секунд с 7
ELECTRONIX ©2004-2016