dsp. HDLNCO

Сгенерируйте действительный или объедините синусоидальные сигналы — оптимизированный для генерации HDL-кода

Описание

Система NCO HDL object™ генерирует действительный, или объедините синусоидальные сигналы при обеспечении благоприятных для оборудования управляющих сигналов. Объект использует то же накопление фазы и алгоритм интерполяционной таблицы, как реализовано в Системном объекте NCO. Когда вы используете входные сигналы целочисленной или фиксированной точки или используете объект в качестве источника без входного сигнала, объектное использование квантовало целочисленное накопление, чтобы создать сигнал синусоиды.

Системный объект NCO HDL обеспечивает эти функции:

  • Опция сжатия интерполяционной таблицы, чтобы уменьшать размер интерполяционной таблицы. Это сжатие приводит меньше чем к одной потере LSB в точности. Смотрите Сжатие Интерполяционной таблицы для получения дополнительной информации.

  • Дополнительный входной параметр для внешнего dither.

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

  • Дополнительный выходной аргумент в пользу текущей фазы NCO.

Системный объект не поддерживает свойство, которое позволяет блоку NCO HDL Optimized синтезировать интерполяционную таблицу к ROM при использовании HDL Coder™ с целью FPGA.

Учитывая желаемую выходную частоту F 0, вычислите использование входного значения phase increment

phase increment=(F02NFs)

где N является размером слова аккумулятора и

Fs=1Ts=1sample time

Можно задать шаг фазы использование свойства или входного параметра.

Разрешение частоты NCO задано

Δf=1Ts2NГц

Учитывая желаемое смещение фазы (в радианах), вычислите использование входного значения phase offset

phase offset=2Ndesired phase offset2π

Можно задать смещение фазы с помощью свойства или входного параметра.

Когда вы используете входные сигналы с плавающей точкой, объект не квантует накопление. Поэтому необходимо выбрать шаг и сместить значения, чтобы представлять часть 2π без квантования.

Сгенерировать действительный или объединить синусоидальные сигналы:

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

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

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

Создание

Синтаксис

hdlnco = dsp.HDLNCO
hdlnco = dsp.HDLNCO(Name,Value)
hdlnco = dsp.HDLNCO(Inc,'PhaseIncrementSource','Property')

Описание

hdlnco = dsp.HDLNCO создает Системный объект осциллятора с программным управлением (NCO), hdlnco, который генерирует действительное или объединяет синусоидальный сигнал. Амплитуда сгенерированного сигнала всегда равняется 1.

пример

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

hdlnco = dsp.HDLNCO('NumQuantizerAccumulatorBits',14, ...
                    'AccumulatorWL',17);

hdlnco = dsp.HDLNCO(Inc,'PhaseIncrementSource','Property') создает NCO с набором свойств PhaseIncrement к Inc, целочисленному скаляру. Чтобы использовать свойство PhaseIncrement, установите свойство PhaseIncrementSource на 'Property'. Можно добавить другие пары Name,Value прежде или после PhaseIncrementSource.

Свойства

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

Примечание

Эта плавающая точка поддержки объектов вводит для симуляции, но не для генерации HDL-кода. Когда вход является фиксированной точкой или когда все входные параметры отключены, объект вычисляет выходную форму волны на основе настроек свойства фиксированной точки. Когда ввод данных является плавающей точкой, объект вычисляет выходную форму волны с двойной точностью и игнорирует свойства, связанные с настройками фиксированной точки (NumDitherBits, PhaseQuantization, NumQuantizerAccumulatorBits, LUTCompress и свойства типа данных с фиксированной точкой).

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

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

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

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

Генерация формы волны

Можно установить шаг фазы с входным параметром или путем определения значения для свойства. Задайте 'Property', чтобы сконфигурировать шаг фазы использование свойства PhaseIncrement. Задайте 'Input port', чтобы установить шаг фазы использование аргумента inc.

Шаг фазы для сгенерированной формы волны, заданной как скалярное целое число. Если шаг является значением фиксированной точки, объект использует только целочисленные биты и игнорирует любые дробные биты. double и типы данных single поддерживаются для симуляции, но не для генерации HDL-кода. Когда вы используете входные сигналы с плавающей точкой, необходимо выбрать шаг и сместить значения, чтобы представлять часть 2π,

Зависимости

Это свойство применяется, когда вы устанавливаете свойство PhaseIncrementSource на 'Property'.

Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | fixdt([],N,0)

Можно установить смещение фазы с входным параметром или путем определения значения для свойства. Задайте 'Property', чтобы сконфигурировать шаг фазы использование свойства PhaseOffset. Задайте 'Input port', чтобы установить шаг фазы использование аргумента offset.

