手写代码实现傅里叶变换
时间: 2023-08-26 09:06:53 浏览: 57
傅里叶变换(Fourier Transform)是一种将信号从时域(时间域)转换到频域(频率域)的技术。下面是一个用 Python 实现傅里叶变换的例子:
```python
import numpy as np
def fourier_transform(signal):
n = signal.shape[0]
x = np.arange(n)
k = x.reshape((n, 1))
e = np.exp(-2j * np.pi * k * x / n)
return np.dot(e, signal)
# 生成一个简单的信号,包含两个频率分别为 10Hz 和 30Hz 的正弦波
t = np.linspace(0, 1, 1000, endpoint=False)
signal = np.sin(2 * np.pi * 10 * t) + 0.5 * np.sin(2 * np.pi * 30 * t)
# 对信号进行傅里叶变换
freq_domain_signal = fourier_transform(signal)
# 绘制信号在时域和频域的图像
import matplotlib.pyplot as plt
plt.subplot(211)
plt.plot(t, signal)
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.subplot(212)
freqs = np.arange(signal.size)
plt.stem(freqs, np.abs(freq_domain_signal))
plt.xlabel('Frequency (Hz)')
plt.ylabel('Magnitude')
plt.show()
```
这段代码中,我们首先定义了一个 `fourier_transform` 函数,它接受一个一维数组 `signal` 作为输入,并返回它的傅里叶变换结果。在函数内部,我们使用了 numpy 库的一些函数来计算傅里叶变换。
接着,我们生成了一个简单的信号,包含两个频率分别为 10Hz 和 30Hz 的正弦波。然后对信号进行傅里叶变换,并绘制出信号在时域和频域的图像。