python实现离散傅里叶变换
初步认识傅里叶变换:
认识傅里叶变换
讲的较为通俗,图文并茂
离散傅里叶变换(DFT)的推导:
DFT推导
关于SDFT,mSDFT的推导:
SDFT,mSDFT
下面用python实现DFT:
首先,导入需要的包
import numpy as np
import matplotlib.pyplot as plt
from scipy.fftpack import fft, ifft
接着,定义自己实现的DFT函数:
def myDFT(ys, k, N, fs):''':param ys:离散时域信号:param k:频域索引:param N:采样点数:param fs:采样信号:return:'''Xk = []for i in range(k):X = 0. + 0jfor j in range(N):X += ys[j]*(np.cos(2*np.pi/N *j *i)-1j*np.sin(2*np.pi/N *j *i))Xk.append(X)A = abs(np.array(Xk)) # 计算模值amp_x = A / N * 2 # 纵坐标变换label_x = np.linspace(0, int(N / 2) - 1, int(N / 2)) # 生成频率坐标amp = amp_x[0:int(N / 2)] # 选取前半段计算结果即可,幅值 对称fs = fs # 计算采样频率fre = label_x / N * fs # 频率坐标变换return Xk, A, amp, fre
使用scipy.fftpack的fft用于比较,验证自己实现的DFT算法的正确性
# 简单定义一个FFT函数
def myfft(x, t, fs):fft_x = fft(x) # fft计算amp_x = abs(fft_x)/len(x)*2 # 纵坐标变换 abs:求模长label_x = np.linspace(0,int(len(x)/2)-1,int(len(x)/2)) # 生成频率坐标amp = amp_x[0:int(len(x)/2)] # 选取前半段计算结果即可 对称# amp[0] = 0 # 可选择是否去除直流量信号fre = label_x/len(x)*fs # 频率坐标变换pha = np.unwrap(np.angle(fft_x)) # 计算相位角并去除2pi跃变return amp,fre,pha # 返回幅度和频率
最后,生成一个信号用于验证
Ts = 1 # 采样时间
fs = 1400 # 采样频率
N = Ts * fs # 采样点数
# 在Ts内采样N个点
xs = np.linspace(0, Ts, int(N))# 生成采样信号 由180Hz,390Hz和600Hz的正弦波叠加
ys = 7.0*np.sin(2*np.pi*180*xs) + 2.8*np.sin(2*np.pi*390*xs) + 5.1*np.sin(2*np.pi*600*xs)amp, fre, pha = myfft(ys, xs, fs) # 调用scipy.fftpack里的fft
Xk, A, amp2, fre2 = myDFT(ys, int(N), int(N), fs)# 绘图
plt.subplot(221)
plt.plot(xs, ys)
plt.title('OriSignal')
plt.xlabel('Time / s')
plt.ylabel('Intencity / cd')# 反傅里叶变换
ys390 = 2.8*np.sin(2*np.pi*390*xs)
H = np.zeros((int(N)))
H[390-50:390+50] = 1
H[1400-390-50:1400-390+50] = 1 # 将390Hz附近的频率获取
IFFT = ifft(H*Xk)
plt.subplot(223)
plt.plot(xs, IFFT, alpha=0.75, color='r')
plt.plot(xs, ys390, alpha=0.75, color='g')
plt.legend(['IFFT', 'ys390'])
plt.title('IFFT Filter')plt.subplot(222)
plt.plot(fre, amp)
plt.title("'fft's Amplitute-Frequence-Curve")
plt.ylabel('Amplitute / a.u.')
plt.xlabel('Frequence / Hz')plt.subplot(224)
plt.plot(fre2, amp2)
plt.title("myDFT's Amplitute-Frequence-Curve")
plt.ylabel('DFT Amplitute / a.u.')
plt.xlabel('DFT Frequence / Hz')
plt.show()
实验结果如下:
图1是原始信号,图2是python封装好的fft的试验结果,图4是自定义的DFT,从试验结果来看,自己实现的DFT可以正确分解原始信号。
python实现离散傅里叶变换相关推荐
- 【Python】可视化的离散傅里叶变换+快速傅里叶变换后时域信号的频域分析
前面的知识这里就不介绍了,下面是Python语言实现的离散傅里叶变换的处理: 时域信号的函数表达 要处理的时域信号: f(t)=sin(t)+2sin(3t)+2cos(2t)+4sin(15t)f( ...
- (数字图像处理MATLAB+Python)第四章图像正交变换-第一节:离散傅里叶变换
文章目录 一:一维离散傅里叶变换 (1)定义 (2)实例 二:一维快速傅里叶变换 (1)定义 (2)实例 三:二维离散傅里叶变换 (1)定义 (2)程序 四:二维离散傅里叶变换的性质 (1)可分性 ( ...
- Python 二维离散傅里叶变换
Python 二维离散傅里叶变换 文章目录 Python 二维离散傅里叶变换 需要的库 计算两张图片的PSNR 二维离散傅里叶变换 二维离散傅里叶逆变换 频域平移 绘制频域图像 需要的库 import ...
- 第4章 Python 数字图像处理(DIP) - 频率域滤波5 - 二变量函数的傅里叶变换、图像中的混叠、二维离散傅里叶变换及其反变换
目录 二变量函数的傅里叶变换 二维冲激及其取样性质 二维连续傅里叶变换对 二维取样和二维取样定理 图像中的混叠 二维离散傅里叶变换及其反变换 二变量函数的傅里叶变换 二维冲激及其取样性质 两个连续变量 ...
- 第4章 Python 数字图像处理(DIP) - 频率域滤波4 - 单变量的离散傅里叶变换DFT
目录标题 单变量的离散傅里叶变换 由取样后的函数的连续变换得到DFT 取样和频率间隔的关系 单变量的离散傅里叶变换 由取样后的函数的连续变换得到DFT 对原函数的变换取样后的业的发展的变换F~(μ)\ ...
- python离散数据傅里叶变换公式_离散傅里叶变换笔记
给定N个点的一维数组 的离散傅里叶变换对由下面两式给出: 离散傅里叶变换是将离散信号分解为多个离散三角函数,并能给出每个三角函数的幅值 .频率 .初相位 .即找一批函数形如: 来叠加出任意给定的离散信 ...
- 独家|OpenCV 1.7 离散傅里叶变换
翻译:陈之炎 校对:李海明本文约2400字,建议阅读5分钟本文为大家介绍了OpenCV离散傅里叶变换. 目标 本小节将寻求以下问题的答案: 什么是傅立叶变换,为什么要使用傅立叶变换? 如何在OpenC ...
- 基于python的快速傅里叶变换FFT(二)
基于python的快速傅里叶变换FFT(二) 本文在上一篇博客的基础上进一步探究正弦函数及其FFT变换. 知识点 FFT变换,其实就是快速离散傅里叶变换,傅立叶变换是数字信号处理领域一种很重要的算 ...
- 基于python的快速傅里叶变换FFT(一)
基于python的快速傅里叶变换FFT(一) FFT可以将一个信号变换到频域.有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了.这就是很多信号分析采用FFT变换的原因. ...
最新文章
- 简单易上手编译FFmpeg
- el replace 表达式_EL表达式截取字符串 各种字符串操作的方式全解 泽0715新浪博客...
- 40亿次仿真学习:人工智能5:0大胜人类飞行员
- 【闲聊产品】之五:谁来背黑锅?
- 对系统故障处理的思考
- Linux复习-硬盘相关知识点
- Drool7s kmodule的作用--系列02课
- 计算机会议论文扩充期刊,计算机权威期刊 会议.doc
- stm32L476RG,通过串口打印信息
- 火狐浏览器代理设置:
- 苯小孩的伤感空间日志发布:一个人,一座城,满心疼
- BH1750 STM32 驱动程序
- 百度地图坐标转成腾讯地图坐标
- 对一个文件夹下的图片进行批量缩放(resize)处理
- python如何画点_python matplotlib 如何画点 而不要画点之间的连线?
- 如何利用小程序进行营销?
- Win10 打印机共享问题解决实录
- 网络图片转换为文件类型(File)
- 关于项目报告的写法问题
- 教你如何下载微信公众号的音频文件
热门文章
- PointNet 学习笔记
- Navicat使用亮点
- vue+MathJax 显示数学公式
- 【win11 22h2升级的坎坷经历】
- 配置nginx的Gzip功能实现网页的压缩和图片的压缩
- Web渗透之信息收集——目录扫描从御剑到Dirbuster
- ECNU OJ学习记录
- 计算机网络面试的基本问题
- WSN 数据链路层协议 SMAC,TMAC…TRAMA...BMAC ,XMAC, ZMAC
- (轉貼) Bit Twiddling Hacks (SOC) (Verilog) (C)