考虑MATLAB中虚构参数的过度旋转

时间:2015-05-25 16:13:58

标签: matlab math

假设我们有一些具有虚构和实部的傅立叶变换。 计算某些频率的幅度非常简单,如下面的代码所示。

但是,如果频率(在本例中为p=1)例如为1000,那么我们就会遇到问题。我们需要考虑假想部分必须介于-pipi之间的事实。

例如。假设我的虚部是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中的双精度。

1 个答案:

答案 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/2w=inf之间的{{1}}不等。

enter image description here