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