Смещение фазы для сгенерированной формы волны, заданной как скалярное целое число. Если смещение является значением фиксированной точки, объект использует только целочисленные биты и игнорирует любые дробные биты. double и типы данных single поддерживаются для симуляции, но не для генерации HDL-кода. Когда вы используете входные сигналы с плавающей точкой, необходимо выбрать шаг и сместить значения, чтобы представлять часть 2π.

Зависимости

Это свойство применяется, когда вы устанавливаете свойство PhaseOffsetSource на 'Property'.

Типы данных: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | fixdt([],N,0)

Можно определить номер битов dither от входного параметра или из свойства, или можно отключить dither. Задайте 'Property', чтобы сконфигурировать количество битов dither с помощью свойства NumDitherBits. Задайте 'Input port', чтобы определить номер битов dither с помощью аргумента dither. Задайте 'None', чтобы отключить dither.

Количество битов dither, заданных как положительное целое число.

Зависимости

Это свойство применяется, когда вы устанавливаете свойство DitherSource на 'Property'.

Квантовать ли накопленную фазу, заданную как true или false. Когда это свойство включено, объект квантует результат аккумулятора фазы к фиксированной битной ширине. Это квантованное значение используется, чтобы выбрать значение формы волны из интерполяционной таблицы. Выберите разрешение интерполяционной таблицы с помощью свойства NumQuantizerAccumulatorBits.

Разрешение частоты NCO задано.

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

Количество двоичных разрядов сумматора квантизатора, заданных как целочисленный скаляр, больше, чем 1 и меньше, чем размер слова аккумулятора. Это свойство должно быть меньше чем или равно 17 битам для генерации HDL-кода. Интерполяционная таблица значений синуса имеет 2NumQuantizerAccumulatorBits-2 записи.

Зависимости

Это свойство применяется, когда вы устанавливаете PhaseQuantization на true.

Разрешить ли сжатие интерполяционной таблицы, заданное как true или false. По умолчанию объект реализует сжатую интерполяционную таблицу. Сандерлендский метод сжатия уменьшает размер интерполяционной таблицы, теряя меньше чем один LSB точности. Побочный свободный динамический диапазон (SFDR) опытным путем на 1-3 дБ ниже, чем несжатый случай. Экономия средств на оборудование сжатой интерполяционной таблицы предусматривает пространство, чтобы улучшать производительность путем увеличения размера слова аккумулятора, и количество квантуют биты. Для получения дополнительной информации метода сжатия, см. Алгоритмы.

Когда эта опция отключена, вывод совпадает с выводом Системного объекта dsp.NCO.

Тип выходной формы волны. Если вы выбираете 'Sine' или 'Cosine', объект возвращает значение cos или sin. Если вы выбираете 'Complex exponential', выходное значение, exp, имеет форму sine + j*cosine. Если вы выбираете 'Sine and cosine', объект возвращает два значения, sin и cos.

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

Управляющие сигналы

Когда включено, объект принимает аргумент reset. Когда аргумент reset 1 (true), объект сбрасывает аккумулятор, чтобы обнулить.

Когда включено, объект принимает аргумент valid. Когда аргумент valid 1 (true), объект постепенно увеличивает фазу. Когда аргумент valid 0 (false), фаза сохранена.

Типы данных

Режим переполнения для операций фиксированной точки. OverflowAction является свойством только для чтения со значением 'Wrap'.

Режим Rounding для операций фиксированной точки. RoundingMethod является свойством только для чтения со значением 'Floor'.

Описание типов данных аккумулятора. AccumulatorDataType является свойством только для чтения со значением 'Binary point scaling'. Объект задает тип данных с фиксированной точкой с помощью AccumulatorSigned, AccumulatorWL и свойств AccumulatorFL.

Подписанный или формат данных аккумулятора без знака. AccumulatorSigned является свойством только для чтения со значением 'Signed'. Весь вывод является подписанным форматом.

Размер слова аккумулятора, в битах, заданных как скалярное целое число.

Если PhaseQuantization является false, это свойство должно быть меньше чем или равно 17 битам для генерации HDL-кода.

Длина части аккумулятора, в битах. AccumulatorFL является свойством только для чтения. Длина части аккумулятора является нулевыми битами. Аккумулятор работает с целыми числами. Если шаг фазы является фиксированной точкой с дробной частью, объект игнорирует дробную часть.

Тип выходных данных. Если вы задаете 'Binary point scaling', объект задает тип данных с фиксированной точкой с помощью OutputSigned, OutputWL и свойств OutputFL.

