exponenta event banner

dsp. HDLNCO

Генерирование реальных или сложных синусоидальных сигналов - оптимизировано для генерации кода HDL

Описание

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

Объект системы NCO HDL предоставляет эти функции.

  • Дополнительный вывод на основе кадров.

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

  • Необязательный входной аргумент для внешнего сглаживания.

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

  • Необязательный выходной аргумент для текущей фазы NCO.

Учитывая время выборки, Ts и желаемое разрешение выходной частоты, Δf, вычисляют необходимый размер накопителя по Nacc = ceil (log2 (1Ts⋅Δf )).

Предполагая, что требуемая выходная частота Fo намного ниже частоты Найквиста, можно использовать приближение для шума на бит в дБ, основываясь на ложном свободном динамическом диапазоне (SFDR), и определить, насколько можно квантовать выходной сигнал накопителя. Квантованная длина слова для достижения заданного SFDR равна Nq = ceil (SFDR 126).

Для требуемой выходной частоты Fo вычислите приращение фазы, используя приращение фазы = округлое (F0Ts2Nacc), где Nacc - длина слова квантованного накопителя. Можно задать приращение фазы с помощью свойства или входного аргумента.

При заданном фазовом смещении (в радианах) вычислите фазовое смещение, используя фазовое смещение offset=2Nacc⋅desired phase offset2δ. Фазовое смещение можно задать с помощью свойства или входного аргумента.

Для генерации действительных или сложных синусоидальных сигналов:

  1. Создать dsp.HDLNCO и задайте его свойства.

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

Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.

Создание

Описание

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

пример

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

hdlnco = dsp.HDLNCO('NumQuantizerAccumulatorBits',12, ...
                    'AccumulatorWL',16);

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

Свойства

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

Примечание

Этот объект поддерживает типы с плавающей запятой для моделирования, но не для генерации кода HDL. Если все входные значения являются типом с фиксированной точкой или все входные аргументы отключены, объект определяет тип вывода с помощью OutputDataType собственность. Если какое-либо входное значение имеет тип с плавающей запятой, объект игнорирует OutputDataType собственность. В этом случае объект возвращает форму сигнала и необязательно Phase в виде значений с плавающей запятой.

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

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

Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.

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

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

Приращение фазы для генерируемого сигнала, заданного как целое число.

Зависимости

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

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

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

Фазовое смещение для генерируемого сигнала, заданного как целое число.

Зависимости

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

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

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

Число разрядов сглаживания, указанное как положительное целое число.

Зависимости

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

Размер вектора для вывода на основе кадра, заданный как положительное целое число. При установке этого значения в значение 1, объект имеет скалярный вход и выход. Если это значение больше, чем 1, Dither входной аргумент должен быть вектором столбца длины SamplesPerFrame и Y и Phase выходные аргументы возвращают векторы столбцов длины SamplesPerFrame.

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

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

Установить для этого свойства значение 1 (true) для возврата текущей фазы NCO в phase выходной аргумент. Фаза является выходом квантованного накопителя с примененными смещением и приращением. Если квантование отключено, этот аргумент возвращает выходной сигнал накопителя с примененными смещением и приращением.

Когда это свойство 1 (true), объект принимает ResetAccum входной аргумент. Когда ResetAccum аргумент - 1 (true), объект сбрасывает аккумулятор в исходное значение.

Типы данных

Это свойство доступно только для чтения.

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

Это свойство доступно только для чтения.

Режим округления для операций с фиксированной точкой.

Это свойство доступно только для чтения.

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

Это свойство доступно только для чтения.

Подписанный или неподписанный формат данных накопителя. Все выходные данные имеют формат подписи.

Длина слова-накопителя, в битах, заданная как целое число. Это значение должно включать бит знака.

Если PhaseQuantization свойство - 0 (false), это свойство должно быть меньше или равно 17 битам для генерации кода HDL. В неквантованном случае таблица поиска значений синусов содержит 2AccumulatorWL-2 записей.

Это свойство доступно только для чтения.

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

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

