Python 傅里叶变换 Fourier Transform

这篇具有很好参考价值的文章主要介绍了Python 傅里叶变换 Fourier Transform。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Python 傅里叶变换 Fourier Transform

flyfish

0 解释什么是Period 和 Amplitude

import matplotlib.pyplot as plt
import numpy as np

plt.style.use('seaborn-poster')
%matplotlib inline
x = np.linspace(0, 20, 201)
y = np.sin(x)

plt.figure(figsize = (8, 6))
plt.plot(x, y, 'b')
plt.ylabel('Amplitude')
plt.xlabel('Location (x)')
plt.show()

python 傅里叶变换,# Python,python,matplotlib,傅里叶变换,fft,ifft
一图胜千言
python 傅里叶变换,# Python,python,matplotlib,傅里叶变换,fft,ifft

Fast Fourier Transform (FFT) 快速傅里叶变换
快速傅里叶逆变换

1 在时域中绘制信号

import matplotlib.pyplot as plt
import numpy as np
from scipy.fftpack import fft, ifft
# sampling rate 也叫 Sampling frequency 
sr = 2000
# sampling interval 也叫 Sampling period  
ts = 1.0/sr
t = np.arange(0,1,ts)#start, stop, step #[0.000e+00 5.000e-04 1.000e-03 ... 9.985e-01 9.990e-01 9.995e-01]
#(len(t))==2000

freq_feature = 1
x = 3*np.sin(2*np.pi*freq_feature*t)

freq_feature =3
x += 2*np.sin(2*np.pi*freq_feature*t)

freq_feature = 7
x += 0.5* np.sin(2*np.pi*freq_feature*t)

plt.figure(figsize = (8, 6))
print(len(x))#Length of signal
plt.plot(t, x)
plt.ylabel('Amplitude')

plt.show()

p e r i o d = 1 f r e q u e n c y period = \frac{1}{frequency} period=frequency1
python 傅里叶变换,# Python,python,matplotlib,傅里叶变换,fft,ifft

2 绘制快速傅里叶变换图

X = fft(x)
N = len(X)
n = np.arange(N)#[   0    1    2 ... 1997 1998 1999]
T = N/sr
freq = n/T 
X = fft(x)

plt.figure(figsize = (8, 6))

plt.plot(freq, np.abs(X))

plt.xlabel('Freq (Hz)')
plt.ylabel('FFT Amplitude |X(freq)|')

python 傅里叶变换,# Python,python,matplotlib,傅里叶变换,fft,ifft

因为1、3、7相对2000,在坐标轴上太小把上述代码freq_feature 改成100,300,700更容易看出特点

freq_feature = 100
x = 3*np.sin(2*np.pi*freq_feature*t)

freq_feature =300
x += 2*np.sin(2*np.pi*freq_feature*t)

freq_feature = 700
x += 0.5* np.sin(2*np.pi*freq_feature*t)

python 傅里叶变换,# Python,python,matplotlib,傅里叶变换,fft,ifft

继续绘制freq_feature =1、3、7的傅里叶变换图

plt.figure(figsize = (8, 6))

plt.stem(freq, np.abs(X))
plt.xlim(0, 10)
plt.xlabel('Freq (Hz)')
plt.ylabel('FFT Amplitude |X(freq)|')
plt.show()

python 傅里叶变换,# Python,python,matplotlib,傅里叶变换,fft,ifft
这样就看的更清楚了

3 通过ifft快速傅里叶逆变换还原数据

plt.figure(figsize = (8, 6))
plt.plot(t, ifft(X), 'r')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude(ifft)')

python 傅里叶变换,# Python,python,matplotlib,傅里叶变换,fft,ifft

因为fft之后的结果是对称的所以可以只绘制one-sided
python 傅里叶变换,# Python,python,matplotlib,傅里叶变换,fft,ifft

4 可以转换成分钟显示

t_h = 1/f_oneside / (60)
plt.figure(figsize=(8,6))
plt.plot(t_h, np.abs(X[:n_oneside])/n_oneside)
plt.xlabel('Period ($m$)')
plt.show()

python 傅里叶变换,# Python,python,matplotlib,傅里叶变换,fft,ifft文章来源地址https://www.toymoban.com/news/detail-828679.html

5 完整代码

# -*- coding: utf-8 -*-

import matplotlib.pyplot as plt
import numpy as np
from scipy.fftpack import fft, ifft
# sampling rate 也叫 Sampling frequency 
sr = 2000
# sampling interval 也叫 Sampling period  
ts = 1.0/sr
t = np.arange(0,1,ts)#start, stop, step #[0.000e+00 5.000e-04 1.000e-03 ... 9.985e-01 9.990e-01 9.995e-01]
#(len(t))==2000

freq_feature = 1
x = 3*np.sin(2*np.pi*freq_feature*t)

freq_feature =3
x += 2*np.sin(2*np.pi*freq_feature*t)

freq_feature = 7
x += 0.5* np.sin(2*np.pi*freq_feature*t)

plt.figure(figsize = (8, 6))
print(len(x))#Length of signal
plt.plot(t, x)
plt.ylabel('Amplitude')

plt.show()



X = fft(x)
N = len(X)
n = np.arange(N)#[   0    1    2 ... 1997 1998 1999]
T = N/sr
freq = n/T 
X = fft(x)

plt.figure(figsize = (8, 6))

plt.stem(freq, np.abs(X))
plt.xlim(0, 10)
plt.xlabel('Freq (Hz)')
plt.ylabel('FFT Amplitude |X(freq)|')
plt.show()


