叠加的正弦波逼近一个矩形波
flyfish
依次绘制1个、2个、4个和10个正弦波的叠加效果。每个正弦波的频率是基频的奇数倍,且幅度逐渐减小。最终,这些叠加的正弦波将逼近一个矩形波。
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 定义基本正弦波函数
def sine_wave(t, freq, amplitude=1):
return amplitude * np.sin(2 * np.pi * freq * t)
# 叠加正弦波
def sum_of_sines(t, num_waves):
result = np.zeros_like(t)
for n in range(1, num_waves * 2, 2):
result += sine_wave(t, n) / n
return result
# 时间范围
t = np.linspace(-2, 2, 1000)
# 创建图形
fig, axs = plt.subplots(2, 2, figsize=(12, 8))
# 单个正弦波
axs[0, 0].plot(t, sine_wave(t, 1))
axs[0, 0].set_title('1个正弦波')
axs[0, 0].grid(True)
# 2个正弦波的叠加
axs[0, 1].plot(t, sum_of_sines(t, 2))
axs[0, 1].set_title('2个正弦波的叠加')
axs[0, 1].grid(True)
# 4个正弦波的叠加
axs[1, 0].plot(t, sum_of_sines(t, 4))
axs[1, 0].set_title('4个正弦波的叠加')
axs[1, 0].grid(True)
# 10个正弦波的叠加
axs[1, 1].plot(t, sum_of_sines(t, 10))
axs[1, 1].set_title('10个正弦波的叠加')
axs[1, 1].grid(True)
# 调整布局
plt.tight_layout()
plt.show()