dsp.HDLComplexToMagnitudeAngle

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

Описание

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

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

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

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

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

Создание

Описание

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.

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

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

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

Входной сигнал в виде комплексного скалярного значения. 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