shtirlitz 0 4 февраля, 2016 Опубликовано 4 февраля, 2016 · Жалоба Здравствуйте, Есть сигнал разрядности 28. Необходимо уменьшить разрядность сигнала до разрядности 14, так сказать масшабирование. Обрезание младших разрядов уменьшает динамический диапазон. Читал, что вычисление экспоненты и нормализация это то, что мне нужно. Но как реализовать я не понял. Может есть пример какой на VHDL? Да и вообще интересует алгоритм уменьшения разрядности с N до M разрядов, где N>M. Заранее благодарен. Вот ответ, который я нашел на форуме, но до конца не понятно, какую разрядность меняют на какую, везде 16 бит. В общем, не понятно. это называется аппроксимация логарифма, или, по-другому, вычисление экспоненты и нормализация. Для знакового числа как-то примерно так. В exp получите инверсную экспоненту, а в norm_out нормализованное число, где в 15-ом бите знаковый, а в 14-ом всегда старший значащий бит: always @* if ( (&in[15:0] ) | (!(|in[15:0]))) exp <= 4'hf; else if ( (&in[15:1] ) | (!(|in[15:1]))) exp <= 4'he; else if ( (&in[15:2] ) | (!(|in[15:2]))) exp <= 4'hd; else if ( (&in[15:3] ) | (!(|in[15:3]))) exp <= 4'hc; else if ( (&in[15:4] ) | (!(|in[15:4]))) exp <= 4'hb; else if ( (&in[15:5] ) | (!(|in[15:5]))) exp <= 4'ha; else if ( (&in[15:6] ) | (!(|in[15:6]))) exp <= 4'h9; else if ( (&in[15:7] ) | (!(|in[15:7]))) exp <= 4'h8; else if ( (&in[15:8] ) | (!(|in[15:8]))) exp <= 4'h7; else if ( (&in[15:9] ) | (!(|in[15:9]))) exp <= 4'h6; else if ( (&in[15:10] ) | (!(|in[15:10]))) exp <= 4'h5; else if ( (&in[15:11] ) | (!(|in[15:11]))) exp <= 4'h4; else if ( (&in[15:12] ) | (!(|in[15:12]))) exp <= 4'h3; else if ( (&in[15:13] ) | (!(|in[15:13]))) exp <= 4'h2; else if ( (&in[15:14] ) | (!(|in[15:14]))) exp <= 4'h1; else exp <= 4'h0; wire [15:0] norm_out = in << exp; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 4 февраля, 2016 Опубликовано 4 февраля, 2016 · Жалоба Здравствуйте, Есть сигнал разрядности 28. Необходимо уменьшить разрядность сигнала до разрядности 14, так сказать масшабирование. Обрезание младших разрядов уменьшает динамический диапазон. Читал, что вычисление экспоненты и нормализация это то, что мне нужно. Но как реализовать я не понял. Может есть пример какой на VHDL? Да и вообще интересует алгоритм уменьшения разрядности с N до M разрядов, где N>M. Заранее благодарен. Вот ответ, который я нашел на форуме, но до конца не понятно, какую разрядность меняют на какую, везде 16 бит. В общем, не понятно. источник сигнала разрядности 28 ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shtirlitz 0 4 февраля, 2016 Опубликовано 4 февраля, 2016 · Жалоба источник сигнала разрядности 28 ? Да, 28. Но хотелось бы узнать алгоритм, чтобы любые разрядности можно было использовать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 4 февраля, 2016 Опубликовано 4 февраля, 2016 · Жалоба Да, 28. Но хотелось бы узнать алгоритм, чтобы любые разрядности можно было использовать. имелось ввиду с какого модуля приходит этот сигнал и опишите его функцию. с КИХ фильтра? Без понимания откуда данные приходят и для чего они нужны, навряд ли можно что-то вменяемое придумать кроме "обрезания/укорачивания разрядности" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shtirlitz 0 4 февраля, 2016 Опубликовано 4 февраля, 2016 · Жалоба Пример такой, АЦП 14 бит, фильтрация, бпф, на выходе бпф 29 бит, далее мультиплексное перемножение реальной и мнимой части с вычислением корня (амплитудный спектр). Разрядность амплитудного спектра необходима меньше, чем 29 бит, нужно 16 бит. На каком-то этапе необходимо сделать масшабирование. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 4 февраля, 2016 Опубликовано 4 февраля, 2016 · Жалоба Пример такой, АЦП 14 бит, фильтрация, бпф, на выходе бпф 29 бит, далее мультиплексное перемножение реальной и мнимой части с вычислением корня (амплитудный спектр). Разрядность амплитудного спектра необходима меньше, чем 29 бит, нужно 16 бит. На каком-то этапе необходимо сделать масшабирование. после каждого модуля фильтров - приводить разрядность к 16 (например).... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shtirlitz 0 4 февраля, 2016 Опубликовано 4 февраля, 2016 (изменено) · Жалоба после каждого модуля - приводить разрядность к 16 (например).... Так потеряю весь динамический диапазон, если буду приводить разрядность к 16 откидыванием младших разрядов. Шумы вообще не видны в данном случае, т.к. обрезаются младшие разряды ацп. Фактическое значение сигналов мне не нужно, нужно относительное, как бы в процентах, где 29 разрядов и где 16 разрядов. Т.е. если сигнал при разрядности 29 бит составляет 60% или 10% от максимального значения, то и при 16 разрядах он тоже должен составлять 60% или 10% соответственно. Изменено 4 февраля, 2016 пользователем shtirlitz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 4 февраля, 2016 Опубликовано 4 февраля, 2016 · Жалоба Т.е. если сигнал при разрядности 29 бит составляет 60% или 10% от максимального значения, то и при 16 разрядах он тоже должен составлять 60% или 10% соответственно. выбрать какие-то средние 16 бит из 29 бит, чтобы выполнялось Ваше условие, не получается? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shtirlitz 0 4 февраля, 2016 Опубликовано 4 февраля, 2016 · Жалоба выбрать какие-то средние 16 бит из 29 бит, чтобы выполнялось Ваше условие, не получается? Выбирая средние - обрезаешь максимальные и минимальные значения сигнала, хотя минимальные в меньшей степени, чем если обрезать только младшие разряды. Постараюсь объяснить на примере: возьмем синусоиду с амплитудой от 0 до 255 это 8 разрядов для амплитуды. Если выбрать средние биты, например со 2го по 6ой, то обрежем максимумы и минимумы синусоиды. А мне нужно уменьшить диапазон амплитуды синусоиды, например от 0 до 112 с сохранением закона изменения синусоиды. Если обрежем только младшие, то минимумы исчезнут (в минимумах будет постоянное значение). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ilkz 0 4 февраля, 2016 Опубликовано 4 февраля, 2016 · Жалоба Может можно просто умножить на K<1? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kapsik 0 4 февраля, 2016 Опубликовано 4 февраля, 2016 (изменено) · Жалоба Выбирая средние - обрезаешь максимальные и минимальные значения сигнала, хотя минимальные в меньшей степени, чем если обрезать только младшие разряды. Постараюсь объяснить на примере: возьмем синусоиду с амплитудой от 0 до 255 это 8 разрядов для амплитуды. Если выбрать средние биты, например со 2го по 6ой, то обрежем максимумы и минимумы синусоиды. А мне нужно уменьшить диапазон амплитуды синусоиды, например от 0 до 112 с сохранением закона изменения синусоиды. Если обрежем только младшие, то минимумы исчезнут (в минимумах будет постоянное значение). Отбрасывая младший бит вы делите двоичное число на два. Появится погрешность, но закон изменения никуда не денется. Если была прямая построенная по точкам 8 16 32 64, то отбросив бит, получим 4 8 16 32, прямая идет по тому же закону. При отбрасывании рекомендую округлять, добавляя к тому что осталось старший бит из отбрасываемых. Погрешность будет появятся, но куда без погрешности если уменьшается разрядность числа. Изменено 4 февраля, 2016 пользователем Kapsik Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shtirlitz 0 4 февраля, 2016 Опубликовано 4 февраля, 2016 · Жалоба Уменьшая с 28 бит до 14 бит, нужно отбросить 14 младших разрядов, а это от 0 до 16383 удаляется, у меня все шумы в этом диапазоне. Если речь идет об 1, 2, 3х разрядах, то да, проще отбросить и все. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость TSerg 4 февраля, 2016 Опубликовано 4 февраля, 2016 · Жалоба Пример такой, АЦП 14 бит, Если у Вас линейный АЦП на N-разрядов, то динамический диапазон DR = 20*Lg(2^N) = 84 дБ при N=14. И хоть тресни, сколь-либо значительно его увеличить не получится. Выполнять надо не логарифмирование после получения кода, а в процессе получения кода, т.е. использовать логарифмический АЦП, либо делать логарифмическую предкоррекцию аналогового сигнала. Да, можно делать статистическую обработку (фильтрацию) и псевдо-увеличивать DR, но для этого надо повышать частоту семплирования и все равно останутся вопросы по спектру полезного сигнала. В идеале +1 bit == 4 * Fsampling Как только доходим до некоторого техно-экономического предела повышения Fs, далее - только метод накопления при соответствующем понижении эффективной Fs. Тут подробнее: MT_003.pdf А так, Ваши 28-29 бит из 14-ти - даром никому не нужны. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bad0512 2 4 февраля, 2016 Опубликовано 4 февраля, 2016 · Жалоба Если у Вас линейный АЦП на N-разрядов, то динамический диапазон DR = 20*Lg(2^N) = 84 дБ при N=14. И хоть тресни, сколь-либо значительно его увеличить не получится. Если просто брать сигнал с АЦП, то да, не получится. А если сузить полосу (у ТС речь идёт про БПФ, например) то можно неплохо динамику увеличить за счёт накопления (сужение полосы в 2 раза = +3дБ). Думаю, автору стОит подумать о переводе в формат плавающей точки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость TSerg 4 февраля, 2016 Опубликовано 4 февраля, 2016 · Жалоба Задача обработки в тракте "аналог-цифра" всегда комплексная, исходя из четко сформулированных требований к результату и знания входных параметров. Тут не поспоришь. Думаю, автору стОит подумать о переводе в формат плавающей точки. Это не принципиальный вопрос. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться