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 создает Системный объект генератора с программным управлением (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.

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

Тип выходной формы волны. Если вы выбираете 'Sine' или 'Cosine', объект возвращает sin или cos значение. Если вы выбираете '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'. Весь выход является подписанным форматом.

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

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

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

Описание

Объект возвращает значение формы волны, 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

Для просмотра документации необходимо авторизоваться на сайте