Complex to Magnitude-Angle HDL Optimized

Вычислите величину и/или угол фазы комплексного сигнала — оптимизированный для генерации HDL-кода с помощью алгоритма CORDIC

Библиотека

Поддержка HDL DSP System Toolbox> Математические функции

dsphdlmathfun

Описание

Блок Complex to Magnitude-Angle HDL Optimized вычисляет величину и/или угол фазы комплексного сигнала. Это обеспечивает благоприятные для оборудования управляющие сигналы. Блок использует конвейерный Координатный Компьютер Вращения (CORDIC) алгоритм, чтобы достигнуть эффективной реализации HDL.

Можно также использовать этот блок, чтобы реализовать atan2 функция в оборудовании.

Атрибуты сигнала

ПортНаправлениеОписаниеТип данных
dataInВходной параметрОбъедините скалярный входной сигнал.

  • fixdt()

  • int32/16/8

  • uint32/16/8

double/single позволены для симуляции, но не для генерации HDL-кода.

validInВходной параметрУказывает, что входной сигнал допустим. Когда validIn высоко, блок получает dataIn значение. boolean
magnitudeВывод Скалярный выходной сигнал.То же самое как dataIn
angleВывод Скалярный выходной сигнал. Дополнительный. То же самое как dataIn
validOutВывод Указывает, что выходной сигнал допустим. Когда magnitude или angle выход готов, блок устанавливает validOut высоко. boolean

Параметры

Number of iterations source

Задает источник Number of iterations для алгоритма CORDIC. Выберите Auto определять номер итераций к входному размеру слова − 1. Если входом является double или single'auto' определяет номер итераций к 16. Выберите Property определять номер итераций от Number of iterations. Значением по умолчанию является Auto.

Number of iterations

Задает количество итераций CORDIC, которые выполняет блок. Этот параметр отображается только, когда Number of iterations source установлен в Property. Количество итераций должно быть меньше чем или равно размеру слова − 1 входных данных.

Задержка блока зависит от количества выполняемых итераций. Смотрите Задержку.

Output format

Задает, какие выходные порты активны. Можно выбрать Magnitude\angle, или Magnitude and angle. Значением по умолчанию является Magnitude and angle.

Angle format

Задает формат angle вывод . Можно выбрать Normalized или Radians. Выберите Normalized возвращать выходной параметр в формате фиксированной точки, который нормирует углы в области значений [–1,1]. Для получения дополнительной информации смотрите Нормированный Угловой Формат. Выберите Radians возвращать выходной параметр как значение фиксированной точки между π и −π. Форматом по умолчанию является Normalized.

При использовании этого блока, чтобы реализовать atan2 функция, установленная этот параметр на Radians.

Scale output

Шкалы, выведенные инверсией CORDIC, получают фактор. Значение по умолчанию выбрано.

Примечание

Если вы выключаете выходное масштабирование и применяете усиление CORDIC в другом месте в вашем проекте, необходимо исключить термин π/4. Квадрант, сопоставляющий алгоритм, заменяет первую итерацию CORDIC путем отображения входных параметров на угловую область значений [0, π/4]. Поэтому начальное вращение не вносит термин усиления.

Поиск и устранение проблем

Если вход является 0+0i, выходной угол не определен. Блок не реализует логику коррекции, чтобы обеспечить выход к 0. Можно проигнорировать этот выходной угол.

Примеры

развернуть все

В этом примере показано, как использовать блок Complex to Magnitude Angle, чтобы реализовать функцию atan2 в оборудовании. Блок использует архитектуру CORDIC.

Модель в качестве примера сравнивает блок Complex to Magnitude Angle с atan2 функция. Блок Complex to Magnitude Angle сконфигурирован, чтобы возвратить угол в Радианах и не возвратить величину. atan2 функция использует приближение CORDIC.

Блок Complex to Magnitude Angle моделирует задержку аппаратной реализации. Чтобы выровнять данные для сравнения, путь к справочным данным включает блок задержки с той же задержкой.

Можно сгенерировать HDL от блока Complex to Magnitude Angle, если вы добавляете его в подсистему.

Алгоритм

Алгоритм CORDIC

Алгоритм CORDIC является благоприятным для оборудования методом для выполнения тригонометрических функций. Это - итеративный алгоритм, который аппроксимирует решение путем схождения к идеальной точке. Блок использует CORDIC векторизация режима, чтобы итеративно вращать вход на вещественную ось.

Метод Givens для вращения комплексного числа x+iy углом θ следующие. Направление вращения, d, +1 для против часовой стрелки и −1 для по часовой стрелке.

xr=xпотому чтоθdysinθyr=yпотому чтоθ+dxsinθ

Для аппаратной реализации факторизуйте becauseθ, чтобы оставить термин tanθ.

