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

Подбор коэффициентов к FIR

И что? Никакого шума к сигналу проходящему через фильтр это не добавляет. Покажите источник шума. Покажите непроходимую границу между умножением на число, где вы соглашаетесь что шума нету, и фильтром.

Источник шума - квантователь. Если мы возмем любой учебник по аналого-цифровой обработке сигналов и посмотрим как определяются шумы квантования, то увидим -20*log(2^N) дБ

Не знаю, как на пальцах объяснить, но попробую.

Возмем для примера такие коэффициенты: 10101.0101b (неокругленный коэффициент) и 10101.0000b (округленный коэффициент), и умножим их на 1.0000b (входное число), в лучшем случае мы должны были получить после умножителя 10101.0101b, а за счет округления получили 10101.0000, небольшая разница - 0.0101 (шум)

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


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

Я не говорю, что у числа есть сигнал-шум.

...

И правильно. А чем К фильтра отличается от числа?

Теперь посчитайте, какая разница (еще раз повторяю в общем случае) будет между арифметикой с плавающей точкой (double если так будет угодно) и целочисленной, скажем 16 бит, 14 бит, 12 бит и т.д.

Разница будет. Но будет она в степени приближения К к теоретически посчитанному. И выразится не в С/Ш выходного сигнала, а в степени приближения результирующей АЧХ к образцовой. А это очень разные вещи. 8-р коэффициентов может вполне хватить для выполнения ТЗ, хотя данные могут быть и 24р.

Я согласен, есть достаточно большой класс фильтров, дающих при ограниченной разрядности неплохое внеполосное подавление (тот же CIC фильтр, о котором Вы все пытаетесь сказать), но это все частные случаи.

Речь идёт не о "неплохом", а о требуемом. И не о классах фильтров, а о фильтрах вообще. При длине ФИР меньше 20-30, например, очень часто можно пользовать 8-р К. Практически без потери качества АЧХ. Некоторые этим пользуются. ;О)

 

Источник шума - квантователь. Если мы возмем любой учебник по аналого-цифровой обработке сигналов и посмотрим как определяются шумы квантования, то увидим -20*log(2^N) дБ

Не знаю, как на пальцах объяснить, но попробую.

Возмем для примера такие коэффициенты: 10101.0101b (неокругленный коэффициент) и 10101.0000b (округленный коэффициент), и умножим их на 1.0000b (входное число), в лучшем случае мы должны были получить после умножителя 10101.0101b, а за счет округления получили 10101.0000, небольшая разница - 0.0101 (шум)

;О).То, что вы тут понаписали - округление-усечение в АСС. Оно будет, что при 24р что при 8р коэффициентах. И выразится в тех-же 1ЛСБ при усечении и 1/2ЛСБ при округлении. Просто при 24р вы вынуждены "откусить" результат "выше". Принципиальной разницы нет. В шумах, ессно.

Разница будет только в приближении реальной АЧХ к образцовой.

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


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

Возмем для примера такие коэффициенты: 10101.0101b (неокругленный коэффициент) и 10101.0000b (округленный коэффициент), и умножим их на 1.0000b (входное число), в лучшем случае мы должны были получить после умножителя 10101.0101b, а за счет округления получили 10101.0000, небольшая добавочка - 0.0101 (шум)

 

Доказываете что умножение на число вносит шум...

Ни в первом случае ни во втором никакого шума при умножении не вносится. Будем иметь два сигнала по разному промасштабированые.

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


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

Данные и коэфф у меня изначально 16 бит. Умножитель 18x18. Ессно всё расширяю до 18 бит и после умножения, конечно - 36
Нуёмаё, ещё раз повторяю: не надо ничего расширять! Какая разрядность есть у числа, ту и умножайте.

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


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

Разница будет. Но будет она в степени приближения К к теоретически посчитанному. И выразится не в С/Ш выходного сигнала, а в степени приближения результирующей АЧХ к образцовой. А это очень разные вещи. 8-р коэффициентов может вполне хватить для выполнения ТЗ, хотя данные могут быть и 24р.

