Python 傅里叶分析

0. 一维序列卷积

  • np.convolve,注意 same/valid参数下(默认为 full),序列卷积出的结果的长度:

    >> np.convolve([1, 2, 3], [0, 1, 0.5])
    array([ 0. ,  1. ,  2.5,  4. ,  1.5])
    >> np.convolve([1, 2, 3],[0, 1, 0.5], 'same')
    array([ 1. ,  2.5,  4. ])
    >> np.convolve([1, 2, 3],[0, 1, 0.5], 'valid')
    array([2.5])

1. numpy 傅里叶变换

  • np.fft.fft:Y = np.fft.fft(y, 512)
  • 能量谱(表明各个频率分量的能量大小):Pyy = Y * np.conj(Y) / 512

2. 傅里叶频谱分析

从MATLAB帮助文档里扒下来的例子之——傅里叶变换用于频谱分析

傅里叶变换的一大用途是从混杂的时域信号中找出其中各频率成分的分布。
以一个由 50Hz、120Hz 两个频率正弦信号和随机噪声叠加得到的信号为例(采样频率 1000Hz):

import numpy as np
import matplotlib.pyplot as plt

t = np.arange(0, .6, .001)
    # 0.001 => 采样频率
x = np.sin(2*np.pi*50*t) + np.sin(2*np.pi*120*t)
y = x + 2*np.random.randn(t.size)

# plt.plot(t[:50], y[:50])
# plt.show()

Y = np.fft.fft(y, 512)
Pyy = Y * np.conj(Y) / 512
plt.plot(np.round(1000*np.arange(256)/512), Pyy[:256])
plt.show()
原文地址:https://www.cnblogs.com/mtcnn/p/9421009.html