В этом примере показано, как использовать оптимизированный для 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 при добавлении его в подсистему.
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);

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')