Подписанный или формат выходных данных без знака. OutputSigned является свойством только для чтения со значением 'Signed'. Весь вывод является подписанным форматом.

Выведите размер слова, в битах, заданных как скалярное целое число.

Выведите дробную длину, в битах, заданных как скалярное целое число.

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

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

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

Синтаксис

[Y,ValidOut] = hdlnco(Inc,ValidIn)
[Y,ValidOut] = hdlnco
[Y,ValidOut] = hdlnco(Inc,Offset,Dither,ValidIn)
[Y,Phase,ValidOut] = hdlnco(___)

Описание

Объект возвращает значение формы волны, Y, как значение синуса, значение косинуса, комплексное экспоненциальное значение, или [Sine,Cosine] пара значений, в зависимости от свойства Waveform.

[Y,ValidOut] = hdlnco(Inc,ValidIn) возвращает синусоидальный сигнал, Y, сгенерированный Системным объектом HDLNCO, с помощью шага фазы, Inc. Когда ValidIn является true, Inc добавляется к аккумулятору. Аргумент Inc является дополнительным. Также можно задать шаг фазы как свойство.

пример

[Y,ValidOut] = hdlnco возвращает форму волны, Y, с помощью параметров формы волны из свойств, а не входных параметров.

Чтобы использовать этот синтаксис, установите PhaseIncrementSource, PhaseOffsetSource, и свойства DitherSource к 'Property' и ValidInputPort к false. Эти свойства независимы друг от друга. Например:

hdlnco = dsp.HDLNCO('PhaseIncrementSource','Property', ...
       'PhaseIncrement',phIncr,...
       'PhaseOffset',phOffset,...
       'ValidInputPort',false,...
       'NumDitherBits',4)

пример

[Y,ValidOut] = hdlnco(Inc,Offset,Dither,ValidIn) возвращает форму волны, Y, с шагом фазы, Inc, смещением фазы, Offset, и dither, Dither.

Этот синтаксис применяется, когда вы устанавливаете PhaseIncrementSource, PhaseOffsetSource и свойства DitherSource к 'Input port'. Эти свойства независимы друг от друга. Вы можете смешивание и подгонка активация этих аргументов. PhaseIncrementSource является 'Input port' по умолчанию. Например:

hdlnco = dsp.HDLNCO('PhaseOffsetSource','Input port',...
                    'DitherSource','Input port')
for k = 1:1/Ts
   y(k) = hdlnco(phIncr,phOffset,ditherBits,true);
end

[Y,Phase,ValidOut] = hdlnco(___) возвращает форму волны, Y, и текущую фазу, Phase.

Чтобы использовать этот синтаксис, установите свойство PhasePort на true. Этот синтаксис может включать любой из аргументов от других синтаксисов. Например:

hdlnco = dsp.HDLNCO('PhaseOffsetSource','Input port',...
                    'DitherSource','Input port',...
                    'PhasePort',true)
for k = 1:1/Ts
   [phase(k),y(k)] = hdlnco(phIncr,phOffset,ditherBits,true);
end

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

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

Шаг фазы, заданный как скалярное целое число. Если шаг фазы является значением фиксированной точки, объект использует только целочисленные биты и игнорирует любые дробные биты. double и типы данных single поддерживаются для симуляции, но не для генерации HDL-кода. Когда вы используете входные сигналы с плавающей точкой, необходимо выбрать шаг и сместить значения, чтобы представлять часть 2π.

Зависимости

Объект принимает этот аргумент, когда вы устанавливаете свойство PhaseIncrementSource на 'Input port'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fixdt([],N,0)

Управляющий сигнал, который включает операцию NCO, заданную как скаляр logical. Когда ValidIn 1 (true), объект постепенно увеличивает фазу. Когда ValidIn 0 (false), объект содержит фазу.

Зависимости

Объект принимает этот аргумент, когда вы устанавливаете свойство ValidInputPort на true.

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

Смещение фазы, заданное как скалярное целое число. Если смещение является значением фиксированной точки, объект использует только целочисленные биты и игнорирует любые дробные биты. double и типы данных single поддерживаются для симуляции, но не для генерации HDL-кода. Когда вы используете входные сигналы с плавающей точкой, необходимо выбрать шаг и сместить значения, чтобы представлять часть 2π.

Зависимости

Объект принимает этот аргумент, когда вы устанавливаете свойство PhaseOffsetSource на 'Input port'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fixdt([],N,0)

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

Зависимости

Объект принимает этот аргумент, когда вы устанавливаете свойство DitherSource на 'Input port'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fixdt([],N,0)

Управляющий сигнал, который сбрасывает аккумулятор, заданный как скалярный logical. Когда Reset 1 (true), объект сбрасывает аккумулятор к 0.

