实现傅里叶变换并作图的python代码
时间: 2024-05-01 07:19:39 浏览: 9
以下是Python中实现傅里叶变换并作图的代码示例:
```python
import numpy as np
import matplotlib.pyplot as plt
# 生成需要处理的信号
t = np.linspace(0, 2 * np.pi, 1000)
y = 3 * np.sin(5 * t) + 2 * np.cos(10 * t) + np.random.rand(len(t))
# 计算信号的傅里叶变换
Y = np.fft.fft(y)
# 取前一半的幅值,排除直流分量和镜像部分
amplitude = 2 / len(t) * np.abs(Y[:len(t) // 2])
# 计算对应的频率
frequency = np.linspace(0, 1 / (2 * (t[1]-t[0])), len(t) // 2)
# 绘制图像
plt.figure()
plt.plot(frequency, amplitude)
plt.xlabel('Frequency (Hz)')
plt.ylabel('Amplitude')
plt.show()
```
这段代码可以生成一个包含傅里叶变换结果的频谱图像,可以帮助我们可视化信号包含的频率信息。
相关问题
傅里叶变换实现代码python
以下是Python实现的傅里叶变换代码:
```python
import numpy as np
def DFT(x):
"""
Discrete Fourier Transform (DFT)
"""
N = len(x)
X = np.zeros(N, dtype=np.complex)
for k in range(N):
for n in range(N):
X[k] += x[n] * np.exp(-2j * np.pi * k * n / N)
return X
def FFT(x):
"""
Fast Fourier Transform (FFT)
"""
N = len(x)
if N == 1:
return x
X_even = FFT(x[::2])
X_odd = FFT(x[1::2])
factor = np.exp(-2j * np.pi * np.arange(N) / N)
return np.concatenate([X_even + factor[:N//2] * X_odd,
X_even + factor[N//2:] * X_odd])
```
其中,DFT函数是使用暴力方法实现的离散傅里叶变换,FFT函数是使用快速傅里叶变换算法实现的傅里叶变换。
使用方法:
```python
x = np.array([1, 2, 3, 4])
X = DFT(x)
print(X)
X = FFT(x)
print(X)
```
输出:
```
[10.+0.j -2.+2.j -2.+0.j -2.-2.j]
[10.+0.j -2.+2.j -2.+0.j -2.-2.j]
```
快速傅里叶变换的python代码实现
以下是Python中进行快速傅里叶变换的代码实现:
```python
import numpy as np
def fft(x):
n = len(x)
if n == 1:
return x
even = fft(x[0::2])
odd = fft(x[1::2])
factor = np.exp(-2j * np.pi * np.arange(n) / n)
return np.concatenate([even + factor[:n//2] * odd,
even + factor[n//2:] * odd])
x = np.array([1, 2, 3, 4])
print(fft(x))
```
输出结果为:
```
[10.+0.j -2.+2.j -2.+0.j -2.-2.j]
```
其中,`fft()`函数接受一个长度为 $2^k$ 的序列,并返回其傅里叶变换结果。上面的代码实现了递归式的 Cooley-Tukey FFT 算法。