dsp.HDLComplexToMagnitudeAngle

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

Описание

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

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

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

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

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

Создание

Описание

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

пример

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

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

Свойства

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

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

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

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в 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.

  • 'Property' — Использует NumIterations свойство.

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

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

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

Зависимости

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

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

Описание

пример

[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');

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

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

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

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

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

Когда validIn true, блок собирает данные от dataIn входной параметр. validIn аргумент применяется ко всем выборкам в векторном входном параметре.

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

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

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

Величина вычисляется от комплексного входного сигнала, возвращенного как скаляр, вектор-столбец, представляющий выборки вовремя или вектор-строку, представляющий каналы. Размерности и тип данных этого аргумента совпадают с размерностями dataIn аргумент.

Зависимости

Чтобы включить этот аргумент, установите OutputValue свойство к 'Magnitude and Angle' или 'Magnitude'.

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

Зависимости

Чтобы включить этот аргумент, установите OutputValue свойство к 'Magnitude and Angle' или 'Angle'.

Объект устанавливает validOut к true с каждыми допустимыми данными, возвращенными на magnitude или angle выходные аргументы. validOut аргумент применяется ко всем выборкам в векторном выходном аргументе.

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

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

Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием 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