python fft ifft

article/2025/8/28 1:18:22

文章目录

  • 条件
  • 代码
  • 实例

条件

任何一个满足狄利克雷条件的函数都可以通过傅里叶基数展开。
numpy和scipy中都有fft变换,且效果都是一样的。

代码

import numpy as np
from scipy.fftpack import fft,ifft
import matplotlib.pyplot as plt
from matplotlib.pylab import mplmpl.rcParams['font.sans-serif'] = ['SimHei']   #显示中文
mpl.rcParams['axes.unicode_minus']=False       #显示负号#原始数据生成
x=np.linspace(0,2,3000)#设置自变量在0、2上采样3000个点,那么采样率为1500点/x轴单位
y=10+7*np.sin(2*np.pi*30*x) + 5*np.sin(2*np.pi*60*x+10/180*np.pi)+3*np.sin(2*np.pi*100*x)#常量幅值是10,在30Hz,60Hz,100Hz上,对应的幅值未7、5、3对应的相位为0度、10度、0度
#原始数据绘制
plt.subplot(221)
plt.plot(x,y,'-')
plt.title('原始数据')fft_y=fft(y)#傅里叶变换yreal =fft_y.real#获取实部
yimag = fft_y.imag#获取虚部,虚部和实部是要计算相角。
ydegree = np.angle(fft_y)*180/np.pi#复数的辐角就是相角,输出的是弧度,这里转为角度yabs = abs(fft_y)#计算频率对应的幅值
yabs = yabs/len(x)*2#幅值归一化,除了常数项以外,都除以采样点数的一半
yabs[0]/=2#常数项除以采样点数#计算幅值和相角对应的频率,
#幅值和相角会计算采样点数个数据,这里就是3000个点,第一个是常量剩下2999个点,幅值的2999点关于中间对称,相角的2999点关于中间奇对称,即1号数据=-2999号数据
#所以有用的幅值和相角就是1500个数据,而采样率是1500Hz,那么一个幅值对应一个整数频率
#如果x=np.linspace(0,1,3000)那么,一个幅值对应两个整数频率,所以要想幅值和频率对应上要获得频率坐标轴如下:
#x轴上的一个1表示一个样周期,所以如果x取值1到3取5000个点,那么就经过了两个周期,相当于一个采样周期采集2500个点,即采样率是2500Hz,所以这里要除以范围,才能和计算得到的频率幅值对应
xfft = range(len(x))/(max(x)-min(x))
#绘制相频图
plt.subplot(222)
plt.plot(xfft,ydegree, '-')
plt.title('相频图')
#绘制幅频图
plt.subplot(223)
plt.plot(xfft,yabs, '*')
plt.title('幅值归一化')#开始分析
#发现相频图数据很乱,因为大部分相角对应的幅值很小,所以不管其相角是0还是80在整体上意义不大,我们只关心大幅值对应的相角,只有这些相角才会影响整体数据走向,所以提取大的幅值对应的相角
for i in range(len(yabs)):if yabs[i]>2:print(xfft[i],ydegree[i]+90)
"""
打印数据:
0.0 0.0
30.0 -86.39368585633036
60.0 -72.7941709180644
100.0 -78.00623508482248
1400.0 78.00623508482248
1440.0 72.7941709180644
1470.0 86.39368585633036
"""
#可以看到幅值是找对了,但是相角好像差的很大,但是这些相角加上90度会发现较为接近设置值,因为FFT展开默认展开成cos,刚好和sin相差90度#开始根据展开反算原始函数,看看是否能对应上#通过自带函数反变换
fft_y_n=ifft(fft_y)
plt.subplot(221)
plt.plot(x,fft_y_n,'r-',lw="0.5")#通过幅值和角度复原函数
y_n= []
for i in xfft:temp = [ yabs[j]*np.cos(i*2*np.pi*x[j]+ydegree[j]/180*np.pi) for j in range(int(len(yabs)/2))]#这里需要注意两点,第一点是i从xfft中取,第二点是range(int(len(yabs)/2))用一半数据叠加y_n.append(sum(temp))fft_y_n=ifft(fft_y)
plt.plot(x,y_n,'g-',lw="0.5")
plt.show()
#三条曲线重合

在这里插入图片描述

实例

