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

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

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

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

Блок Real-Imag to Complex создает комплексный выход из вещественных и мнимых входов.

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

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

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

Блок Complex to 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);

Сравните выходы блока Complex to 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')

См. также

Блоки

Функции