exponenta event banner

Как использовать оптимизированный ЛПВП нормализованный возвратно-поступательный

В этом примере показано, как и когда использовать normalizedReciprocal функция и блок оптимизации нормализованного возвратно-поступательного ЛПВП для вычисления нормализованного возвратно-поступательного сигнала входного сигнала.

Обратное значение значения может иметь большой диапазон, а типы с фиксированной точкой имеют ограниченный диапазон по сравнению с типами с плавающей точкой. Если входное значение u мал, то 1/u велик, а если u велик, то 1/u мал. Поэтому тип с фиксированной точкой для 1/u должен иметь высокую точность и большой диапазон, что требует большой длины слова.

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

Расчет нормализованного возвратно-поступательного

Ввод данных u, Нормализованный взаимный вычисляет нормализованный взаимный, yи экспонента, e, такой, что

       (2.^e).*y = 1./u,

и

       0.5 < |y| <= 1.

Если u = 0 и u является фиксированной точкой или масштабированной двойной точкой, затем y = 2 - eps(y).

Если u = 0 и u является типом с плавающей запятой, то y = inf.

Если u~=0, эта функция возвращает эквивалент

      [y,e] = log2(1./abs(double(u)))
      y(u<0) = -y(u<0)

за исключением того, что он вычисляется только с использованием сдвигов и добавлений.

Выберите функцию MATLAB или блок Simulink

Для генерации кода C и проектирования системы используйте функцию MATLAB. normalizedReciprocal. Эта функция не вычисляется с задержкой. Для моделирования скомпилировать функцию в файл MEX для ускорения с помощью fiaccel, buildInstrumentedMex, или codegen.

Для создания оптимизированного кода HDL используйте Normalized Reciprocal HDL Optimized блок. Этот блок оптимизирован для высокой пропускной способности и малой площади в ЛПВП и моделируется с одинаковой задержкой, присутствующей в сгенерированном коде ЛПВП.

Блок и функция производят одинаковые числовые выходы.

Вычисление нормализованного возвратно-поступательного движения с помощью MATLAB

Вычислите нормализованную обратную величину ввода с фиксированной точкой, u, затем сравнить это значение с фактическим значением обратного.

u = fi([-pi,0.01,pi])
u = 

   -3.1416    0.0100    3.1416

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 13
[y,e] = normalizedReciprocal(u)
y = 

   -0.6367    0.7806    0.6367

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 14

e =

  1x3 int32 row vector

   -1    7   -1

computed_reciprocal = 2.^double(e).* double(y)
computed_reciprocal =

   -0.3183   99.9141    0.3183

actual_reciprocal = 1./double(u)
actual_reciprocal =

   -0.3183   99.9024    0.3183

Можно видеть, что нормализованные обратные и фактические обратные близки по значению.

Определение входных данных для модели Simulink

Определите ввод с фиксированной точкой, u, для получения нормализованного возвратно-поступательного использования блока нормализованного возвратно-поступательного HDL Optimized.

x = linspace(0.001,100,100);
x = [fliplr(-x),x];
u = fi(x,1,18);

Задержка оптимизированного блока нормализованного возвратно-поступательного HDL

Блок Normalized Feateral HDL Optimized работает, нормализуя вход с помощью двоичного поиска, который имеет задержку приблизительно log2 длины слова входа, за которым следует обратное ядро CORDIC, которое имеет задержку приблизительно такую же, как длина слова входа.

Нормализованный блок оптимизации обратной ЛПВП всегда готов к приему данных. После начальной задержки действительные выборки выводятся на каждую выборку. Задержка в выборках для ввода с фиксированной точкой u является

       D = ceil(log2(u.WordLength)) + u.WordLength + 5

Можно использовать функцию normalizedReciprocalLatency, включенной в этот пример, для вычисления задержки для входов с фиксированными точками, двойными или одиночными числовыми типами.

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

D = normalizedReciprocalLatency(u)
D =

    28

Запуск нормализованной модели взаимных симуляций

В качестве простого примера, где известен диапазон произведения обратной и другой переменной, вычислите нормализованное обратное значение и умножьте его на себя, поэтому конечное произведение должно быть равно единице. Даже если входное значение и обратное имеют большие диапазоны, произведение значения и его обратное имеют известный диапазон.

Обратите внимание, что продукт u*y может быть вычислен тем же типом, что и u потому что 0.5 < abs(y) <= 1и, таким образом, продукт не растет больше по величине.

model = 'NormalizedReciprocalModel';
open_system(model)
out = sim(model);

Анализ результатов нормализованной модели взаимных симуляций

На следующих графиках можно увидеть, что входные данные u и взаимные 1/u имеют большие диапазоны, но нормированные обратные y находится в диапазоне от -1 до 1.

Вход, u, является вектором значений fi, которые охватывают диапазон от -100 до 100.

normalizedReciprocalPlot(1,u,out.y,out.e,out.z);

Фактическое значение обратного, 1/u, почти идентичен нормализованному ответному, (2.^e).*y. Аналог 1/u имеет большой диапазон, что означает, что для вычисления прямого возвратно-поступательного движения в фиксированной точке потребуется тип данных с высоким динамическим диапазоном (то есть большая длина слова и большая длина дроби).

normalizedReciprocalPlot(2,u,out.y,out.e,out.z);

Нормализованный ответный, y, находится в диапазоне

       0.5 < |y| <= 1

и может быть эффективно и точно сохранен в типе данных с той же длиной слова, что и u. Числовой тип y имеет длину дроби, равную двум меньше длины слова u. Этот дополнительный бит целого числа гарантирует, что y может быть положительным или отрицательным, а также может точно представлять значения -1 и + 1.

normalizedReciprocalPlot(3,u,out.y,out.e,out.z);

Нормализованная экспонента, eи величина входного сигнала, u, имеют обратную зависимость. Когда u является большим по величине, то e является большим отрицательным значением. Когда u близок к нулю, то e является большим положительным значением. Отношение:

       (2.^e).*y = 1./u,
normalizedReciprocalPlot(4,u,out.y,out.e,out.z);

Модель умножает нормализованное обратное y по входу u а затем масштабирует результат путем смещения на e. С тех пор y имеет величину менее 1, произведение может быть выполнено в виде фиксированной точки u. Выходной сигнал z = 2 ^ e (y * u) приблизительно равен 1.

normalizedReciprocalPlot(5,u,out.y,out.e,out.z);

Выходные данные, z, имеет небольшую ошибку округления в результате вычисления нормализованного возвратно-поступательного с фиксированными типами данных.

normalizedReciprocalPlot(6,u,out.y,out.e,out.z);