Да, хороший мозговой штурм получается, даже автору вопроса не успеваю отвечать. Перейдем к более сложным примерам. Попробуйте синтезировать некоторый ФНЧ с коэффициентом усиления = 1 и ограничить его по разрядности. Далее подайте чистый синусоидальный сигнал (в плавающей арифметике) на этот фильтр с такой частотой, чтобы сигнал попал в полосу фильтра. С учетом того, что изначально фильтр мы брали с коэффициентом усиления = 1 (можно даже специально так рассчитать фильтр, чтобы на нужной частоте фильтр имел коэффициент передачи точно равный 1) и он идеальный (вообще без всяких шумов), то на выходе мы должны получить точно такой же сигнал, с точно такой же мощностью. Понятно, что ограничение разрядности коэффициентов фильтра приведет к некоторому искажению нашего сигнала, не говоря уже об искажении АЧХ. Это и есть ухудшение отношения сигнал-шум. Приведите мне пожалуйста аналитическую формулу, которая показала бы (для общего случая), на сколько ухудшиться сигнал на выходе фильтра. И потом, ради эксперимента, попробуйте уменьшить разрядность коэффициентов до 5, 4, 3, 2. Для того примера, что я привел, посчитать будет несложно - мощность шума будет равна разности входной и выходной мощности сигнала.

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


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

Да, хороший мозговой штурм получается

...

;О) Предположим, у нас посчитан ФИР с К:

128765

150071

194775

150071

128765

он обладает некоей АЧХ. Мы округляем К:

129

150

195

150

129

чем фильтр с такими К они будут отличаться от:

129000

150000

195000

150000

129000

? ;О) Кроме того, что результат АСС придётся округлять по уровню "+3 порядка".

Два нижних фильтра будут близнецы-братья и отличаться от первого в абс. равной степени.

Это будут просто 2 разных фильтра(первый и вторые ;О) и все "шумовые" свойства у них будут одинаковы.

Ваш пример я даже считать не буду. Потому как знаю наперёд, что сумма произведений констант равна константе. С нулевым шумом. ;О) Даже если её усекать-округлять.

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


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

Признаю свою ошибку, спасибо Всем за помощь. Подтверждаю, ограничение разрядности коэффициентов приведет к искажению АЧХ.

Предлагаю всем помочь автору разобраться с его вопросами. :beer:

 

Я очень самокритичен, прошу модератора сдвинуть мой уровень репутации на один уровень ниже. :)

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


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

Нуёмаё, ещё раз повторяю: не надо ничего расширять! Какая разрядность есть у числа, ту и умножайте.

 

Нуёмаё, ещё раз повторяю: :) я на либовский эл-ет mult18x18 подаю сигналы и как тут не расширять ???

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


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

Нуёмаё, ещё раз повторяю: :) я на либовский эл-ет mult18x18 подаю сигналы и как тут не расширять ???
Зачем либовский??? Всё намного проще. Смотрите пост №20.

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


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

Зачем либовский??? Всё намного проще. Смотрите пост №20.

 

Хорошо, тогда 16х16 получим 32 бита, как снять правильно 16 бит. (31 downto 16) ?

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


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

Хорошо, тогда 16х16 получим 32 бита, как снять правильно 16 бит. (31 downto 16) ?

Сдвинуть. Или описать, типа "res_FIR (15 dowto 0)=res_MAC(31 downto 16)"

Ну это на "ВХДЛ для домохозяек". ;О)

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


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

Хорошо, тогда 16х16 получим 32 бита, как снять правильно 16 бит. (31 downto 16) ?

Естественно, вы берете старшие разряды произведения. Если не возникает ситуация, когда могут умножиться два минимальных числа, то (30 downto 15)

Это усечение. Если оно вас устраивает, то делайте так. Если не устраивает, то надо делать округление. Про него в этой теме писали выше.

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


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

для автора вопроса

 