一段没有横坐标是的数据,(其实数据一定会有横坐标的,最不行可以用index作为横坐标。)如每个小时的温度数据,假如说有50个小时,那么我认为这50个小时对应从x坐标是0-1那么时间和x坐标就有对应关系了,1小时对应0.2,根据上面进行FFT展开,可以获得x和温度的不同频率三角函数,把x用时间替换就是时间关于频率的三角函数。

import numpy as np
from scipy.fftpack import fft,ifft
import matplotlib.pyplot as plt
from matplotlib.pylab import mpl
import sysmpl.rcParams['font.sans-serif'] = ['SimHei']   #显示中文
mpl.rcParams['axes.unicode_minus']=False       #显示负号h=np.linspace(0,59,60)#改为np.linspace(0,47,48)
tem =10+7*np.sin(2*np.pi/24*h)#频率是1/24
#定义所有的数据构成一个周期,与上面的tem数据对应,x上一个是1/60小时
x=np.linspace(0,1,60)#改为np.linspace(0,1,48)后清晰可见fft_y=fft(tem)#傅里叶变换yreal =fft_y.real#获取实部
yimag = fft_y.imag#获取虚部,虚部和实部是要计算相角。
ydegree = np.angle(fft_y)*180/np.pi#复数的辐角就是相角,输出的是弧度,这里转为角度yabs = abs(fft_y)#计算频率对应的幅值
yabs = yabs/len(x)*2#幅值归一化,除了常数项以外,都除以采样点数的一半
yabs[0]/=2#常数项除以采样点数#绘制相频图
plt.subplot(221)
plt.plot(x,ydegree, '-')
plt.title('相频图')
#绘制幅频图
plt.subplot(222)
plt.plot(x,yabs, '*')
plt.title('幅值归一化')#幅值最大值应该在1/24处,显然没有1/24这个值,那么就在2/60和3/60之间,所以在第2、4个数上大道最大,修改采样点数到频率到 组成的每个函数频率可以整除采样点数分之1即可实现,每个频率上清晰
plt.show()

http://chatgpt.dhexx.cn/article/VKqGmf0S.shtml

相关文章

FFT专题:IFFT后信号如何重建

ifft(outFFTData, g_fft_temp, inFFTData, g_twiddle_ifft, twiddle_stride, F_WLEN);//思考ifft输出的复数结果怎么给到硬件输出 之前一直关注FFT后信号奔赴到频域处理,那么频域处理完后,怎么重建信号呢? 给出一段FFT和IFFT函数源码 int nFrameRunCount 0;#pragma section…

数字信号处理基础(二):FFT和IFFT的使用以及详细分析代码书写思路

目录 1. fft和ifft的原理1.1 fft1.2 ifft 2. 书写代码思路3. 完整代码4. 结果图 1. fft和ifft的原理 1.1 fft fft是快速傅里叶变换,是MATLAB中计算信号频谱的函数,使用方法是fft(x),直接对信号x进行fft计算。 由于fft函数计算信号的频谱是0…

信号处理中的反傅里叶变换(IFFT)原理

信号处理中,经常需要将信号转换到频域进行分析,有时候还会从频域转回时域,用到FFT和IFFT函数。 FFT变换是将信号从时域转换到频域,在时域看起来复杂的信号转换到频域看起来就方便容易了很多。但有时候也需要将频域信号转换到时域…

adb下载、安装、环境配置

一:adb安装 adb下载链接:https://pan.baidu.com/s/1Vd6KyZ6vT2Qtmhazwre4OQ 提取码:3dx1 安装: 1.双击adb.exe文件,并运行。 2.添加环境变量: 右击计算机–属性—高级系统设置—高级—环境变量—新建&…

windows下载安装adb(极其简单)

单独安装adb,不安装sdk 下载adb Google很好的心,直接放出ADB的档案供人下载。下档路径如下: Windows版本:https://dl.google.com/android/repository/platform-tools-latest-windows.zip Mac版本:https://dl.google…

ADB-adb命令安装app

下载adb 安装adb 将名称中含有adb的文件,和fastboot.exe复制到 c:/windows/system32目录将名称中含有adb的所有文件复制到 c:/windows/system目录将adb.exe和AdbWinApi.dll复制到c:/windows/SysWoW64目录 有线安装apk 连接上数据线,然后把手机开发者模…

