赞
踩
flyfish
傅里叶级数的基本形式 :
y
(
t
)
=
∑
n
=
1
,
3
,
5
,
…
N
4
A
n
π
sin
(
n
π
T
t
)
y(t) = \sum_{n=1,3,5,\ldots}^{N} \frac{4A}{n\pi} \sin\left(\frac{n\pi}{T} t\right)
y(t)=n=1,3,5,…∑Nnπ4Asin(Tnπt)
其中,
A
A
A 是振幅,
T
T
T 是周期,
n
n
n 是傅里叶级数的项数。
傅里叶级数中每一项的形式 :
y
n
(
t
)
=
4
A
n
π
sin
(
n
π
T
t
)
y_n(t) = \frac{4A}{n\pi} \sin\left(\frac{n\pi}{T} t\right)
yn(t)=nπ4Asin(Tnπt)
这个公式表示傅里叶级数中每一项的贡献。
t (时间) : 横坐标表示时间。
y (幅度) : 纵坐标表示傅里叶级数在该时间点的值。
f (频率) : 深度坐标表示傅里叶级数的项数对应的频率。
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # 定义傅里叶级数的参数 T = 2 * np.pi # 周期 A = 1 # 振幅 N = 11 # 级数的最大项数 # 定义傅里叶级数的函数 def fourier_series(t, N, A, T): y = np.zeros_like(t) for n in range(1, N + 1, 2): # 只考虑奇数项 y += (4 * A / (np.pi * n)) * np.sin((n * np.pi / T) * t) return y # 创建时间域和频率域的网格数据 t = np.linspace(0, 2 * T, 1000) f = np.array([1 / T, 3 / T, 5 / T, 7 / T, 9 / T, 11 / T]) T_grid, F_grid = np.meshgrid(t, f) # 创建3D图 fig = plt.figure(figsize=(12, 8)) ax = fig.add_subplot(111, projection='3d') # 绘制傅里叶级数的时域图像 for n in range(1, N + 1, 2): y = (4 * A / (np.pi * n)) * np.sin((n * np.pi / T) * t) ax.plot(t, n / T, zs=y, label=f'n={n}') # 设置坐标轴标签和刻度 ax.set_xlabel('t (时间)') ax.set_ylabel('f (频率)') ax.set_zlabel('y (幅度)') # 设置坐标轴的刻度 ax.set_xticks([0, np.pi, 2 * np.pi]) ax.set_xticklabels(['0', r'$\pi$', r'$2\pi$']) ax.set_yticks(f) ax.set_yticklabels([r'$\frac{1}{T}$', r'$\frac{3}{T}$', r'$\frac{5}{T}$', r'$\frac{7}{T}$', r'$\frac{9}{T}$', r'$\frac{11}{T}$']) ax.set_zticks([-A, 0, A]) ax.set_zticklabels([f'-{A}', '0', f'{A}']) plt.title('傅里叶级数的3D表示') plt.legend() plt.show()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。