初步认识傅里叶变换:
认识傅里叶变换
讲的较为通俗,图文并茂

离散傅里叶变换(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实现离散傅里叶变换相关推荐

  1. 【Python】可视化的离散傅里叶变换+快速傅里叶变换后时域信号的频域分析

    前面的知识这里就不介绍了,下面是Python语言实现的离散傅里叶变换的处理: 时域信号的函数表达 要处理的时域信号: f(t)=sin(t)+2sin(3t)+2cos(2t)+4sin(15t)f( ...

  2. (数字图像处理MATLAB+Python)第四章图像正交变换-第一节:离散傅里叶变换

    文章目录 一:一维离散傅里叶变换 (1)定义 (2)实例 二:一维快速傅里叶变换 (1)定义 (2)实例 三:二维离散傅里叶变换 (1)定义 (2)程序 四:二维离散傅里叶变换的性质 (1)可分性 ( ...

  3. Python 二维离散傅里叶变换

    Python 二维离散傅里叶变换 文章目录 Python 二维离散傅里叶变换 需要的库 计算两张图片的PSNR 二维离散傅里叶变换 二维离散傅里叶逆变换 频域平移 绘制频域图像 需要的库 import ...

  4. 第4章 Python 数字图像处理(DIP) - 频率域滤波5 - 二变量函数的傅里叶变换、图像中的混叠、二维离散傅里叶变换及其反变换

    目录 二变量函数的傅里叶变换 二维冲激及其取样性质 二维连续傅里叶变换对 二维取样和二维取样定理 图像中的混叠 二维离散傅里叶变换及其反变换 二变量函数的傅里叶变换 二维冲激及其取样性质 两个连续变量 ...

  5. 第4章 Python 数字图像处理(DIP) - 频率域滤波4 - 单变量的离散傅里叶变换DFT

    目录标题 单变量的离散傅里叶变换 由取样后的函数的连续变换得到DFT 取样和频率间隔的关系 单变量的离散傅里叶变换 由取样后的函数的连续变换得到DFT 对原函数的变换取样后的业的发展的变换F~(μ)\ ...

  6. python离散数据傅里叶变换公式_离散傅里叶变换笔记

    给定N个点的一维数组 的离散傅里叶变换对由下面两式给出: 离散傅里叶变换是将离散信号分解为多个离散三角函数,并能给出每个三角函数的幅值 .频率 .初相位 .即找一批函数形如: 来叠加出任意给定的离散信 ...

  7. 独家|OpenCV 1.7 离散傅里叶变换

    翻译:陈之炎 校对:李海明本文约2400字,建议阅读5分钟本文为大家介绍了OpenCV离散傅里叶变换. 目标 本小节将寻求以下问题的答案: 什么是傅立叶变换,为什么要使用傅立叶变换? 如何在OpenC ...

  8. 基于python的快速傅里叶变换FFT(二)

    基于python的快速傅里叶变换FFT(二) 本文在上一篇博客的基础上进一步探究正弦函数及其FFT变换. 知识点   FFT变换,其实就是快速离散傅里叶变换,傅立叶变换是数字信号处理领域一种很重要的算 ...

  9. 基于python的快速傅里叶变换FFT(一)

    基于python的快速傅里叶变换FFT(一) FFT可以将一个信号变换到频域.有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了.这就是很多信号分析采用FFT变换的原因. ...

最新文章

  1. 简单易上手编译FFmpeg
  2. el replace 表达式_EL表达式截取字符串 各种字符串操作的方式全解 泽0715新浪博客...
  3. 40亿次仿真学习:人工智能5:0大胜人类飞行员
  4. 【闲聊产品】之五:谁来背黑锅?
  5. 对系统故障处理的思考
  6. Linux复习-硬盘相关知识点
  7. Drool7s kmodule的作用--系列02课
  8. 计算机会议论文扩充期刊,计算机权威期刊 会议.doc
  9. stm32L476RG,通过串口打印信息
  10. 火狐浏览器代理设置:
  11. 苯小孩的伤感空间日志发布:一个人,一座城,满心疼
  12. BH1750 STM32 驱动程序
  13. 百度地图坐标转成腾讯地图坐标
  14. 对一个文件夹下的图片进行批量缩放(resize)处理
  15. python如何画点_python matplotlib 如何画点 而不要画点之间的连线?
  16. 如何利用小程序进行营销?
  17. Win10 打印机共享问题解决实录
  18. 网络图片转换为文件类型(File)
  19. 关于项目报告的写法问题
  20. 教你如何下载微信公众号的音频文件

热门文章

  1. PointNet 学习笔记
  2. Navicat使用亮点
  3. vue+MathJax 显示数学公式
  4. 【win11 22h2升级的坎坷经历】
  5. 配置nginx的Gzip功能实现网页的压缩和图片的压缩
  6. Web渗透之信息收集——目录扫描从御剑到Dirbuster
  7. ECNU OJ学习记录
  8. 计算机网络面试的基本问题
  9. WSN 数据链路层协议 SMAC,TMAC…TRAMA...BMAC ,XMAC, ZMAC
  10. (轉貼) Bit Twiddling Hacks (SOC) (Verilog) (C)