Зависимости

Объект принимает этот аргумент, когда вы устанавливаете свойство ResetAction на true.

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

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

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

Сгенерированная форма волны, возвращенная как скалярный sin или значение cos, как скалярное значение exp, представляющее sine + j*cosine, или как пара значений, [sin,cos]. Если какой-либо вход является типом с плавающей точкой, объект возвращает значения с плавающей точкой, в противном случае объект возвращает значения фиксированной точки. Типы с плавающей точкой поддерживаются для симуляции, но не для генерации HDL-кода.

Зависимости

По умолчанию выходная форма волны является синусоидой. Формат выходной формы волны зависит от свойства Waveform.

Управляющий сигнал, который указывает, допустимы ли другие значения выходного аргумента или нет. Когда validOut 1 (true), значения Y и Phase допустимы. Когда validOut 0 (false), значения Y и Phase не допустимы.

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

Текущая фаза NCO, возвращенного как скаляр типа fixdt(1,M,-Z), где M является количеством квантованных двоичных разрядов сумматора и Z, является размером слова аккумулятора. Если вход к объекту является плавающей точкой, объект возвращает Phase как плавающую точку. Плавающая точка поддерживается для симуляции, но не для генерации HDL-кода.

Зависимости

Объект возвращает этот аргумент, когда вы устанавливаете свойство PhasePort на true.

Типы данных: single | double | fixdt(1,NumQuantizerAccumulatorBits,-AccumulatorWL)

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

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

release(obj)

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

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

Примеры

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

Этот пример показывает, как разработать совместимый с HDL источник NCO.

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

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

function yOut = HDLNCO510(validIn)
%HDLNCO510 
% Generates one sample of NCO waveform using the dsp.HDLNCO System object(TM)
% validIn is a logical scalar value
% phase increment, phase offset, and dither are fixed.
% You can generate HDL code from this function.

  persistent nco510;
  
  if isempty(nco510)
  % Since calculation of the object parameters results in constant values, this
  % code is not included in the generated HDL. The generated HDL code for
  % the NCO object is initialized with the constant property values. 

   F0 = 510;     % Target output frequency in Hz
   dphi = pi/2;  % Target phase offset
   df = 0.05;    % Frequency resolution in Hz
   minSFDR = 96; % Spurious free dynamic range(SFDR) in dB 
   Ts = 1/4000;  % Sample period in seconds

   % Calculate the number of accumulator bits required for the frequency
   % resolution and the number of quantized accumulator bits to satisfy the SFDR 
   % requirement. 
   Nacc = ceil(log2(1/(df*Ts)));
   % Actual frequency resolution achieved = 1/(Ts*2^Nacc)
   Nqacc = ceil((minSFDR-12)/6);
   % Calculate the phase increment and offset to achieve the target frequency
   % and offset.
   phIncr = round(F0*Ts*2^Nacc);
   phOffset = 2^Nacc*dphi/(2*pi);
   nco510 = dsp.HDLNCO('PhaseIncrementSource','Property', ...
       'PhaseIncrement',phIncr,...
       'PhaseOffset',phOffset,...
       'NumDitherBits',4, ...
       'NumQuantizerAccumulatorBits',Nqacc,...
       'AccumulatorWL',Nacc);
  end    
  
  yOut = nco510(validIn);
  
end

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

Ts = 1/4000;
y = zeros(1,1/Ts);
for k = 1:1/Ts
   y(k) = HDLNCO510(true);
end

Постройте среднеквадратический спектр синусоиды на 510 Гц, сгенерированной NCO.

sa = dsp.SpectrumAnalyzer('SampleRate',1/Ts);
sa.SpectrumType = 'Power density';
sa.PlotAsTwoSidedSpectrum = false;
sa(y')

Алгоритмы

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

Реализация NCO зависит от того, разрешаете ли вы свойство LUTCompress.

Без сжатия интерполяционной таблицы объект использует ту же интерполяционную таблицу четверти синуса в качестве блока NCO. Размер LUT является битами 2NumQuantizerAccumulatorBits-2×OutputWL.

Если вы не включаете PhaseQuantization, то NumQuantizerAccumulatorBits =AccumulatorWL. Рассмотрите влияние на ресурсы памяти средства моделирования и аппаратные ресурсы, когда вы выберете эти параметры.

Ссылки

[1] Cordesses, L., "Прямой цифровой синтез: Инструмент для Периодической Генерации Волны (Часть 1)". Журнал Обработки сигналов IEEE. Объем 21, Выпуск 4, июль 2004, стр 50–54.

Смотрите также

Системные объекты

Блоки

Введенный в R2013a