无需重新设置参数的复杂角度计算:连续无界角度

Complex angle calculation with no reset of argument: continuous unbounded angle

考虑以下示例 Simulink (Download example) 系统:

输入是一个幅度和一个不断增加的角度,这将 return 两个正弦,如预期的实部和虚部:

从实部和虚部计算幅度是没有问题的。获取域中的角度 between -pi and pi neither:

但我真的很难从虚部和实部计算 原始 角度。您对如何消除不连续性(黄线,最后一张图片)有什么想法吗?

使用名为 unwrap 的块。如果工具箱不可用,可以使用 simulink 中的这种离散实现:

正是我要找的东西,但如果 DSP 系统工具箱 不可用,就像我的项目合作伙伴一样,我想出了使用以下解决方案:

function [y, corr]  = phase_unwrap(zz,z,v)
%#codegen

d = diff([v,z,zz]);
if abs(d(1)) > pi
    y = sign(d(1));
    corr = -3/2*d(2);
else
    y = 0;
    corr = -3/2*d(1);
end

end

离散时间积分器具有与零阶保持相同的采样时间和2*pi的增益.

示例输出令人满意,但我仍然需要针对真实案例进行测试。

这个例子怎么样?

function [ub_ang,ang] = phase_unwrap(re, im, theta)
%#codegen

ang = atan2(im,re);

tmp = [theta ang];

uang = unwrap(tmp);

ub_ang = uang(2);

Scope1 图如下

范围图如下。