首先,需要注意的是,这个问题与1D和2D fft之间的差异无关,而是与总功率和平均功率如何随阵列中元素的数量而变化有关。在

当您说9的因子来自a中的元素比b中的元素多9倍时,您说得非常正确。令人困惑的是,你注意到你已经通过除以np.fft.fft2(a)/3000./3000.和{}进行了标准化,事实上,这些规范化对于得到空间和频率域中的总(非平均)功率是相等的是必要的。为了得到平均值,你必须再除以数组的大小。在

你的问题实际上是关于Parseval定理的,它指出两个领域(空间/时间和频率)的总功率是相等的。它的语句,对于DFT是this。注意,尽管右边是1/N,但这不是平均功率,而是总功率。1/N的原因是DFT的规范化约定。在

放在Python中,这意味着对于一个时间/空间信号sig,Parseval等价可以表述为:

np.sum(np.abs(sig)**2) == np.sum(np.abs(np.fft.fft(sig))**2)/sig.size

下面是一个完整的例子,从一些玩具箱开始(一维和二维数组填充一个1),最后是你自己的箱子。注意,我使用了的.size属性努比·恩达雷,返回数组中元素的总数。它相当于你的/1000./1000.等。希望这有帮助!在import numpy as np

print 'simple examples:'

# 1-d, 4 elements:

ones_1d = np.array([1.,1.,1.,1.])

ones_1d_f = np.fft.fft(ones_1d)

# compute total power in space and frequency domains:

space_power_1d = np.sum(np.abs(ones_1d)**2)

freq_power_1d = np.sum(np.abs(ones_1d_f)**2)/ones_1d.size

print 'space_power_1d = %f'%space_power_1d

print 'freq_power_1d = %f'%freq_power_1d

# 2-d, 4 elements:

ones_2d = np.array([[1.,1.],[1.,1.]])

ones_2d_f = np.fft.fft2(ones_2d)

# compute and print total power in space and frequency domains:

space_power_2d = np.sum(np.abs(ones_2d)**2)

freq_power_2d = np.sum(np.abs(ones_2d_f)**2)/ones_2d.size

print 'space_power_2d = %f'%space_power_2d

print 'freq_power_2d = %f'%freq_power_2d

# 2-d, 9 elements:

ones_2d_big = np.array([[1.,1.,1.],[1.,1.,1.],[1.,1.,1.]])

ones_2d_big_f = np.fft.fft2(ones_2d_big)

# compute and print total power in space and frequency domains:

space_power_2d_big = np.sum(np.abs(ones_2d_big)**2)

freq_power_2d_big = np.sum(np.abs(ones_2d_big_f)**2)/ones_2d_big.size

print 'space_power_2d_big = %f'%space_power_2d_big

print 'freq_power_2d_big = %f'%freq_power_2d_big

print

# asker's example array a and fft af:

print 'askers examples:'

a = np.random.randn(3000,3000)

af = np.fft.fft2(a)

# compute the space and frequency total powers:

space_power_a = np.sum(np.abs(a)**2)

freq_power_a = np.sum(np.abs(af)**2)/af.size

# mean power is the total power divided by the array size:

freq_power_a_mean = freq_power_a/af.size

print 'space_power_a = %f'%space_power_a

print 'freq_power_a = %f'%freq_power_a

print 'freq_power_a_mean = %f'%freq_power_a_mean

print

# the central 1000x1000 section of the 3000x3000 original array:

b = a[1000:2000,1000:2000]

bf = np.fft.fft2(b)

# we expect the total power in the space and frequency domains

# to be about 1/9 of the total power in the space frequency domains

# for matrix a:

space_power_b = np.sum(np.abs(b)**2)

freq_power_b = np.sum(np.abs(bf)**2)/bf.size

# we expect the mean power to be the same as the mean power from

# matrix a:

freq_power_b_mean = freq_power_b/bf.size

print 'space_power_b = %f'%space_power_b

print 'freq_power_b = %f'%freq_power_b

print 'freq_power_b_mean = %f'%freq_power_b_mean

