Перейти к содержанию
    

Всем привет!

 

Вопрос вот такой.

Если у кого реализация FIR фильтра заточенного под децимацию сигнала?

Стандартная библиотека явно отстой, поэтому нужно вот что.

 

 

Сначала фильтр, или специальная ф-я, копируют данные в циклический буфер линии задержки, и потом с заданным коэффициентом децимации выдает N количество отсчетов наружу.

ЕМНИП, там размер линии задержки равен длине характеристики плюс размер входного буфера.

Т.е фильтр должен содержать ф-ю инициализации, ф-ю копирования входа и собственно сам фильтр. Само собой, фильтр требует еще и структуру состояния.

 

Есть ли у кого подобное? Если есть, поделитесь пожалуйста.

Наверняка кто-то уже подобное делал.

 

Спасибо.

 

 

 

И чтобы далеко не ходить, есть ли у кого быстрая реализация IIR?

 

Спасибо. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почему это библиотека отстой?? Можете написать фурье быстрее?? :-)))))

 

А фир надо делать через быструю свёртку.. (секционированную)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почему это библиотека отстой?? Можете написать фурье быстрее?? :-)))))

 

А фир надо делать через быструю свёртку.. (секционированную)

Может я смотрю какую-то другую библиотеку, но вот ф-я:

void DSPF_sp_fir_gen(const float * restrict x, const float * restrict h, float * restrict r, int nh, int nr);

Это не фильтр. Это заготовка для него.

Это явно не то, что должно быть. Даже ipp от интела будет быстрее. :)

 

Фурье тут не нужно. Достаточно просто нормально организовтаь цикл с циклическими буферами задержки и т.д.

 

Или я какую-то другую библиотеку сморю?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В облом мне искать функцию, но наивно полагать, что TI не мог правильно написать тупую свёртку.. :-)))

 

Официальный бенчмарк (фикс)::

 

FIR Filter (8 бит)

Computes a real FIR filter (direct-form) with nh coefficients and nr output samples. Nh and nr must be a multiple of 8.

 

T>32: nh * nr / 8 + 22

Other: 32*nr/8 + 22

 

For nh = 32 and nr = 100: cycles = 422

 

**********************************************

 

FIR Filter (комплексный 16 бит)

 

nh * nr / 2 + 16

 

 

**********************************************

 

IIR Biquad

Performs single biquad IIR filter for nxsamples

 

nx*4 + 25

 

For nx = 16: cycles = 89

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В облом мне искать функцию, но наивно полагать, что TI не мог правильно написать тупую свёртку.. :-)))

 

Официальный бенчмарк (фикс)::

 

FIR Filter (8 бит)

Computes a real FIR filter (direct-form) with nh coefficients and nr output samples. Nh and nr must be a multiple of 8.

 

T>32: nh * nr / 8 + 22

Other: 32*nr/8 + 22

 

For nh = 32 and nr = 100: cycles = 422

 

**********************************************

 

FIR Filter (комплексный 16 бит)

 

nh * nr / 2 + 16

 

 

**********************************************

 

IIR Biquad

Performs single biquad IIR filter for nxsamples

 

nx*4 + 25

 

For nx = 16: cycles = 89

 

Вопервых это 8 бит, а не float.

С другой стороны сам посуди, как фильтр может хорошо и быстро работать, если он нигде не сохраняет состояние? И вообще, как можно считать фильтр если не сохранять состояние линии задержки?

вот ф-я:

void DSPF_sp_fir_gen(const float * restrict x, const float * restrict h, float * restrict r, int nh, int nr);

Тут ни состояния, ни линнии задержки нет.

В общем, это какой-то обрубок. До фильтра этой ф-и еще как до луны. :)

Да и по тактам она не ахти. Если говорить о float, то на 10 входных отсчетов и 100 длина характеристики. она тратит ~ 580 отсчетов. Это ого-го как много.

 

PS. Судя по всему, процессор L138 и его DSP С674х вышли как раз в тот момент, как все переключились на ARM, и поэтому рынок DSP процессоров рухнул, и доводить C674х до ума никто не стал, или доводят но очень медленно. Куда не ткнись, везде какие-то недоработки....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

PS. Судя по всему, процессор L138 и его DSP С674х вышли как раз в тот момент, как все переключились на ARM, и поэтому рынок DSP процессоров рухнул, и доводить C674х до ума никто не стал, или доводят но очень медленно. Куда не ткнись, везде какие-то недоработки....

 

:-))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))

 

Хотел было прокомментировать по делу, но дочитав понял что смысла нет.. :-))))))))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И вообще, как можно считать фильтр если не сохранять состояние линии задержки?

 

Никак! Реализуйте линию задержки самостоятельно, это не сложно. Лично я в свое время так и поступил - скорость real-time меня вполне устраивает, я, правда, использовал fixed-point. Также советую обратить внимание, что фильтр будет работать "быстрее", если на вход фильтра вы будете подавать не один отсчет, а как можно больше.

Изменено пользователем D.I.M.A

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Никак! Реализуйте линию задержки самостоятельно, это не сложно. Лично я в свое время так и поступил - скорость real-time меня вполне устраивает, я, правда, использовал fixed-point. Также советую обратить внимание, что фильтр будет работать "быстрее", если на вход фильтра вы будете подавать не один отсчет, а как можно больше.

 

