写一个傅里叶变换公式及代码
时间: 2023-05-29 20:05:30 浏览: 100
傅里叶变换公式:
$$ F(\omega) = \int_{-\infty}^{\infty} f(t) e^{-i\omega t} dt $$
其中,$F(\omega)$ 是频率域中的信号,$f(t)$ 是时域中的信号,$e^{-i\omega t}$ 是旋转复数。公式中的积分是连续的,适用于连续信号。
傅里叶变换的代码示例:
```python
import numpy as np
def fourier_transform(signal):
n = len(signal)
omega = np.exp(-2j * np.pi / n)
x = np.arange(n)
if n == 1:
return signal
signal_even = fourier_transform(signal[::2])
signal_odd = fourier_transform(signal[1::2])
factor = omega ** x
return np.concatenate([signal_even + factor[:n//2] * signal_odd,
signal_even + factor[n//2:] * signal_odd])
# 示例
signal = np.array([1, 2, 3, 4])
print(fourier_transform(signal))
```
输出结果为:
```
[10.+0.00000000e+00j -2.+2.00000000e+00j -2.-8.65956056e-16j
-2.-2.00000000e+00j]
```
这个函数计算了一个离散信号的傅里叶变换。它使用了分治法,将信号递归地拆分成偶数项和奇数项,然后将它们合并起来。时间复杂度为 $O(n \log n)$。