plt.figure(figsize = (8, 6))
plt.plot(t, ifft(X), 'r')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude(ifft)')



# Get the one-sided specturm
n_oneside = N//2
# get the one side frequency
f_oneside = freq[:n_oneside]+1
print("f_oneside:",f_oneside)

plt.figure(figsize = (12, 6))
plt.plot(f_oneside, np.abs(X[:n_oneside]))
plt.xlabel('Freq (Hz)')
plt.ylabel('FFT Amplitude one-sided')
plt.show()



t_h = 1/f_oneside / (60)
plt.figure(figsize=(8,6))
plt.plot(t_h, np.abs(X[:n_oneside])/n_oneside)
plt.xlabel('Period ($m$)')
plt.show()

到了这里,关于Python 傅里叶变换 Fourier Transform的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python轴承故障诊断 (一)短时傅里叶变换STFT

    目录 前言 1 短时傅里叶变换STFT原理介绍 1.1 傅里叶变换的本质 1.2 STFT概述 1.3 STFT的原理和过程 1.3.1 时间分割 1.3.2 傅里叶变换 1.3.3 时频图: 1.4 公式表示 2 基于Python的STFT实现与参数对比 2.1 代码示例 2.2 参数选择和对比 2.2.1 nperseg(窗口长度): 2.2.2 noverlap(重叠长度): 2

    2024年02月03日
    浏览(45)
  • Python中利用FFT(快速傅里叶变换)进行频谱分析

    本文将从实例的角度出发讲解fft函数的基本使用,不包含复杂的理论推导。 要对一个信号进行频谱分析,首先需要知道几个基本条件。 采样频率fs 信号长度N(信号的点数) 采样频率fs: 根据采样定理可知,采样频率应当大于等于被测信号里最高频率的2倍,才能保证不失真

    2024年01月17日
    浏览(51)
  • OpenCV-Python中的图像处理-傅里叶变换

    傅里叶变换经常被用来分析不同滤波器的频率特性。我们可以使用 2D 离散傅里叶变换 (DFT) 分析图像的频域特性。实现 DFT 的一个快速算法被称为快速傅里叶变换( FFT)。 对于一个正弦信号:x (t) = A sin (2πft), 它的频率为 f,如果把这个信号转到它的频域表示,我们会在频率

    2024年02月12日
    浏览(42)
  • Python-OpenCV中的图像处理-傅里叶变换

    傅里叶变换经常被用来分析不同滤波器的频率特性。我们可以使用 2D 离散傅里叶变换 (DFT) 分析图像的频域特性。实现 DFT 的一个快速算法被称为快速傅里叶变换( FFT)。 对于一个正弦信号:x (t) = A sin (2πft), 它的频率为 f,如果把这个信号转到它的频域表示,我们会在频率

    2024年02月12日
    浏览(62)
  • (数字图像处理MATLAB+Python)第四章图像正交变换-第一节:离散傅里叶变换

    一维离散傅里叶变换(Discrete Fourier Transform,DFT) :是一种数学技术,用于将代表离散时间信号的N个复数序列从 时域转换到频域 。DFT被广泛用于许多应用,如音频和图像处理、通信和控制系统。DFT是傅里叶变换的离散版本,傅里叶变换是一种用于分析频域信号的连续数学技

    2023年04月13日
    浏览(94)
  • python数字图像处理基础(七)——直方图均衡化、傅里叶变换

    均衡化原理 图像均衡化是一种基本的图像处理技术,通过更新图像直方图的像素强度分布来调整图像的全局对比度。这样做可以使低对比度的区域在输出图像中获得更高的对比度。 简单理解:改变图像对比度,让色彩更丰富,灰度值直方图:瘦高 - 均衡 本质上,直方图均衡

    2024年01月18日
    浏览(57)
  • 傅里叶变换音频加入噪声和去除噪声(python二维fft2,ifft2)

    简介 fft (a) [, n, axis, norm] ) 计算一维离散傅立叶变换。 ifft (a) [, n, axis, norm] ) 计算一维逆离散傅立叶变换。 fft2 (a) [, s, axes, norm] ) 计算二维离散傅里叶变换。 ifft2 (a) [, s, axes, norm] ) 计算二维逆离散傅立叶变换。 fftn (a) [, s, axes, norm] 

    2023年04月09日
    浏览(47)
  • 跟我学Python图像处理丨傅里叶变换之高通滤波和低通滤波

    摘要: 本文讲解基于傅里叶变换的高通滤波和低通滤波。 本文分享自华为云社区《[Python图像处理] 二十三.傅里叶变换之高通滤波和低通滤波》,作者:eastmount 。 傅里叶变换的目的并不是为了观察图像的频率分布(至少不是最终目的),更多情况下是为了对频率进行过滤,

    2024年02月04日
    浏览(53)
  • 傅里叶级数和傅里叶变换之间的关系推理及应用

    傅里叶级数和傅立叶变换是傅里叶分析的两个主要工具,它们之间有密切的关系。 傅里叶级数是将一个周期函数分解为一系列正弦和余弦函数的和。它适用于周期性信号,可以将周期函数表示为一组振幅和相位不同的谐波分量的和。傅里叶级数展示了一个周期函数在不同频率

    2024年02月07日
    浏览(58)
  • 傅里叶变换

    在计算机视觉中,有一个经典的变换被广泛使用——傅里叶变换。傅里叶变换是将时间域上的信号转变为频率域上的信号,进而进行图像去噪、图像增强等处理。 什么是时域(Time domain)?从我们出生,我们看到的世界都以时间贯穿,股票的走势、人的身高、汽车的轨迹都会

    2024年02月03日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包