Спасибо.

Я так и понял.

 

Придется писать свой фильтр...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот сижу, разбираюсь с ассемблером и смотрю в код который идет от TI. То что писали его скорее всего индусы это понятно.

 

Но проблема в том, что этот код похоже никто никогда не использвал. :)

Т.е. для тестов и бенчмарков он может и сгодиться, а вот для реальных приложений нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот сижу, разбираюсь с ассемблером и смотрю в код который идет от TI. То что писали его скорее всего индусы это понятно.

 

Но проблема в том, что этот код похоже никто никогда не использвал. :)

Т.е. для тестов и бенчмарков он может и сгодиться, а вот для реальных приложений нет.

 

Не реализовав и не измерив производительность С-кода (с интринсинками, конечно) вы уже начали разбираться с ассемблером?!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не реализовав и не измерив производительность С-кода (с интринсинками, конечно) вы уже начали разбираться с ассемблером?!

 

Я с ассемблерами вообще знаком, да и с этим надо знать максимум 6 комманд. Так что ничего сложного.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот сижу, разбираюсь с ассемблером и смотрю в код который идет от TI. То что писали его скорее всего индусы это понятно.

Но проблема в том, что этот код похоже никто никогда не использвал. :)

Т.е. для тестов и бенчмарков он может и сгодиться, а вот для реальных приложений нет.

Все Ваши сообщения говорят о полном непонимании того инструменита, которым пытаетесь воспользоваться.

Вы даже не потрудились прочитать документацию в части интересующей функции. При этом вешаете ярлыки на всех окружающих. Фу так делать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделал я быстрый фир. Заоодно с ассемблером разобрался. :)

Получилось достаточно близко к тому что ожидалось.

 

Все Ваши сообщения говорят о полном непонимании того инструменита, которым пытаетесь воспользоваться.

Вы даже не потрудились прочитать документацию в части интересующей функции. При этом вешаете ярлыки на всех окружающих. Фу так делать.

 

Тут все просто.

Есть DSP и к нему должна быть работающая библиотека, как например у Интела. Если этого нет - это плохо. Библиотека примитивов или то что предлагает TI, это хорошо когда есть громадный запас в мипсах, и в принципе можно писать все на C. Если запаса нет, и процессор предполагается использовать под 90%, вот тут и нужна нормальная библиотека. Или надо выбирать другой, более мощный проц,но тогда либо не надо указывать свои 2400 мегафлоп, либо... Я уже не говорю, что половина ф-й которые написаны на ассемблере не работают в приципе. Т.е. библиотеку можно использовать как пример, но не более того. Тут можно сказать что типа эта библиотека нужна для бенчмарков, но это отговорка.

 

В общем, при всем моем уважении к TI, с которым я работаю уже почти 20 лет, могу сказать что библиотеку под C674x они сделали плохо, хотя сделать ее нормально проблем нет. Бери доку на ipp библиотеку от интела, и повторяй один в один только для float32. Одна ф-я - один день. :)

 

В общем, L138 действительно быстрый процессор, но только его надо уметь программировать. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я с ассемблерами вообще знаком, да и с этим надо знать максимум 6 комманд. Так что ничего сложного.

 

Смешно. Даже очень.

 

Чтобы написать на ЭТОМ ассемблере хоть как-то оптимально работающую функцию, которая бы каждый такт перемножала две пары данных, и аккумулировала их, надо сначала себе весь мозг сломать на программной конвейеризации такого цикла, где данные достаются с задержкой 4 дэлей слота (LDW), а перемножение float*float (MPYSP) имеет задержку три такта от команды до результата... Это же VLIW - надо загрузить процессор так, чтобы он каждый такт исполнял максимальное кол-во операций на всех его юнитах, а это ой как не просто... (даже, если SPLOOP использовать, и то сложно, а без него там без литрухи вообще не разберешься).

 

Кстати, такие простые ф-ции, как FIR-фильтрация, реализовывать надо вообще на С, он конвейеризирует простенькие циклы отменно. А касаемо линий задержки - надо просто использовать циркулярный режим адресации, и реализовывать там ничего не надо, все реализовано в ядре процессора железно. Смещаете указатель на единичку вперед каждый раз, а через "хвост" буфера на начало он будет переворачиваться внутри цикла сам по себе, и это может и стандартная ф-ция из DSPLIB тоже, только правильно подготовить регистр AMR перед вызовом фильтрации - и вот оно чудо, функция превращается в такую, которая работает с линией задержки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть DSP и к нему должна быть работающая библиотека, как например у Интела. Если этого нет - это плохо. Библиотека примитивов или то что предлагает TI, это хорошо когда есть громадный запас в мипсах, и в принципе можно писать все на C.

 

Не могли бы вы для меня конкретизировать, какие именно библиотеки упомянули? (как Intel, так и TI) А то мне, как "библиотекарю" ftp, этот вопрос очень интересен. Только лучше (если, конечно, можно) не словесами ответить, а просто назвать имя файла, содержащего ту или иную библиотеку - этого мне будет достаточно, чтобы понять, о чем идет речь, или навести справки. А вот словесные объяснения очень плохо переводятся в название файла, а потому обычно порождают двумысленности.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...