matlab - 在Matlab上绘制正弦波的问题

标签 matlab signal-processing trigonometry sampling

我必须绘制信号 m(t) = ASin(2pi1000t),我使用以下 Matlab 代码来完成此操作。

Fm=1000;%1 kHz

Fs = 2*Fm;

t = 0:1/Fs:10; % ( that is, time will run from 0 to 10 with a sample at every 1/2000th second )
Am=1;%amplitude
m=Am*sin(2*pi*Fm*t);

figure(1)
plot(t,m)
title('Message signal')
xlabel('Time in Seconds') 
ylabel('m(t)') 

但是,我得到的情节是

enter image description here

但另一方面,如果我使用以下代码,

Fm=1000;%1 kHz

t=linspace(0,10,2000);
Am=1;%amplitude
m=Am*sin(2*pi*Fm*t);

figure(1)
plot(t,m)
title('Message signal')
xlabel('Time in S')

enter image description here

我得到了正确的正弦波。这里到底发生了什么?第一个代码有什么问题?

最佳答案

第一个代码片段的问题是采样周期正好是正弦曲线周期的一半。由于您使用的特定采样时刻,您始终在信号的空值处对信号进行采样。这就是为什么您会得到接近 0 的值(它们并不完全是 0,因为 floating-point arithmetic 固有的数字不准确)。

第二个代码片段中,从linspace开始在其端点包含,采样周期略有不同。所以你不会遇到与上面相同的问题,并且你确实得到了正弦曲线。但是,您有一个不同的问题,现在已经很明显了,即 aliasing由于采样不足。观察绘制的正弦曲线的频率与应有的频率有何不同(小得多)。

这两个问题的解决方案提高采样率。根据Nyquist criterion ,至少两倍于最大信号频率的采样率足以重建原始信号。但这并不意味着直接绘制以该速率采集的样本将产生类似于信号的图形。为此,您需要一个远大于2的因子。另外,避免将采样率选择为正弦频率的整数倍,以防止采样过程与信号变化“耦合”而导致问题,如第一个代码段中所示。

因此,在您的代码中,尝试例如 Fs = 100/3*Fm(您可能需要放大才能正确查看信号)。

关于matlab - 在Matlab上绘制正弦波的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65890139/

相关文章:

python - 了解netlib fftpack的结果

javascript - 在 Canvas 上渲染同心六 Angular 形

Matlab - 神经网络训练

matlab - 如何在matlab中有效地构造一个依赖于索引的矩阵

c++ - 在C中的一堆数组中找到最大值

matlab - 在 Matlab 中使用 dlmwrite( ) 将数组值写入文件时没有回车符

c - 如何使用整数除法降低采样率?

c - 如何编写提供频率信息的 iTunes 插件

javascript - 非弹性碰撞仅使物体向右移动

java - 设置移动和旋转物体上的推力位置