python实现归一化去噪_二维FFT的归一化处理相关推荐

  1. c代码实现 ifft运算_二维FFT,IFFT,c语言实现 | 学步园

    学习DIP第6天 网上关于FFT的实例有很多,具体也可以参照上一篇,其实Matlab,OpenCV都可以很轻松的实现相关操作,但是对于学习其原理,还是自己操作下比较好. 二维FFT的是实现方法是先对行 ...

  2. python有限元传热求解_二维稳态热传导基本方程的有限元求解(2)

    四节点矩形单元 在二维稳态热传导基本方程的有限元求解(1)这篇文章中,我们仅仅给出了有限元单元方程的一种比较标准的推导步骤,并未涉及某种具体的单元.且在式(20)中,单元 上温度 的近似函数表示成节点 ...

  3. 请用python代码表示什么_深度解析什么是二维码?用Python 5行代码生成个性二维码...

    二维码满天飞, 随便扫一扫就能扫到不一样的内容. 有没有好奇什么是二维码? 又是怎么生成的呢? 今天我们就用python 5行代码 生成一个二维码,并且是个性的二维码,想你所想的,先看效果图,准备好微 ...

  4. 用python制作二维码_用python做一个可视化生成二维码的工具

    用python做一个可视化生成二维码的工具 环境 pip install gooey pip install MyQR 源代码 from gooey import GooeyParser,Gooey ...

  5. python 定义一个无限制的二维数组方法

    python 定义一个无限制的二维数组方法 自定义二维数组方式 n = int(input()) mapL = [list(map(int,input().split())) for _ in ran ...

  6. 使用Python的库qrcode生成二维码

    现在有很多二维码的生成工具,在线的,或者安装的软件,都可以进行生成二维码.今天我用Python的qrcode库生成二维码.需要预先安装  Image 库 安装 用pip安装 # pip install ...

  7. python做直方图-python OpenCV学习笔记实现二维直方图

    本文介绍了python OpenCV学习笔记实现二维直方图,分享给大家,具体如下: 官方文档 – https://docs.opencv.org/3.4.0/dd/d0d/tutorial_py_2d ...

  8. C# 传递数组参数_一维数组_二维数组

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  9. 【经典算法实现 44】理解二维FFT快速傅里叶变换 及 IFFT快速傅里叶逆变换(迭代法 和 递归法)

    [经典算法实现 44]理解二维FFT快速傅里叶变换 及 IFFT快速傅里叶逆变换(迭代法 和 递归法) 一.二维FFTFFTFFT快速傅里叶变换 公式推导 二.二维FFTFFTFFT 及 IFFTIF ...

最新文章

  1. GSM手机SMS编码解码
  2. Coursera公开课笔记: 斯坦福大学机器学习第二课“单变量线性回归(Linear regression with one variable)”
  3. C++ Primer 5th笔记(9)chapter9 顺序容器 string
  4. Sales Order 中的User Exit开发
  5. 前端开发必备!Emmet使用手册
  6. 《大话操作系统——做坚实的project实践派》(6)
  7. GDCM:gdcm::Scanner的测试程序
  8. C++:new 和 delete
  9. SAP Spartacus读取User Address的action是如何被Effect接收的
  10. UnitTest in .NET(Part 1)
  11. 企业域名更换操作系列4:下载旧域域信息配置
  12. 苹果6系统怎么更新不了_苹果App Store登录不了怎么办_登录不了App Store的解决办法?...
  13. PHP书写规范 匈牙利命名法+驼峰法命名
  14. mapbox绘制航线图
  15. 海龟画图 python太阳花_python海龟绘图实例教程
  16. 万人连麦的幕后技术详解
  17. 什么是iso认证周期,iso审核是一年一次吗?
  18. 2021高考查询成绩公众号,微信怎么查高考成绩2021 微信高考成绩查询系统入口
  19. mv150us无线网卡驱动linux,水星MW150US2.0驱动-水星MW150US无线网卡驱动下载v2.0 官方最新版-西西软件下载...
  20. 微信运动刷步教程 QQ健康刷步数(一)之安卓版本 - 乐运动

热门文章

  1. 脆弱的Scrum,敏捷在哪里?
  2. 一个97年的IT人创业历程中的总结和感悟
  3. 软考-网络总结-协议
  4. Python 读取 YUV(NV12) 视频文件-优化
  5. to make target ‘../../lib/aaaaa.so‘, needed by ‘ xxx ‘
  6. pytorch tensor 筛选排除
  7. task ':app:compileDebugJavaWithJavac'.错误
  8. python 模板匹配对比
  9. pytorch CenterLoss
  10. 目标跟踪算法五:MDNet: Learning Multi-Domain Convolutional Neural Networks for Visual Tracking