在大部分场景下,我们一般只看重信号的幅值大小,但有时也需要考虑相位信息,因此需要会求取信号的相位关系。matlab中求信号相位的一些方法。
(1)物理意义:
theta = angle(z)为复数数组z的每个单个元素返回区间[-pi,pi]中的相位角。theta中的角度表示为 z = abs(z).* exp(i*theta).
(2)计算步骤:
首先创建一个复数,并计算其幅值和相位。
z = 2*exp(i*0.5)
r = abs(z)
theta = angle(z)
z =
1.7552 + 0.9589i
r =
2
theta =
0.5000
再创建一个由频率为 15Hz 和 40Hz 的两个正弦波组成的信号。
第一个正弦波的相位为-pi/4,第二个正弦波的相位为pi/2。
以 100 Hz的频率对信号进行一秒钟的采样。
fs = 100;
t = 0:1/fs:1-1/fs;
x = cos(2*pi*15*t - pi/4) - sin(2*pi*40*t);
y = fft(x);
z = fftshift(y);
ly = length(y);
f = (-ly/2:ly/2-1)/ly*fs;
stem(f,abs(z))
xlabel 'Frequency (Hz)'
ylabel '|y|'
grid
最后计算变换的相位,删除小幅值变换值。将相位绘制为频率函数
tol = 1e-6;
z(abs(z) < tol) = 0;
theta = angle(z);
stem(f,theta/pi)
xlabel 'Frequency (Hz)'
ylabel 'Phase / \pi'
grid
很显然从上图中可以清楚地看出该信号在15Hz处相位为-pi/4,40Hz处相位为pi/2。