Очень Вам рекомендую разобраться в представлении чисел с фиксированной двоичной точкой, Ваш вопрос вызван именно этим... Достаточно подробно это изложено в книжке про ADSP процессоры ( по крайней мере мне понравилось как там это описано) http://www.analog.com/UploadedFiles/Associ...dsp2100vol1.zip (есть и перевод этой книжки на русский)

Кстати, это Вам поможет, если Вы надумаете использовать, например, FIR Compiler

Изменено пользователем IgorL

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


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

Допустим Вы домножали свои коэффициенты на 2^N, и после такого домножения получилось, что коэффициенты вписались в 16-разрядную сетку. Предположим, что входные данные - 18 бит, выходные - 20 бит (я специально взял разное количество разрядов). Тогда после умножителя необходимо брать 18+16 разрядов и подавать на аккумулятор разрядностью 18+16+log2(64)=18+16+6=40 (нужную разрядность получаем дополнением). С выхода этого аккумулятора необходимо снимать разряды с 16+(N-16)-(20-18) по 16+(N-16)+18-1.

Если быть более точным, то дополнительная разрядность аккумулятора должна быть не log2(64), а N-16 (не стоит забывать, что я предполагал коэффициент усиления фильтра, полученный в Матлабе или какой-либо другой программе, равным 1).

Напоследок напоминаю, что данные необходимо округлять, а не отсекать.

 

Хотелось бы уточнить: повторюсь немного - коэфиициенты у меня - матлабовские, умноженные на 2^15 (16 бит, реально, но расширенный до 18, так как mult18x18). Отсчёт тож 16 - битный (реально)?, но так же расширенные до 18. Но с выхода acc нужно снять 16 бит (т.е. конечный результат).

1. Далее я умножаю отсчёт 16-бит на некторое число (тож 16), но на умножителе 18x18, так что два числа расширяю до 18, получаю 36 бит и и гоню в tap'ы биты (31 downto 14), т.е. 18 бит. Так ?

2. Потом из tap'a значение у множаю на коэфф, реально 16 бит, но расширенных до 18.

3. Ну и в аккумулятор. Так вопрс - как в моём случае рассчитать длину и биты съёма аккумулятора. Для рассчёта брать реальное кол-во бит (16, 32 либо 18, 36):

 

3(а) Реальное к-во бит:

длина acc = 18 + 18 + log2(64) = 42;

Ну и съёмные биты: 18 + (15-18)-(18+18) = 15 и того (30 downto 15).

18 здесь, т.к. после умножения коэф и тапа беру из 36 бит (31 downto 14)

4(a) Теперь с расширенными битами:

длина acc = 36 + 36 + 6 = 78

съёмные биты: 36 + (15-36)-(36+36) = 57 и того (73 downto 57).

 

Я ессно скклоняюсь к варианту 3(a). Что посоветуете ?

Или вообще пользовать тока 16 бит т.е. на mlt18x18 2 16 бит, снимаю (31 downto 15), далее в тапы там расширяю до 18 умножаю на 18 битный коэф и в acc гоню опять (31 downto 15) ???

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


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

У меня к сожалению нет опыта преподавания, не знаю как правильно объяснить. Перед тем, как приступать к умножению, рекомендую на время забыть об умножителе 18x18 и внимательно изучить следующие вопросы:

1) Представление числа в дополнительном коде

2) Преобразование дополнительного кода

3) Знаковое расширение

4) Арифметические операции: сложение и вычитание

5) Умножение

 

Есть очень хороший справочник Л.М.Гольденберг, Б.Д.Матюшкин, М.Н.Поляк "Цифровая обработка сигналов" / Глава 3 Эффекты квантования сигналов в цифровых фильтрах стр.82-стр.109 http://referatik.com.ua/zip/textbook/gold.djv

Объяснить лучше, чем написано в этой книге, я не могу.

 

На английском языке, все это можно прочитать на wikipedia.org

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


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

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

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

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

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

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

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

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

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

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