使用matlab,numpy和tensorflow2实现快速傅里叶变换FFT 交叉验证
以光学中圆孔的弗朗禾费衍射为例
matlab
N = 256; % grid number
D = 1; % diameter of aperture pupil [m]
L = 5.0*D/1.22; % Airy disk occupies 5 pixels/grids [m]
x = linspace(-L/2.0, L/2.0, N);
y = linspace(-L/2.0, L/2.0, N);
[xm, ym] = meshgrid(x, y);
r = sqrt(xm.^2 + ym.^2); % 注意加.
AP = double((r <= D/2.0));
psf = abs(fftshift(fft2(AP))).^2;
subplot(121);imagesc(AP);title('Pupil');
axis square; colorbar;
subplot(122);imagesc(psf);title('Point Spread Function');
axis square; colorbar;
python
先生成孔径函数
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from scipy.io import savemat
print(tf.__version__) # 2.1.0# 生成Pupil函数
N = 256
D = 1
L = 10.0*D/1.22
x = np.linspace(-L/2.0, L/2.0, N)
y = np.linspace(-L/2.0, L/2.0, N)
[xm, ym] = np.meshgrid(x, y)
r = (xm**2.0 + ym**2.0)**0.5
AP = np.double((r <= D/2.0))
print(AP.dtype) # float64hf = plt.figure()
ax = Axes3D(hf)
ax.plot_surface(xm, ym, AP, cmap='jet')
ax.view_init(90, 0)savemat('pupil.mat', mdict={'AP': AP}) # 保存数据到matlab中验证
输出
2.1.0
float64
numpy ===> np.fft.fft2
psf = np.fft.fftshift(np.fft.fft2(AP))psf = (np.abs(psf))**2
print(psf.dtype)
print(np.max(psf))hf2 = plt.figure()
ax2 = Axes3D(hf2)
ax2.plot_surface(xm, ym, psf, cmap='jet')
ax2.view_init(90, 0)
savemat('psf.mat', mdict={'psf': psf})
输出
float64
571536.0 与matlab的输出结果是对的上的
tensorflow ====>tf.fft2d(v1.) 或tf.signal.fft2d(v2.)
AP_t = tf.complex(AP,tf.zeros_like(AP)) # 必须转化为复数
print(AP_t.dtype)
psf_t = tf.signal.fftshift(tf.signal.fft2d(AP_t))
psf_t = tf.square(tf.abs(psf_t))
print(psf_t.dtype)
psf_t = psf_t.numpy()
print(psf_t.dtype)
print(np.max(psf_t))hf3 = plt.figure()
ax3 = Axes3D(hf3)
ax3.plot_surface(xm, ym, psf_t, cmap='jet')
ax3.view_init(90, 0)
savemat('psf_t.mat', mdict={'psf_t': psf_t})
输出
<dtype: ‘complex128’>
<dtype: ‘float64’> tensorflow输出的数据类型
float64 numpy输出的数据类型
571536.0 与matlab的输出结果是对的上的
python的绘图效果不太好,但经与matlab的数值结果对比验证,两者是一致。matlab的绘图比较好看是进行了插值运算
使用matlab,numpy和tensorflow2实现快速傅里叶变换FFT 交叉验证相关推荐
- Matlab如何进行利用离散傅里叶变换DFT (快速傅里叶变换FFT)进行频谱分析
文章目录 1. 定义 2. 变换和处理 3. 函数 4. 实例演示 例1:单频正弦信号(整数周期采样) 例2:单频正弦信号(非整数周期采样) 例3:含有直流分量的单频正弦信号 例4:正弦复合信号 例5 ...
- 快速傅里叶变换FFT进行频谱分析(matlab)
快速傅里叶变换FFT进行频谱分析(matlab) 本章摘要:FFT是离散傅立叶变换的快速算法,可以将一个信号变换到频域.有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了 ...
- matlab cftool光滑曲线导出为什么就不光滑了_快速傅里叶变换(FFT)中为什么要“补零”?...
为了大家能够复现各个图中的结果,我附上了所有我编写的MATLAB代码. 创作不易,未经允许,禁止转载. 另外,说明一下,用MATLAB做FFT并不要求数据点个数必须为以2为基数的整数次方.之所以很多资 ...
- MATLAB之傅里叶变换,快速傅里叶变换FFT
文章目录 傅里叶变换及傅里叶逆变换定义 窗函数/矩形脉冲信号的傅里叶变换 基于MATLAB的快速傅里叶变换FFT 傅里叶变换及傅里叶逆变换定义 能从时域的非周期连续信号转化到频域非周期连续信号. 窗函 ...
- 基于python的快速傅里叶变换FFT(二)
基于python的快速傅里叶变换FFT(二) 本文在上一篇博客的基础上进一步探究正弦函数及其FFT变换. 知识点 FFT变换,其实就是快速离散傅里叶变换,傅立叶变换是数字信号处理领域一种很重要的算 ...
- 基于python的快速傅里叶变换FFT(一)
基于python的快速傅里叶变换FFT(一) FFT可以将一个信号变换到频域.有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了.这就是很多信号分析采用FFT变换的原因. ...
- OpenCV快速傅里叶变换(FFT)用于图像和视讯流的模糊检测
OpenCV快速傅里叶变换(FFT)用于图像和视频流的模糊检测 翻译自[OpenCV Fast Fourier Transform (FFT) for blur detection in images ...
- Java编程实现快速傅里叶变换FFT
快速傅里叶变换的时间复杂度分析 1 快速傅里叶变换FFT 1.1 理论分析 1.1.1 离散傅里叶变换 1.1.2 快速傅里叶变换 1.2 编程实现 1.2.1 算法思想 1.2.2 实验结果 1 快 ...
- 快速傅里叶变换(FFT)c语言实现
快速傅里叶变换(FFT)c语言实现:(参考:FFT多种编程语言实现).注意:输入数据个数必须为2的n次方,数据不够可以用0补齐. #include <stdio.h> #include ...
最新文章
- 软件工程第二次课后作业——Gaoooo
- Struts2的类型转换(下)
- Golang——垃圾回收GC
- 交换两个变量ab的值PHP,由[交换两个变量的值问题]理解程序的时空复杂度
- B1有个自定义表操作慢
- oracle_数据库对象
- 基于visual Studio2013解决面试题之0203栈实现
- ACKRec:注意力异构图卷积深度知识推荐器 SIGIR 2020
- OSChina 周三乱弹 —— 程序员,老了会是怎么样?
- 60 秒 Linux 检查清单,快速初步定位你的性能问题
- oracle数据库使用
- 计算机个性化设计小组工作计划,电脑兴趣小组工作计划.doc
- 图书管理系统软件测试实验报告,软件工程课程设计实验报告--图书馆管理系统...
- 计算机找不到WPS云盘,为什么我的电脑里没有WPS网盘入口?开启教程教给你!
- 如果忘记Mac密码该怎么办
- 2019年51CTO学院发布课程回顾总结-引莫(孙忠)
- 深度学习论文: An Energy and GPU-Computation Efficient Backbone Network for Object Detection及其PyTorch
- (转)业务知识_电子商务知识
- 树莓派怎么切换输入法_树莓派安装中文界面/输入法/远程桌面控制 实测笔记教学...
- tiktok设备注册+xg xk xl xa签名
热门文章
- 【自由谈】城域网IPv6过渡技术——CGN部署方式
- 适合您业务的四种B2B模型
- 从外行的视角尝试讲解为什么这回丰田栽了
- 物联网典型场景之智能家电,使用JOSH技术带来的优势和机会
- 仿百度壁纸客户端(六)——完结篇之Gallery画廊实现壁纸预览已经项目细节优化...
- magento中文文档
- 汇聚全国高校最高水平开发者,首届大学生VRAR开发大赛落幕
- Maven知识点一览
- jupyter notebook 上用matplotlib绘图,出现The kernel appears to have died.It will restart automatically
- linux服务器显卡的占用量,命令查看Linux服务器内存、CPU、显卡使用情况