MATLAB中虚参旋转过大的原因

MATLAB中虚参旋转过大的原因,matlab,math,Matlab,Math,假设我们有一些傅里叶变换,有虚部和实部。 计算某些频率的幅值很简单,如下面的代码所示 但是,如果频率,在本例中为p=1,例如1000,则我们有一个问题。我们需要考虑这样一个事实,即虚部必须介于-pi和pi之间 比如说。假设我的虚部是Im=>w-100,实部是Re=>1 角度/相位应为:arctan(Im/Re)=arctan(w-100)。简单地用值替换w将不起作用。我们需要减去额外的全旋转,并将其传递给arctan函数 我该怎么做 p = 1; % Value given in argumen

假设我们有一些傅里叶变换,有虚部和实部。 计算某些频率的幅值很简单,如下面的代码所示

但是,如果频率,在本例中为
p=1
,例如
1000
,则我们有一个问题。我们需要考虑这样一个事实,即虚部必须介于
-pi
pi
之间

比如说。假设我的虚部是
Im=>w-100
,实部是
Re=>1

角度/相位应为:
arctan(Im/Re)=arctan(w-100)
。简单地用值替换
w
将不起作用。我们需要减去额外的全旋转,并将其传递给
arctan
函数

我该怎么做

p = 1; % Value given in argument

x1 = exp(-4*(t-2))*cos(9*t)*heaviside(t); % define function
F = fourier(x1,t,w); % fourier transformation
sub1 = double(subs(F,w,p)); % SUBSTITUTE value for omega

mod1 = abs(sub1) % print out modulus
ang1 = angle(sub1) % print out phase angle
注意:傅里叶变换返回一个符号函数。因此,我在
sub1

中将其转换为双精度。请检查此函数,它在某些情况下工作得非常好:)。。。我已经用它解决了好几种情况下傅里叶光谱与一个很好的“展开”阶段:D:D:

ang2=unwrap(ang1);
如果这不起作用,尝试在后面和前面进行预乘,以适应
pi
分数

编辑

你需要这个吗

如果是,则不需要展开相位,平滑度从
w=-inf
处的
pi/2
w=inf
处的
-pi/2


对于前面的回答,我很抱歉,我添加了一个数值解,而不是符号解,应该注意到这一点。@brodroll那么不知道了吗?:pI对Matlab的符号运算几乎没有经验。Idk如果atan2函数适用于你的相位角,也没有办法测试atm:xatan2是一个4象限的反正切(查看x和y的符号)。这似乎会让你进入正确的阶段。2pi的倍数的超全旋转不会影响图像虚部的数值result@hiandbaii如果用
p=inf
替换,角度的值将为
pi/2
。从理论上讲,不确定matlab是否能够处理inf
% Fourier Transform
syms t v;
w=(0:1:100*pi)';
lw=length(w);
x = exp(-4*(t-2))*cos(9*t)*heaviside(t); % Function
F = fourier(x,t,v); % Fourier Transform
F0= double(subs(F,v,w)); % Symbolic Substitution
f = abs(F0); %  Magnitude
th = angle(F0); % Phase (unwrap not required)
%th=unwrap(angle(F0)); % Unwrapped Phase

% Plot
ha=plotyy(w,f,w,th);
title('Fourier Transform');
xlabel('Frequency - \omega');
ylabel(ha(1),'Magnitude - |f|');
ylabel(ha(2),'Phase - \theta');