dsp. HDLComplexToMagnitudeAngle

Значение и угол фазы комплексного сигнала — оптимизированный для генерации HDL-кода

Описание

Система dsp.HDLComplexToMagnitudeAngle object™ вычисляет значение и угол фазы комплексного сигнала. Это обеспечивает благоприятные для оборудования управляющие сигналы. Системный объект использует конвейерный координатный компьютер вращения (CORDIC) алгоритм, чтобы достигнуть оптимизированной HDL реализации.

Вычислить значение и угол фазы комплексного сигнала:

  1. Создайте объект dsp.HDLComplexToMagnitudeAngle и установите его свойства.

  2. Вызовите объект с аргументами, как будто это была функция.

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.

Создание

Синтаксис

HCMA = dsp.HDLComplexToMagnitudeAngle
HCMA = dsp.HDLComplexToMagnitudeAngle(Name,Value)

Описание

HCMA = dsp.HDLComplexToMagnitudeAngle возвращает Системный объект dsp.HDLComplexToMagnitudeAngle, HCMA, который вычисляет значение и угол фазы комплексного входного сигнала.

пример

HCMA = dsp.HDLComplexToMagnitudeAngle(Name,Value) свойства наборов HCMA с помощью одной или нескольких пар "имя-значение". Заключите каждое имя свойства в одинарные кавычки.

Пример: cma = dsp.HDLComplexToMagnitudeAngle('AngleFormat','Radians')

Свойства

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

Если в противном случае не обозначено, свойства являются ненастраиваемыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируют, когда вы вызываете их, и функция release разблокировала их.

Если свойство является настраиваемым, можно изменить его значение в любое время.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты (MATLAB).

Тип выходных значений, чтобы возвратиться, заданный как 'Magnitude and angle', 'Magnitude' или 'Angle'. Можно выбрать для объекта возвратить значение входного сигнала или угол фазы входного сигнала или обоих.

Формат углового выходного значения фазы от объекта, заданного как:

  • 'normalized' Формат фиксированной точки, который нормирует угол в области значений [–1,1].

  • 'Radians' — Значения фиксированной точки в области значений [π,−π].

Шкала, выведенная инверсией CORDIC, получает фактор, заданный как true или false.

Примечание

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

Источник свойства NumIterations для алгоритма CORDIC, заданного как:

  • 'auto' Определяет номер итераций к меньше, чем входной размер слова. Если входом является double или single, количество итераций равняется 16.

  • Свойство Использует свойство NumIterations.

Для получения дополнительной информации алгоритма CORDIC, см. Алгоритм.

Количество итераций CORDIC, которые объект выполняет, заданный как целое число. Количество итераций должно быть меньше чем или равно меньше, чем входной размер слова.

Для получения дополнительной информации алгоритма CORDIC, см. Алгоритм.

Зависимости

Чтобы включить это свойство, установите NumIterationsSource на 'Property'.

Использование

Для версий ранее, чем R2016b, используйте функцию step, чтобы запустить алгоритм Системного объекта. Аргументы к step являются объектом, который вы создали, сопровождаемый аргументами, показанными в этом разделе.

Например, y = step(obj,x) и y = obj(x) выполняют эквивалентные операции.

Синтаксис

[mag,angle,validOut] = HCMA(X,validIn)
[mag,validOut] = HCMA(X,validIn)
[angle,validOut] = HCMA(X,validIn)

Описание

пример

[mag,angle,validOut] = HCMA(X,validIn) преобразовывает комплексный скалярный X в его значение компонента и угол фазы. validIn и validOut являются логическими скалярами, которые указывают на валидность сигналов ввода и вывода, соответственно.

[mag,validOut] = HCMA(X,validIn) возвращает только значение компонента X.

Чтобы использовать этот синтаксис, установите OutputValue на 'Magnitude'.

Пример: HCMA = dsp.HDLComplextoMagnitudeAngle('OutputValue','Magnitude');

[angle,validOut] = HCMA(X,validIn) возвращает только угол фазы компонента X.

