假设我们有一些具有虚构和实部的傅立叶变换。 计算某些频率的幅度非常简单,如下面的代码所示。
但是,如果频率(在本例中为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
中的双精度。
答案 0 :(得分:1)
检查这个Matlab函数,它在某些情况下非常有效:)...我已经使用了几个案例来解析傅里叶谱,其中包含一个很好的“展开”阶段:D:D:
ang2=unwrap(ang1);
如果这不起作用,请尝试在之前和之后预乘,以适应pi
分数....
修改强>
你需要这个吗?:
% 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');
如果是这样,则不需要展开相位,而pi/2
处的w=-inf
-pi/2
与w=inf
之间的{{1}}不等。