
- •Эффекты квантования в цифровых системах Литература:
- •Цели занятия:
- •Эффекты квантования в цифровых системах
- •Форматы представления чисел
- •Представление отрицательных чисел
- •Формат с фиксированной запятой
- •Формат с плавающей запятой
- •Процесс квантования
- •Шум квантования
- •Неравномерное квантование
- •Эффекты квантования в цифровых фильтрах
- •Квантование коэффициентов цифровых фильтров
- •Масштабирование коэффициентов цифровых фильтров
- •Переполнение разрядной сетки в процессе вычислений
- •16.7. Входной и выходной сигналы фнч Баттерворта (сверху) и промежуточные результаты суммирования (снизу)
- •Округление промежуточных результатов вычислений
- •Предельные циклы
- •Учет эффектов конечной точности вычислений в matlab
- •Функции квантования
- •Функция uencode
- •Функция udecode
- •Функция quantiz
- •Функция lloyds
- •Функции пакета расширения Filter Design
- •Квантователи
- •Квантованные фильтры
- •Анализ предельных циклов
- •Анализ квантованного фильтра методом шумовой нагрузки
- •Расширение программы fdatool
- •Квантованное бпф
- •Шум квантования.
- •Влияние округления коэффициентов цифровых фильтров.
Формат с фиксированной запятой
Название «формат с фиксированной запятой» означает, что в двоичном представлении дробного числа для хранения его целой и дробной частей отведено фиксированное число разрядов. Иными словами, запятая, разделяющая целую и дробную части в двоичном представлении числа, находится на фиксированном месте.
Часто формат с фиксированной запятой обозначают парой целых чисел: M.N. В большинстве случаев (об одном из исключений будет сказано далее) М обозначает число разрядов целой части числа (включая знак), а N - число разрядов дробной части. Этот способ обозначения широко распространен в литературе по цифровой обработке сигналов.
Достоинствами формата с фиксированной запятой являются равномерность квантования и простота реализации арифметических операций; главный недостаток - ограниченный динамический диапазон. Динамическим диапазоном называют отношение между самым большим и самым малым по модулю (но отличным от нуля) числами, которые можно представить с помощью данного формата. Для формата с фиксированной занятой это отношение равно 2M-1 - 1.
Формат с плавающей запятой
Числа
в формате с плавающей запятой (иногда
его называют ещё экспоненциальным
форматом
или научной
нотацией) представляются
в виде
,
где
- мантисса
(mantissa),
a
-
порядок (exponent).
Обычно мантисса представляется
в формате с фиксированной запятой, а
порядок является целым числом.
Поскольку в экспоненциальной форме записи числа присутствуют два параметра, такое представление оказывается неоднозначным. Приведем простой пример
Чтобы устранить
эту неоднозначность,
принято
ограничивать диапазон допустимых
значений мантиссы, например, так:
,
или так:
(этот вариант используется наиболее
часто). Процедура приведения мантиссы
к допустимому диапазону называется
нормализацией,
а экспоненциальная
запись числа, удовлетворяющая указанным
ограничениям, - нормализованной
экспоненциальной
формой.
Нормализация мантиссы позволяет сэкономить один разряд в ее двоичном представлении. Действительно, если нормализованная мантисса лежит в диапазоне [0,5;1], то ее двоичная запись имеет вид «0,1...», а если для нормализации используется диапазон [1, 2], двоичная запись будет выглядеть как «1,...». В обоих случаях заранее известно, что первый значащий разряд равен единице, поэтому его можно не хранить. Иногда это называется использованием неявного старшего бита.
Для представления отрицательных чисел необходимо обеспечить возможность представления отрицательных значений мантиссы. Как правило, для этого используется прямой код (см. ранее раздел «Представление отрицательных чисел»), то есть модуль мантиссы и знаковый бит хранятся независимо.
Использование строго нормализованной мантиссы делает невозможным представление нулевого значения в формате с плавающей запятой. Поэтому используется специальное соглашение о том, что число, содержащее нули во всех разрядах мантиссы и порядка, считается нулем. Знаковый разряд при этом может иметь любое значение. Таким образом, имеется два представления нуля — «положительный нуль» и «отрицательный нуль».
Об этом уже говорилось ранее В разделе «Представление отрицательных чисел».
Чтобы использование данного соглашения для представления нуля не привело к возникновению «дырки» в наборе представимых чисел, нулевое представление порядка должно соответствовать не пулевому, а минимально возможному (то есть отрицательному) его значению. Поэтому для представления порядка чисел с плавающей запятой используется смещенный код (см. ранее раздел «Представление отрицательных чисел»).
ЗАМЕЧАНИЕ _____________________________________________________________
Если бы порядок хранился, например, в дополнительном коде, число, имеющее нули во всех разрядах мантиссы и порядка, формально равнялось бы единице, и замена его на нуль привела бы к невозможности представления единичного значения, что явно неприемлемо.
Итак, для представления нулевого значения в формате с плавающей запятой мантисса неминуемо должна быть денормализованной. Однако если использовать денормализованную мантиссу только для представления нуля, малые по модулю числа, представимые в данном формате, оказываются расположены неравномерно — вокруг нуля появляется «мертвая зона», размер которой существенно превышает расстояние между ближайшими к нулю представимыми числами.
Чтобы решить эту проблему и сделать расположение представимых чисел вблизи нуля равномерным, применяют следующее соглашение о денормализации: если все ряды порядка имеют нулевые значения, то величина порядка увеличивается на единицу, а мантисса считается денормализованной, то есть содержащей в неявном старшем бите нуль, а не единицу. Это позволяет расширить возможности представления малых по модулю чисел. Фактически в данном случае мы увеличиваем диапазон возможных отрицательных порядков за счет сокращения числа значащих цифр мантиссы.
Поясним сказанное на примере, рассмотрев 6-битовый формат с плавающей запятой, в котором отведено 2 бита для хранения порядка и 3 - для хранения мантиссы. Биты двоичного представления числа, таким образом, имеют следующее назначение: seemmm
Здесь
- знаковый бит,
- биты порядка,
- биты мантиссы. Рассчитаем и покажем
на графике (рис.16.1) все числа, которые
можно представить в данном формате без
использования и с использованием
денормализации мантиссы для малых
чисел.
без использования (сверху) и с использованием (снизу) соглашения
о денормализации мантиссы для малых чисел
Соответствующие вычисления можно осуществить с помощью следующей MATLAВ- программы:
% первый вариант денормализация только для нуля
for k = 0:63 % перебор всех возможных представлений
s = 1 - 2 * bitget(k, 6); % знаковый множитель
e = bi2de(bitget(k, 4:5))-1; % порядок
m = 1 + bitand(k, 7) / 8; % мантисса
if 0==bitand(k, 31) % нуль - особый случай
f(k+1)=0;
else
f(k+1)=s*m*(2^e);
end
end
subplot(2, 1, 1)
title('денормализация только для нуля');
plot(f, f*0, '.')
% второй вариант - денормализация для малых по модулю чисел for k = 0:63
for k=0:63 % перебор всех возможных представлений
s = 1 - 2 * bitget(k, 6); % знаковый множитель
e = bi2de(bitget(k, 4:5)); % смещенный порядок
if e == e-1 % истинный порядок
m = 1 + bitand(k, 7) / 8; % нормализованная мантисса
else % нули в поле порядка - не нормализуем мантиссу
m = bitand (k, 7) / 8; % денормализованная мантисса
end
f(k+1)=s*m*(2^e);
end
subplot(2, 1, 2)
title('денормализация для малых по модулю чисел');
plot(f, f*0, '.')
Сравнение двух графиков рис.16.1 наглядно демонстрирует, как денормализация мантиссы влияет на возможности представления малых по модулю чисел.
ЗАМЕЧАНИЕ _____________________________________________________________
В приведенном листинге использованы следующие функции MATLAB: bitget - возвращает биты с- заданными номерами на двоичного представления целого неотрицательного числа; bitand выполняет побитовую логическую операцию «И» над неотрицательными целыми числами; bi2de - преобразует вектор, состоящий из нулей и единиц, трактуя его как запись числа и двоичной системе счисления.
В заключение данного раздела приведем сведения о форматах c плавающей запятой, поддерживаемых процессорами персональных компьютеров:
формат с одинарной точностью (single в языке Pascal, float в языке С) — 32 бита, включающие знаковый разряд, 8 бит порядка и 23 бита мантиссы;
формат с двойной точностью (double в языках Pascal и С) — 64 бита, включающие знаковый разряд, 11 бит порядка и 52 бита мантиссы. Это основной формат хранения данных в MATLAB;
формат с расширенной точностью (extended в языке Pascal, long double в языке С) - 80 бит, включающих знаковый разряд, 15 бит порядка и 64 бита мантиссы. В отличие от двух предыдущих форматов, здесь не используется неявный старший бит мантиссы.
Формат с плавающей запятой за счет экспоненциального представления чисел обладает существенно большим динамическим диапазоном, чем формат с фиксированной запятой при той же длине слова. Однако платой за это является неравномерность квантования и повышенная сложность реализации арифметических операций.