二维离散傅里叶变换的实现

news2024/11/24 12:53:44

二维离散傅里叶变换的实现

  • 1.使用Python包实现
  • 2.使用c++实现
    • 2.1 FFTW库安装
    • 2.2 结果比较
  • 参考文献

1.使用Python包实现

import numpy as np 
import matplotlib.pyplot as plt
a=np.array([0, 2, 4, 1,6, 1, 3, 2,5]).reshape(3,3)
f=np.fft.fft2(a)
fshift=np.fft.fftshift(f)
mag=20*np.log(np.abs(fshift))
plt.axis("off")
plt.imshow(mag)
plt.show()

其中:

f:
array([[24. +0.00000000e+00j, -6. +4.44089210e-16j, -6. -4.44089210e-16j],
       [-3. +1.73205081e+00j, -7.5+4.33012702e+00j,  4.5-8.66025404e-01j],
       [-3. -1.73205081e+00j,  4.5+8.66025404e-01j, -7.5-4.33012702e+00j]])
       
fshift:
array([[-7.5-4.33012702e+00j, -3. -1.73205081e+00j,  4.5+8.66025404e-01j],
       [-6. -4.44089210e-16j, 24. +0.00000000e+00j, -6. +4.44089210e-16j],
       [ 4.5-8.66025404e-01j, -3. +1.73205081e+00j, -7.5+4.33012702e+00j]])

平移后的幅度谱为:
在这里插入图片描述

2.使用c++实现

#include <iostream>
using namespace std;
#include"Eigen/Dense"
using namespace Eigen;
#include "fftw3.h"

int main()
{

	MatrixXd a(3, 3), out(a.rows(), a.cols());
	MatrixXcd FTa(a.rows() / 2 + 1, a.cols());
	a << 0, 2, 4, 1,
		6, 1, 3, 2,5;
	fftw_plan P;
	P = fftw_plan_dft_r2c_2d(a.cols(), a.rows(), a.data(), (fftw_complex*)FTa.data(), FFTW_ESTIMATE);
	fftw_execute(P);
	cout << "dft" << endl;

	cout << FTa << endl;
	cout << endl;

	P = fftw_plan_dft_c2r_2d(a.cols(), a.rows(), (fftw_complex*)FTa.data(), out.data(), FFTW_ESTIMATE);
	fftw_execute(P);
	cout << "idft" << endl;

	out = out / (a.cols() * a.rows());
	cout << out << endl;
	return 0;
}

结果如下:

dft
         (24,0)          (-6,0)          (-6,0)
   (-3,1.73205)  (-7.5,4.33013) (4.5,-0.866025)

idft
0 2 4
1 6 1
3 2 5

2.1 FFTW库安装

这里用到了FFTW c++库,具体编译及调用可参考Windows下FFTW_2.1.5的编译及使用。

这里仅列出生成lib文件,用到的vs中powetshell打开方式:
在这里插入图片描述

2.2 结果比较

从结果可以看出,与Python代码相比,FFTW的输出未进行shift,而且仅输出部分有用信息。

参考文献

[1] FFTW库官网
[2] Windows下FFTW_2.1.5的编译及使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1067566.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS圆角大杀器,使用滤镜构建圆角及波浪效果

目录 1&#xff0c;border-radius实现圆角2&#xff0c;filter: contrast() 配合 filter: blur() 实现圆角3&#xff0c;使用 filter: contrast() 配合 filter: blur() 实现波浪效果 1&#xff0c;border-radius实现圆角 通常我们加个 border-radius就可实现一个div盒子的圆角…

分页查询(关键词: limit)

MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 比如现在有一张表emp有15条数据 我想每页只显示5条数据,分3页,这样看起来简捷一些,我该怎么实现呢 语法格式: select */列名 from 表名 limit 初…

CMAKE使用记录

CMAKE使用记录 CMake简化了针对同一项目的不同平台、不同编译器的构建过程和编译过程&#xff0c;能够管理各种规模的项目。 CMAKE命令记录 cmake命令说明 语法&#xff1a; # cmake构建项目的编译系统 Generate a Project Buildsystem > cmake [<options>] -B &…

85.最大矩形

单调栈&#xff0c;时间复杂度o(mn)&#xff0c;空间复杂度o(mn) class Solution { public:int maximalRectangle(vector<vector<char>>& matrix) {int mmatrix.size();if(m0){return 0;}int nmatrix[0].size();//记录矩阵中每个元素左边连续1的数量vector<…

如何开发一款高效便捷的搬家服务小程序

随着互联网的发展&#xff0c;小程序已成为各行各业重要的业务推广和用户服务平台。对于搬家行业而言&#xff0c;开发一款高效便捷的搬家服务小程序具有巨大的市场潜力。本文将为您详细介绍如何开发一款这样的搬家服务小程序。 一、进入乔拓云网后台 在开始制作搬家服务小程序…

番外项目---Vim编辑器

Task01: 1.在/tmp目录下建立一个名为mytest的目录&#xff0c;进入mytest目录当中; 2.将/etc/man_db.conf复制到上述目录下面&#xff0c;使用vim打开目录下的man_db.conf文件; 3.在vim中设定行号&#xff0c;移动到第58行&#xff0c;向右移动15个字符&#xff0c;请问你看到…

文件丢失怎么找回?收藏好这3个方法!

