以较高的频率绘制罪孽

问题描述

我正在尝试绘制一些正弦波(纯js here中的代码示例)。

当频率为“低”(在这种情况下,freq = 10 hz)时,曲线非常漂亮:

enter image description here

问题是当我增加频率时(例如尝试设置var freq = 50):

enter image description here

很多波纹,它变得失真,不如曲线图好。如果我增加更多,甚至会更糟(例如,var freq = 8030很糟糕)。 当我在专业系统上看到这种图形时,它们就可以很好地显示

您将如何改进它? FFT,样条曲线,什么?哪个方法合适?

我真的不需要精度(例如,用于波形分析之类的东西),只需将其绘制得很好即可(例如,在Desmos https://www.desmos.com/calculator/eodkjlywjh中)。

解决方法

就像马特所说,这里的问题与plotting a discrete-time signal shows amplitude modulation中的问题相同:“在较高的频率下,当峰落在两个样本之间时,采样点可能比峰低很多。”这会导致波形的峰值发生变化,从而在图的顶部和底部产生一种波纹视觉效果。

提高采样分辨率会有所帮助。如果不能将采样分辨率提高太多,则将采样分辨率调整为正弦频率的最接近整数倍,然后设置采样相位,以便对波形峰值进行采样。例如,对于100 Hz的波cos(2 π (100*x + 0.3)),您可以在x [n] = n / 400-0.003的400 Hz采样。这样,每个周期有四个样本,其中x [0],x [4],x [8],...正好在峰上采样。

另一个想法:以较粗的线进行绘制可以帮助平滑某些缺陷。好像您链接的desmos示例使用的是3像素线宽。