adb详细教程(一)-下载安装与环境变量配置

对于Android开发来说,adb是再熟悉不过的调试工具 但其实对于移动端的测试来说,adb也是一个十分重要的、能够提高测试工作效率的工具。 文章目录 一、介绍二、下载地址三、安装四、配置环境变量 一、介绍 全称 adb全称全称为Android Debug Bridge&#x…

mac下载安装adb环境

目录 方法一1、下载安装包2、下载完成后进行解压,目录路径注意不得包含中文3、配置环境变量4、验证安装是否成功 方法二1、安装homebrew2、安装adb3、运行adb 方法一 1、下载安装包 安装包下载地址 :https://developer.android.com/studio/releases/pl…

adb工具下载安装

一、adb环境配置 adb即Android Debug Bridge,就是可以通过窗口命令,使在pc端可以调试安卓移动端的一个工具包 我这里是默认电脑已经安装SDK的,如果没有也没关系,直接网上下载一个adb工具包一样的https://developer.android.goo…

adb环境配置

adb环境配置 1.下载工具包 工具包:platform-tools_r30.0.4-windows.zip 获取途径1:链接: https://pan.baidu.com/s/17BiARFlgsQa2wDETmoJIvQ?pwddsd2 提取码: dsd2 获取途径2:https://developer.android.google.cn/studio/releases/plat…

android adb驱动官方下载,adb驱动下载

这里给你简单的介绍一下adb驱动:adb驱动就是电脑与android设备的通信的客户端驱动程序。使用它可以直接操作管理android模拟器或者真实的andriod设备。 adb驱动百科介绍: Android设备(如手机)连接PC时所需要的驱动程序,一般Android设备连接WinXP是无需安装驱动的。 adb的全称…

windows ——adb下载与安装

一、adb下载 链接:https://pan.baidu.com/s/1D3eOkHsuAnZd6WoFEVC7xQ 提取码:sc94 二、adb安装 双击 adb-setup-1.3.exe 安装 可以查看此安装教程[转载]:http://m.mz6.net/detail/4506-13.html 三、adb安装成功验证 键盘快捷键:Wi…

adb下载安装教程(已安装Android studio)

adb下载安装教程(已安装Android studio) ①找到adb.exe的绝对路径如下: ②将绝对路径放入环境变量path中(绝对路径不带入adb.exe) 右击“此电脑”>“属性”>”高级系统设置“>”环境变量“>”path“ 双…

ADB下载及常用命令

ADB,即 Android Debug Bridge,它是 Android 开发/测试人员不可替代的强大工具 文章目录 预先准备adb的平台工具软件包下载配置环境变量 连接设备确认连接状态\查询已连设备USB 连接无线连接(Android11 及以上) 应用管理查看应用列…

ADB 下载地址

adbshell 点击ADBkit下载

mac os adb下载

一 adb安装: 打开终端,输入命令 1.安装homebrew: 方式一:ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 方式二:/bin/zsh -c "$(curl -fsSL https:/…

小知识·adb安装和使用方法

目录 一、adb是什么? 二、adb有什么作用 三、如何启用adb调试 四 如何判断设备连接正常 五 如何下载安装adb 1、adb下载地址: 2、按装步骤 六、adb命令大全 1.查看设备 2.Adb应用管理 3.安装APK 4.卸载APK 5.查看设备信息 5.使用 Monkey 进…

adb下载安装及使用

1.adb下载安装 有两种方法: 1.下载一个adb的压缩包,直接解压,每次在解压的文件夹中执行命令操作即可,或者进行环境变量配置,这样以后无论在哪个文件都可以执行操作。 2.下载了Android Studio的文件中就带有adb&…

adb工具下载及安装

adb工具下载 点击下载adb工具 https://qny.aoarasi.com/software/adb/platform-tools_r33.0.0-windows.zip adb 工具安装 下载后解压 platform-tools_r33.0.0-windows.zip 文件 cmd进入adb.exe所在路径(比如我的在:D:\software\platform-tools_r33.…

AD20-DRC检查

点击下图中的红圈内选项: 就会出现: 第一个红圈可不勾选(可以不创建报告文件),第二个红圈中的填的稍微大一点。 接下来就是: 红圈中是安全间距检查,勾选可以检查板子中的安全间距。之后点击左…