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

Реализация КИХ фильтра VHDL

У меня другой вопрос, написал фильтр на verilog. Регистр сдвига сделан на двухпортовой памяти, коэффициенты так же хранятся в двухпортовой памяти.

Количество коэффициентов, TAPS = 120.

Входные данные и коэффициенты имеют разрядность = 32. Какую разрядность должен иметь MAC? И как правильно сделать усечение для получения 32 битного результата на выходе.

 

P.S. Максимальная разрядность MAC расчитывается (разр. коэфф. + разрядность входа) + log2(TAPS) ??? У меня сделано так, на выход подаю старшие 32 бита MAC. В итоге имею на выходе фильтра дрейфующую в небольших пределах постоянку. Как победить?

Найти информацию по теме "реализация деления знаковых целых чисел на степень двойки". Можно и самостоятельно понять суть проблемы : берёте отрицательное 16-разрядное число, отбрасываете у него 8 младших разрядов, затем сравниваете полученное число с исходным, поделённым на 256 на калькуляторе... Думаете... Объясняете полученные результаты... Пишите код. Всё.

 

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


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

Найти информацию по теме "реализация деления знаковых целых чисел на степень двойки". Можно и самостоятельно понять суть проблемы : берёте отрицательное 16-разрядное число, отбрасываете у него 8 младших разрядов, затем сравниваете полученное число с исходным, поделённым на 256 на калькуляторе... Думаете... Объясняете полученные результаты... Пишите код. Всё.

Не совсем понял вас. Как делить на степерь двойки я знаю. Есть 120 коэффициентов, при перемножении коэффициентов с максимальным уровнем входного сигнала на выходе каждого умножителя разрядная сетка будет скакать в пределах 32...64 бита (зависит от конкретного коэффициента фильтра), потом эти значения попадают на сумматор, на котором тоже увеличивается разрядная сетка. Вот собственно вопрос, как правильно сделать усечение на выходе, чтобы использовать максимально разрядную сетку? Так как не всегда старшие биты сумматора будут нести информацию.

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


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

Не совсем понял вас. Как делить на степерь двойки я знаю. Есть 120 коэффициентов, при перемножении коэффициентов с максимальным уровнем входного сигнала на выходе каждого умножителя разрядная сетка будет скакать в пределах 32...64 бита (зависит от конкретного коэффициента фильтра), потом эти значения попадают на сумматор, на котором тоже увеличивается разрядная сетка. Вот собственно вопрос, как правильно сделать усечение на выходе, чтобы использовать максимально разрядную сетку? Так как не всегда старшие биты сумматора будут нести информацию.

хмм, ну как бы

1. усиление фильтра посчитать

2. правила округления вспомнить

 

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


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

Не совсем понял вас. Как делить на степерь двойки я знаю. Есть 120 коэффициентов, при перемножении коэффициентов с максимальным уровнем входного сигнала на выходе каждого умножителя разрядная сетка будет скакать в пределах 32...64 бита (зависит от конкретного коэффициента фильтра), потом эти значения попадают на сумматор, на котором тоже увеличивается разрядная сетка. Вот собственно вопрос, как правильно сделать усечение на выходе, чтобы использовать максимально разрядную сетку? Так как не всегда старшие биты сумматора будут нести информацию.

Вы уж определитесь чего вам больше хочется - использовать разрядную сетку МАКСИМАЛЬНО - тогда вообще ничего усекать нельзя (любое усечение по определнию снижает точность представления) ,

или всё-таки "правильно сделать усечение". Именно про этот второй пункт я вам и намекал. Нельзя просто отбрасывать младшие разряды, следствие этого - та самая мелкая постоянка на выходе фильтра.

Чтобы усекать правильно, надо как минимум одинаковым образом усекать как положительные, так и отрицательные числа. Ну а способов тут несколько, подумайте сами и выбирайте наиболее вам подходящий.

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


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

Когда-то такой прогой пользовался. На малых скоростях должна работать.

ps. clk в несколько раз больше частоты дискретизации, в зависимости от размера фильтра.

Filter.rar

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


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

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

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

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

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

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

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

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

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

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