考虑f(t):当自变量小于0时函数取值为-0.5,当自变量大于0时函数取值0.5,对它做傅里叶级数展开,画两张图,第一张画出级数展开求和后的坐标图,第二张画出各项级数的坐标图,用PYTHON,用DFT方法,且只需计算前10项的傅里叶级数
时间: 2024-12-09 20:18:47 浏览: 20
在Python中,我们可以使用`numpy`库来进行离散傅立叶变换(DFT)以及绘图。首先,我们需要定义函数`f(t)`,然后将其转换成离散形式以便进行DFT。对于这个特定的函数,由于它是分段线性的,傅立叶级数会非常简单,因为它实际上是一个简谐信号的周期延伸。
```python
import numpy as np
import matplotlib.pyplot as plt
# 定义函数 f(t)
def f(t):
t = np.atleast_1d(t)
return (-0.5 if t < 0 else 0.5).astype(float)
# 确定时间步长和样本点数量
dt = 0.01
T = 1 # 周期
n_samples = int(T / dt) + 1
# 创建时间数组
t = np.arange(n_samples) * dt
# 对f(t)进行离散化处理
df = f(t)
# 计算前10项的傅立叶系数 (假设是偶函数,只取正频率部分)
coeffs = np.fft.rfft(df, n=10) # rfft返回实数序列
freqs = np.fft.fftfreq(n_samples, d=dt)[:10]
# 绘制原始信号和傅立叶级数
fig, axs = plt.subplots(2, figsize=(10, 8))
axs[0].plot(t, df, label='Original Signal')
axs[0].set_title('Function f(t) and its Fourier Series Sum')
axs[0].grid(True)
axs[0].legend()
# 只保留前10项
sum_series = np.zeros_like(df)
for i, c in enumerate(coeffs):
sum_series += c * np.cos(freqs[i] * 2 * np.pi * t)
axs[1].plot(t, sum_series, label='First 10 Terms Sum')
axs[1].plot(t, df, 'o', label='Original Data Points', ms=4)
axs[1].set_xlabel('Time')
axs[1].set_ylabel('Amplitude')
axs[1].legend()
plt.tight_layout()
plt.show()
```
阅读全文