dsp.HDLComplexToMagnitudeAngle

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

Описание

The 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, Поэтому начальное вращение не способствует термину усиления.

Источник 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 входной параметр. The validIn аргумент применяется ко всем выборкам в векторном входном параметре.

Типы данных: logical

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

расширить все

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

Зависимости

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

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

Зависимости

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

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

Типы данных: logical

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

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