Matlab的正弦波相位谱

Posted

技术标签:

【中文标题】Matlab的正弦波相位谱【英文标题】:Phase spectrum of sine wave with Matlab 【发布时间】:2013-09-26 11:40:14 【问题描述】:

我正在尝试使用 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】:

当幅度如此之低时,频率分量的相位是不明确的(并且毫无意义)。尝试随机更改每个频谱分量的相位,转换回时域(使用ifft),您仍然可以恢复正弦曲线。

【讨论】:

非常感谢。那是个问题。我还有一个问题:我制作的信号是四个正弦曲线的总和:x1=sin(2*pi()*1000*t); x2=sin(2*pi()*2000*t); x3=cos(2*pi()*3000*t); x4=sin(2*pi()*3500*t); x5=x1+x2+x4+x3; 当我绘制 x5 的幅度谱时,我收到了四个峰值。其中三个具有相同的值 = 1,但第四个(对于 3500Hz)具有大约 0.65 的值。什么原因?它们不应该具有相同的值,因为正弦波的幅度相同吗? 当您将正弦波频率提高到 4000 Hz(奈奎斯特率)时,正弦波的表示不太准确,这会导致在更广泛的频谱分量中出现能量“拖尾”。请注意,随着峰值变低,附近的组件具有增加的幅度。正弦曲线的总能量是相同的,但由于其不太准确的表示,它会通过更多的频率。如果您plot (t,x4) 并放大,您会发现这种不准确之处。换句话说,正弦曲线的一部分被转化为噪声,您可以在频率图中看到该噪声频谱。

以上是关于Matlab的正弦波相位谱的主要内容,如果未能解决你的问题,请参考以下文章

傅里叶变换

matlab 使用定时器画连续正弦波信号

如何将正弦信号转换成同频率方波信号

方波,正弦波,三角波信号是如何产生的

波干扰:添加两个相反相位的波 + 使用 FFT - MATLAB 问题

matlab 生成正弦波