用Matlab绘制正弦波的相位谱

3

我正尝试使用Matlab绘制正弦波的相位谱。下面是我的代码,由于声望不足,我无法附上图表。虽然幅度谱看起来不错,但相位谱似乎不正确,就像一种噪音。您有什么想法吗?

clear all;

fs=8000;
l=1000;
t=1/fs*(1:l);

x1=sin(2*pi()*1000*t);
spec_x1=fft(x1,1000);
magnitude=2*abs(spec_x1)/l;
phase=angle(spec_x1)*180/pi;

figure
plot(fs/2*linspace(0,1,500),magnitude(1:500));
title('Magnitude spectrum');
xlabel('F[Hz]');
ylabel('Magnitude');

figure
plot(fs/2*linspace(0,1,500),phase(1:500));
title('Phase spectrum');
xlabel('F[Hz]');
ylabel('Phase [degrees]');
1个回答

2

当幅度很低时,频率分量的相位是不明确(且无意义)的。尝试随机更改每个频谱分量的相位,使用ifft将其转换回时间域,你仍然可以恢复正弦波。


非常感谢。那是一个问题。我还有一个问题:我制作了一个信号,其中包括四个正弦波的和: `x1=sin(2pi()1000t); x2=sin(2pi()2000t); x3=cos(2pi()3000t); x4=sin(2pi()3500t);x5=x1+x2+x4+x3;`当我绘制x5的幅度频谱时,我得到了四个峰值。其中三个峰值相同,都等于1,但第四个峰值(对应3500Hz)的值大约为0.65。这是什么原因?难道它们不应该与正弦波的振幅相同吗? - Pawel
当你将正弦波频率提高到4000 Hz(奈奎斯特速率)时,正弦波的表示就不太准确了,这会导致能量在更广泛的频谱分量范围内“模糊”。请注意,随着峰值降低,相邻分量的振幅增加。正弦波的总能量是相同的,但由于其不太准确的表示,它覆盖了更多的频率。如果你绘制(t,x4)并放大,你会看到这种不准确性。换句话说,正弦波的一部分被转化为噪声,并且你可以在频率图中看到该噪声谱。 - Luis Mendo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接