“我真的要哭了&#xff0c;不小心把一些很重要的文件弄丢了&#xff0c;现在不知道该怎么办了&#xff0c;有没有什么方法可以把这些文件找回来呀&#xff1f;大家快帮帮我吧&#xff01;” 在日常办公中&#xff0c;很多用户都会习惯性的把一些重要的文件和数据保存在电脑上。…

UE4游戏客户端开发进阶学习指南

前言 两年多前写过一篇入门指南&#xff0c;教大家在短时间内快速入门UE4的使用&#xff0c;在知乎被很多人收藏了。如今鸡佬使用UE快三年了&#xff0c;是时候更新一下进阶版本的学习指南。本文对于读者的要求&#xff1a; 有一定的C基础已经入门UE&#xff0c;能够用蓝图和…

AD 域控使用回收站批量还原用户

一、Read me. 测试版本winserver 2019&#xff0c;其余版本请查阅文档或者实际操作尝试。 前提需要预先开启回收站功能&#xff01;&#xff01;&#xff01;&#xff01; 没有开启可以点&#xff0c;开启后则变灰色。 如果是人为操作并且没有开启这个功能&#xff0c;那么不…

【算法训练-数组 四】【数组合并】:合并两个有序数组

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【数组组合】&#xff0c;使用【数组】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&…

【小黑送书—第三期】>>《深入浅出SSD》

近年来国家大力支持半导体行业&#xff0c;鼓励自主创新&#xff0c;中国SSD技术和产业良性发展&#xff0c;产业链在不断完善&#xff0c;与国际厂商的差距逐渐缩小。但从行业发展趋势来看&#xff0c;SSD相关技术仍有大幅进步的空间&#xff0c;SSD相关技术也确实在不断前进。…

localhost和127.0.0.1都可以访问项目,但是本地的外网IP不能访问

使用localhost和127.0.0.1都可以访问接口&#xff0c;比如&#xff1a; http://localhost:8080/zhgl/login/login-fy-list或者 http://127.0.0.1:8080/zhgl/login/login-fy-list返回json {"_code":10000,"_msg":"Success","_data":…

数据结构与算法-循环链表、双向链表

我们这里接着上一篇单链表继续往下深入学习循环链表、双向链表。 链表 &#x1f388;3.循环链表&#x1f52d;3.1循环链表的概念&#x1f52d;3.2循环链表的基本操作&#x1f50e;3.2.1创建空表&#x1f50e;3.2.2插入操作&#x1f50e;3.2.3删除操作 &#x1f388;4.双向链表&…

图的存储-链式前向星

链式前向星 链式前向星是民间OI选手发明的数据结构。用另一个词解释它就是&#xff1a;用数组模拟的邻接链表。最核心的思想就是用数组模拟链表。 &#xff08;1&#xff09;前向星 前向星就是边的集合。一个图&#xff0c;只要将它的所有边存储起来&#xff0c;就能知道它的…

为什么append到父节点后的子节点发生修改,父节点打印出来的也会变化

今天走查前端代码&#xff0c;发现历史代码写出来的不规范&#xff0c;但是他还是在生产运行了很久的代码&#xff0c;仔细思量后发现&#xff0c;其实原理是对的&#xff0c;只是看起来不美观&#xff0c;不易读而已。 废话不说&#xff0c;先上demo代码 <!DOCTYPE html&g…

【Verilog 教程】7.1Verilog 除法器设计

除法器原理&#xff08;定点&#xff09; 和十进制除法类似&#xff0c;计算 27 除以 5 的过程如下所示&#xff1a; 除法运算过程如下&#xff1a; (1) 取被除数的高几位数据&#xff0c;位宽和除数相同&#xff08;实例中是 3bit 数据&#xff09;。 (2) 将被除数高位数据与…

实时选品系统实现的难点

实时选品系统是一个涉及到多个领域的复杂系统&#xff0c;需要兼顾数据挖掘和分析、推荐算法、机器学习、大数据处理等多方面的技术&#xff0c;才能实现高效、准确和可扩展的功能。 以下是实现实时选品系统时可能遇到的难点&#xff1a; 数据量大&#xff1a;实时选品系统需要…

无需公网IP,企业如何访问私有云?

企业的日常办公中已经习惯利用网盘或在线传输服务来进行文件传输和分享&#xff0c;面对一系列层出不穷的数据泄露和黑客行为&#xff0c;企业也越来越担心隐私泄露的问题&#xff0c;并寻找真正存储私有化的解决方案。某企业的总部在北京&#xff0c;在上海还有2处办公室&…

云服务器能干什么?腾讯云服务器的几十种玩法

腾讯云服务器价格很便宜尤其是轻量应用服务器&#xff0c;搞一台云服务器可以用来干嘛&#xff1f;云服务器的用途是很广的&#xff0c;现在轻量应用服务器2核2G3M、2核2G4M、4核8G12M等配置&#xff0c;百元的价格&#xff0c;买一台云服务器后可以做什么&#xff1f;拿来搭建…

PYTHON计算CPK及规范限合格率,绘制直方图概率密度曲线

CPK&#xff08;过程能力指数&#xff09;是一个用于衡量一个过程的稳定性和一致性的统计指标&#xff0c;特别用于制造业和质量管理中。它衡量了一个过程的变异性与规范界限的关系&#xff0c;帮助确定过程是否能够产生合格的产品或服务。 正态分布假设&#xff1a;CPK的计算…