Сгенерируйте Sine wave

В этом примере показано, как использовать блок NCO HDL Optimized, чтобы сгенерировать синусоиду. Пример генерирует синусоиду с этими техническими требованиями.

F0 = 510;       % Desired output frequency (Hz)
Deltaf = 0.05;  % Frequency resolution (Hz)
SFDR = 90;      % Spurious free dynamic range (dB)
Ts = 1/8000;    % Sample period (s)
phOffd = pi/2;  % Desired phase offset (rad)

Разрешение частоты синусоиды зависит от размера аккумулятора. Вычислите количество необходимых двоичных разрядов аккумулятора, чтобы достигнуть желаемого разрешения частоты. N должно быть целочисленное значение. Используйте это значение, чтобы установить параметр Размера слова типа данных аккумулятора.

$$ N = {\mathop{\rm ceil}}({\mathop{\rm log2}}({1 \over {{T_s} \cdot {\Delta f}}})) $$

N = ceil(log2(1/(Ts*Deltaf))) %#ok<*NOPTS>
N =

    18

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

$$ Q = {\mathop{\rm ceil}}({\frac{{SFDR} - 12}{6}}) $$

Q = ceil((SFDR - 12)/6)
Q =

    13

Вычислите шаг фазы. Используйте это значение, чтобы установить параметр шага Фазы.

$$ phIncr = {\mathop{\rm round}}({{{F_0} \cdot {2^N}} {T_s}}) $$

phIncr = round(F0*2^N*Ts)
phIncr =

       16712

Смещение фазы и dither опционально добавляются на этапе аккумулятора. Вычислите смещение фазы, которое блок добавляет из желаемого смещения фазы выходной волны. Используйте это значение, чтобы установить параметр смещения Фазы.

$$ phOff = {{{2^{N}} \cdot PhOff_d} \over {2\pi }} $$

phOff = (2^N*phOffd)/(2*pi)
phOff =

       65536

Выберите количество битов dither. В общем случае хорошим выбором для количества битов dither является размер слова аккумулятора минус количество квантованных двоичных разрядов аккумулятора. Используйте это значение, чтобы определить Номер параметра битов dither.

ditherBits = N - Q
ditherBits =

     5

Откройте и симулируйте модель. Блок NCO HDL Optimized в модели сконфигурирован с переменными, вычисленными в этом скрипте. Выходной размер слова и дробная длина зависят от ограничений вашего оборудования; этот пример использует размер слова 16 и дробную длину 14.

open_system('GenerateSineWaveHDL')
sim('GenerateSineWaveHDL')

Пиковые результаты Средства поиска в Спектре, Анализатор показывает, что выходная форма волны сгенерирована на уровне 510 Гц. Экспериментируйте с моделью, чтобы наблюдать эффекты на выходе, показанном на Спектре Анализатор. Например, примерьте превращение размывания и прочь и попытайтесь изменить количество битов dither.