Чтобы использовать этот синтаксис, установите OutputValue на 'Angle'.

Пример: HCMA = dsp.HDLComplextoMagnitudeAngle('OutputValue','Angle');

Входные параметры

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

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

Типы данных: fi | int8 | int16 | int32 | uint8 | uint16 | uint32 | single | double
Поддержка комплексного числа: Да

Валидность входного сигнала, заданного как логический скаляр.

Типы данных: логический

Выходные аргументы

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

Значение вычисляется от комплексного входного сигнала, возвращенного как скалярное значение с совпадающим типом данных как входной сигнал.

Угол вычисляется от комплексного входного сигнала, возвращенного как скалярное значение с совпадающим типом данных как входной сигнал. Формат этого значения зависит от свойства AngleFormat.

Валидность выходных компонентов, возвращенных как логический скаляр.

Типы данных: логический

Функции объекта

Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием obj, используйте этот синтаксис:

release(obj)

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

stepЗапустите алгоритм Системного объекта
releaseВысвободите средства и позвольте изменения в значениях свойств Системного объекта и введите характеристики
resetСбросьте внутренние состояния Системного объекта

Примеры

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

Используйте объект dsp.HDLComplextoMagnitudeAngle вычислить значение и угол фазы комплексного сигнала. Объект использует алгоритм CORDIC для эффективной аппаратной реализации.

Выберите размеры слова и создайте случайный комплексный входной сигнал. Затем преобразуйте входной сигнал в фиксированную точку.

a = -4;
b = 4;
inputWL = 16;
inputFL = 12;
numSamples = 10;
reData = ((b-a).*rand(numSamples,1)+a);
imData = ((b-a).*rand(numSamples,1)+a);
dataIn = (fi(reData+imData*1i,1,inputWL,inputFL));
figure
plot(dataIn)
title('Random Complex Input Data')
xlabel('Real')
ylabel('Imaginary')

Запишите функцию, которая создает и вызывает Систему object™. Можно сгенерировать HDL от этой функции.

Примечание: Этот объектный синтаксис запускается только в R2016b или позже. Если вы используете более ранний релиз, заменяете каждый вызов объекта с эквивалентным синтаксисом step. Например, замените myObject(x) на step(myObject,x).

function [mag,angle,validOut] = Complex2MagAngle(yIn,validIn)
%Complex2MagAngle 
% Converts one sample of complex data to magnitude and angle data.
% yIn is a fixed-point complex number.
% validIn is a logical scalar value.
% You can generate HDL code from this function.

  persistent cma;
  if isempty(cma)
    cma = dsp.HDLComplexToMagnitudeAngle('AngleFormat','Radians');
  end   
  [mag,angle,validOut] = cma(yIn,validIn);
end


Количество итераций CORDIC определяет задержку, которую объект берет, чтобы вычислить ответ для каждой входной выборки. Задержкой является NumIterations+4. В этом примере NumIterationsSource установлен в значение по умолчанию, 'Auto', таким образом, объект использует итерации inputWL-1. Задержкой является inputWL+3.

latency = inputWL+3;
mag = zeros(1,numSamples+latency);
ang = zeros(1,numSamples+latency);
validOut = false(1,numSamples+latency);

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

for ii = 1:1:numSamples
   [mag(ii),ang(ii),validOut] = Complex2MagAngle(dataIn(ii),true);
end
for ii = (numSamples+1):1:(numSamples+latency)
   [mag(ii),ang(ii),validOut(ii)] = Complex2MagAngle(fi(0+0*1i,1,inputWL,inputFL),false);
end
% Remove invalid output values
mag = mag(validOut == 1);
ang = ang(validOut == 1);
figure
polar(ang,mag,'--r')   % Red is output from HDL-optimized System object
title('Output from dsp.HDLComplexToMagnitudeAngle')
magD = abs(dataIn);
angD = angle(dataIn);
figure
polar(angD,magD,'--b') % Blue is output from abs and angle functions
title('Output from abs and angle Functions')

Алгоритмы

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

Введенный в R2014b