python用傅里叶变换实现方波的分解
时间: 2023-06-19 21:06:07 浏览: 80
首先,我们需要导入必要的库:
```python
import numpy as np
import matplotlib.pyplot as plt
```
然后,我们可以生成一个方波信号:
```python
t = np.linspace(0, 1, 500, endpoint=False)
square_wave = np.concatenate((np.zeros(250), np.ones(250)))
```
接下来,我们可以使用 `numpy` 库中的傅里叶变换函数 `fft` 对方波信号进行傅里叶变换:
```python
square_wave_fft = np.fft.fft(square_wave)
```
为了将傅里叶变换得到的复数结果可视化,我们可以使用 `numpy` 库中的函数 `abs` 来计算傅里叶变换的幅度:
```python
square_wave_fft_magnitude = abs(square_wave_fft)
```
我们可以将傅里叶变换的幅度可视化:
```python
plt.plot(square_wave_fft_magnitude)
plt.show()
```
接下来,我们可以使用傅里叶变换的结果来重构原始信号。我们可以将前 `n` 个傅里叶系数相加,来近似重构原始信号:
```python
n = 10
square_wave_reconstructed = np.fft.ifft(square_wave_fft[:n])
```
我们可以将重构得到的信号可视化:
```python
plt.plot(t, square_wave, label='original')
plt.plot(t, square_wave_reconstructed.real, label='reconstructed')
plt.legend()
plt.show()
```
完整代码如下:
```python
import numpy as np
import matplotlib.pyplot as plt
t = np.linspace(0, 1, 500, endpoint=False)
square_wave = np.concatenate((np.zeros(250), np.ones(250)))
square_wave_fft = np.fft.fft(square_wave)
square_wave_fft_magnitude = abs(square_wave_fft)
plt.plot(square_wave_fft_magnitude)
plt.show()
n = 10
square_wave_reconstructed = np.fft.ifft(square_wave_fft[:n])
plt.plot(t, square_wave, label='original')
plt.plot(t, square_wave_reconstructed.real, label='reconstructed')
plt.legend()
plt.show()
```
阅读全文