Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как нормировать амплитуды в целочисленной арифметике?
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
bognev
Добрый день!
Возник вопрос нормировки амплитуды Ci сигналов в 16 каналах. Требуется найти среднее значение AV по 16 каналам и соответсвенно отнормировать сигнал в каждом канале в AV/Ci раз. Возможное отклонение в каналах в 2 раза. Обработка ведется в целочисленной арифметике uint16 на virtex6. Проблема именно в том как домножить значение в канале если AV/Ci от 0 до 2 в целочисленной арифметике?
serjj
Здравствуйте.

Псевдокод (не специалист в псевдокоде, поэтому как есть)
Код
vector [15:0] x;
vector [15:0] y;
vector [15:0] c;
vector [31:0] mult;
...
mult = x * c;
y = mult >> (16-1);


Коэффициент с при этом нормируется на разрядную сетку 16 бит, поэтому он равен 0 ... 65535. Сдвиг на 15 бит вместо ожидаемых логически 16 обеспечит эквивалентный диапазон для с 0 ... 2.

ЗЫ. Ну и чтобы получить нормированный с его можно посчитать как
Код
c  = (AV << 16) / Ci
bognev
Цитата(serjj @ Apr 27 2015, 14:17) *
Здравствуйте.

Псевдокод (не специалист в псевдокоде, поэтому как есть)
Код
vector [15:0] x;
vector [15:0] y;
vector [15:0] c;
vector [31:0] mult;
...
mult = x * c;
y = mult >> (16-1);


Коэффициент с при этом нормируется на разрядную сетку 16 бит, поэтому он равен 0 ... 65535. Сдвиг на 15 бит вместо ожидаемых логически 16 обеспечит эквивалентный диапазон для с 0 ... 2.

ЗЫ. Ну и чтобы получить нормированный с его можно посчитать как
Код
c  = (AV << 16) / Ci


Благодарю за помощь.
Krys
Но возникнет ошибочка (еле заметная правда). Сдвиг даёт изменение на 2^N, а максимальный множитель может быть только 2^N - 1. Т.е. ошибка будет на один шаг квантования. В системах с обратными связями (типа адаптивные) это приведёт к расходимости алгоритма.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.