exponenta event banner

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

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

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

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

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

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

Комплексный к величине (Complex to Magnitude): блок, сконфигурированный для возврата угла в радианах, создает угол комплексного входа в качестве выходного сигнала. Этот блок также моделирует задержку реализации аппаратных средств.

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

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

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

См. также

Блоки

Функции