Частотное разрешение NCO определяется Δf=1Ts⋅2NHz, где N - NumQuantizerAccumulatorBits значение свойства.

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

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

Зависимости

Чтобы включить это свойство, установите значение PhaseQuantization свойство для 1 (true).

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

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

Это свойство доступно только для чтения.

Формат выходных данных с подписью или без подписи. Все выходные данные имеют формат подписи.

Длина выходного слова в битах, заданная как целое число. Это значение должно включать бит знака.

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

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

Описание

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

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

пример

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

Чтобы использовать этот синтаксис, задайте для свойств PhaseIncreureSource, PhaseOffsetSource и DelingSource значение 'Property'. Эти свойства не зависят друг от друга. Например:

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

пример

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

Этот синтаксис применяется при задании для свойств PhaseIncreureSource, PhaseOffsetSource и DaiveSource значения '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(___,ResetAccum,ValidIn) сбрасывает значение аккумулятора, но не сбрасывает выходные выборки в трубопроводе. Если ValidIn является trueзатем объект продолжает генерировать выходной сигнал, начиная со значения накопителя сброса.

Чтобы использовать этот синтаксис, задайте для свойства ResetAction значение 1 (true). Этот синтаксис может включать любой из аргументов из других синтаксисов.

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

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

Приращение фазы, указанное как скалярное целое число.

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

Зависимости

Чтобы включить этот аргумент, задайте для свойства PhaseIncreureSource значение 'Input port'.

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

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

Когда SamplesPerFrame значение свойства больше, чем 1, этот сигнал позволяет обрабатывать SamplesPerFrame образцы.

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

Фазовое смещение, указанное как скалярное целое число.

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

Зависимости

Чтобы включить этот аргумент, задайте для свойства PhaseOffsetSource значение 'Input port'.

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

Сглаживание, указанное как целое число или как вектор столбца целых чисел. Длина вектора должна равняться SamplesPerFrame значение свойства.

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

Зависимости

Чтобы включить этот аргумент, задайте для свойства DingedSource значение 'Input port'.

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

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

Зависимости

Чтобы включить этот аргумент, задайте для свойства ResetAction значение 1 (true).

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

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

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

Сгенерированная форма сигнала, возвращенная как скаляр или вектор длины SamplesPerFrame. Этот аргумент может быть sin или cos значение, exp значение, представляющее cosine + j*sineили пара аргументов в форме [Sine,Cosine].

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

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

Зависимости

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

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

Когда SamplesPerFrame значение свойства больше, чем 1, этот сигнал указывает на достоверность всех элементов в выходных векторах.

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

Текущая фаза NCO, возвращаемая как скаляр или как вектор длины SamplesPerFrame. Фаза является выходом квантованного накопителя с примененными смещением и приращением. Если квантование отключено, этот порт возвращает выходной сигнал накопителя с применением смещения и приращения.

Значения имеют тип fixdt(1,N,0), где N является NumQuantizerAccumulatorBits значение свойства. Если квантование отключено, то N является AccumulatorWL значение свойства.

Если какой-либо входной аргумент имеет тип с плавающей запятой, объект возвращает значение Phase аргумент в качестве значения с плавающей запятой. Типы с плавающей запятой поддерживаются для моделирования, но не для генерации кода HDL.

Зависимости

Чтобы включить этот аргумент, задайте свойству PhasePort значение 1 (true).

Типы данных: single | double | fixdt(1,N,0)

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

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

release(obj)

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

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

Примеры

свернуть все

В этом примере показано, как создать HDL-совместимый источник NCO.

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

Примечание.Синтаксис этого объекта выполняется только в 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. При выборе этих параметров учитывайте влияние на память симулятора и аппаратные ресурсы.

Вопросы совместимости

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

В R2020a изменилось поведение

В R2020a изменилось поведение

Ссылки

[1] Cordesses, L., «Direct Digital Synthesis: A Tool for Periodic Wave Generation (Part 1)». Журнал обработки сигналов IEEE. Том 21, выпуск 4, июль 2004 года, стр. 50-54.

См. также

Объекты

Блоки

Представлен в R2013a