.编写程序求周期性方波、三角波、锯齿波、矩形波函数等周期信号的不同 频率分量迭代效果并展示(即吉伯斯现象)。
时间: 2024-05-05 12:21:46 浏览: 189
test41a.zip_信号存储_时间周期循环_锯齿波_锯齿波 matlab_锯齿波发生器
以下是一个Python程序,用于生成周期性方波、三角波、锯齿波、矩形波函数,并展示吉布斯现象:
```python
import numpy as np
import matplotlib.pyplot as plt
# 生成周期性方波
def square_wave(x, duty_cycle):
return np.where(x % 1 < duty_cycle, 1, -1)
# 生成周期性三角波
def triangle_wave(x):
return np.arcsin(np.sin(2 * np.pi * x)) * 2 / np.pi
# 生成周期性锯齿波
def sawtooth_wave(x):
return np.mod(x, 1) * 2 - 1
# 生成周期性矩形波函数
def rectangle_wave(x, duty_cycle):
return np.where(x % 1 < duty_cycle / 2, 1, -1)
# 展示吉布斯现象
def plot_gibbs_phenomenon(func, N, duty_cycle):
x = np.linspace(0, 1, 1000)
y = func(x, duty_cycle)
fig, ax = plt.subplots()
ax.plot(x, y, label='Original')
for n in range(1, N):
a_n = 4 / (n * np.pi) * (1 - np.cos(n * np.pi * duty_cycle))
b_n = 4 / (n * np.pi) * np.sin(n * np.pi * duty_cycle)
fourier_series = a_n * np.cos(2 * np.pi * n * x) + b_n * np.sin(2 * np.pi * n * x)
y += fourier_series
ax.plot(x, y, label=f'n={n}')
ax.legend()
plt.show()
# 展示周期性方波的吉布斯现象
plot_gibbs_phenomenon(square_wave, 50, 0.5)
# 展示周期性三角波的吉布斯现象
plot_gibbs_phenomenon(triangle_wave, 50, None)
# 展示周期性锯齿波的吉布斯现象
plot_gibbs_phenomenon(sawtooth_wave, 50, None)
# 展示周期性矩形波函数的吉布斯现象
plot_gibbs_phenomenon(rectangle_wave, 50, 0.25)
```
这个程序使用numpy和matplotlib库来生成周期性方波、三角波、锯齿波、矩形波函数,并展示吉伯斯现象。函数`plot_gibbs_phenomenon`用于展示一个周期信号的吉伯斯现象,其中参数`func`是周期信号函数,`N`是展示的四阶傅里叶级数的数量,`duty_cycle`是矩形波函数的占空比。函数在每个四阶傅里叶级数上计算系数,并计算傅里叶级数的和以展示吉伯斯现象。
运行程序后,将会生成不同周期信号的吉伯斯现象图。在这些图中,可以看到在周期信号的跳跃点(例如周期性方波的上升和下降点)附近出现了震荡现象,这就是吉伯斯现象。随着傅里叶级数数量的增加,震荡现象变得越来越明显,但在跳跃点上仍会保持不连续性。
阅读全文