xr=потому чтоθ(xdytanθ)yr=потому чтоθ(y+dxtanθ)

Чтобы вращать вектор на вещественную ось, выберите ряд вращений θn так, чтобы tanθn=2n. Удалите термин becauseθ, таким образом, каждое итеративное вращение использует только сдвиг, и добавьте операции.

Rxn=xn1dnyn12nRyn=yn1+dnxn12n

Объедините отсутствие условия becauseθ от каждой итерации в константу, и примените его с одним множителем к результату итогового вращения. Выходная величина является масштабированным окончательным значением x. Выходной угол, z, является суммой углов поворота.

xr=(потому чтоθ0потому чтоθ1...потому чтоθn)RxNz=0Ndnθn

Измененный алгоритм CORDIC

Область сходимости для стандартного вращения CORDIC составляет ≈ ±99.7 °. Работать вокруг этого ограничения, прежде, чем сделать любое вращение, блок-диаграммы вход в [0, π/4] область значений с помощью следующего алгоритма.

if abs(x) > abs(y) 
  input_mapped = [abs(x), abs(y)];
else
  input_mapped = [abs(y), abs(x)];
end
В каждой итерации блок вращает вектор к вещественной оси. Вращение состоит против часовой стрелки в том, когда y отрицателен, и по часовой стрелке когда y положителен.

Квадрантное отображение сохраняет аппаратные ресурсы и уменьшает задержку путем сокращения количества настроек канала связи CORDIC одной. Фактор усиления CORDIC, Kn, поэтому не включает n=0, или потому что (π/4), называют.

Kn=cosθ1...потому чтоθn=потому что(26.565)потому что(14.036)потому что(7.125)потому что(3.576)

После того, как итерации CORDIC завершены, блок корректирует угол назад к его исходному местоположению. Сначала это настраивает угол правильной стороне π/4.

if abs(x) > abs(y)
  angle_unmapped = CORDIC_out;
else
  angle_unmapped = (pi/2) - CORDIC_out;
end
Затем это инвертирует угол к исходному квадранту.
if (x < 0) 
  if (y < 0)
    output_angle = - pi + angle_unmapped;
  else
    output_angle = pi - angle_unmapped;
else
  if (y<0)
    output_angle = -angle_unmapped;

Архитектура

Блок генерирует конвейерную архитектуру HDL, чтобы максимизировать пропускную способность. Каждая итерация CORDIC сделана в одной настройке канала связи. Множитель усиления, если включено, реализован с логикой Канонической цифры со знаком (CSD).

Введите размер словаВыведите размер слова величины
fixdt (0, WL, FL)fixdt (0, WL+2, FL)
fixdt (1, WL, FL)fixdt (1, WL+1, FL)

Введите размер словаВыведите угловой размер слова
fixdt ([], WL, FL)Радианыfixdt (1, WL+3, WL)
'normalized'fixdt (1, WL+3, WL+2)

Логика CORDIC при каждой настройке канала связи реализует одну итерацию. Для каждой настройки канала связи сдвиг и угловое вращение являются константами.

Когда вы устанавливаете Output format на Magnitude, блок не генерирует HDL-код для углового накопления и квадрантной логики коррекции.

Нормированный угловой формат

Этот формат нормирует угловые значения радиана фиксированной точки вокруг модульного круга. Это - более эффективное использование битов, чем область значений [0,2π] радианы. Нормированный угловой формат также включает перенос в 0/2π без дополнительного, обнаруживают и корректируют логику.

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

Используя отображение, описанное в Модифицированном Алгоритме CORDIC, блок нормирует углы через [0, π/4] и сопоставляет их с правильным октантом в конце вычисления.

Задержка

Выходом является допустимый Number of iterations + 4 цикла после допустимого входа.

Когда вы устанавливаете Number of iterations source на Property, блок сразу показывает задержку. Когда вы устанавливаете Number of iterations source на Auto, блок вычисляет задержку на основе типа данных входного порта и отображает его, когда вы обновляете модель.

Когда вы устанавливаете Number of iterations source на Auto, количество итераций является входным размером слова − 1, и задержка является входным размером слова + 3. Если входом является double или single введите, количество итераций равняется 16, и задержка равняется 20.

Производительность

Уровень был измерен для настройки по умолчанию с выходным отключенным масштабированием и fixdt(1,16,12) входной параметр. Когда сгенерированный HDL-код синтезируется в Xilinx® Virtex®-6 (XC6VLX240T-1FFG1156) FPGA, проект достигает частоты часов на 260 МГц. Это использует следующие ресурсы.

РесурсИспользуемый номер
LUT882
FFS792

Xilinx LogiCORE® DSP48

0
Блокируйте RAM (16K)0

Производительность синтезируемого HDL-кода варьируется в зависимости от вашей цели и опций синтеза.

Расширенные возможности

Введенный в R2014b