Реализуйте Функцию atan2 для HDL

В этом примере показано, как использовать блок Complex to Magnitude-Angle HDL Optimized, чтобы реализовать функцию atan2 в оборудовании.

Эта модель в качестве примера сравнивает выход Комплекса с блоком Magnitude-Angle HDL Optimized с atan2 функция, реализованная с помощью блока Trigonometric Function.

Счетчик HDL 1 и Счетчик HDL 2 блока генерируют действительные и мнимые части, соответственно, комплексного числа.

Действительный-Imag с блоком Complex создает комплексный выход из действительных и мнимых входных параметров.

Блок Trigonometric Function с набором параметра функции как atan2 используется, чтобы сгенерировать ссылочный выходной угол. Этот блок использует приближение CORDIC, чтобы вычислить угол.

Комплекс с блоком Magnitude-Angle, сконфигурированным, чтобы возвратить угол в радианах, производит угол комплексного входа как выход. Этот блок также моделирует задержку аппаратной реализации.

Чтобы выровнять данные для сравнения, путь к справочным данным включает блок задержки с той же задержкой.

Комплекс с блоком Magnitude-Angle поддерживает генерацию HDL-кода, если вы добавляете его в подсистему.

Запустите модель Simulink

modelname = 'HDLatan2Example';
open_system(modelname);
set_param(modelname,'SampleTimeColors','on');
set_param(modelname,'SimulationCommand','Update');
set_param(modelname,'Open','on');
set(allchild(0),'Visible','off');
out = sim(modelname);

Сравните выходные параметры Комплекса с блоком Magnitude-Angle HDL против atan2 функционального блока

figure('units','normalized','outerposition',[0 0 1 1])
subplot(4,1,1)
plot(simout1(:,1))
hold on;
plot(simout1(:,2))
hold off;
legend('Real','Imaginary')
title('Real and Imaginary Part of the Input')

subplot(4,1,2)
plot(simout2(:,1))
title('Output of atan2 reference block')

subplot(4,1,3)
plot(simout2(:,2))
title('Output of Complex to Magnitude-Angle HDL Optimized Block')

subplot(4,1,4)
plot(simout3)
title('Error signal')

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

Блоки

Функции