首页 > 其他分享 >离散傅里叶变换手工实现

离散傅里叶变换手工实现

时间:2022-09-23 23:12:05浏览次数:42  
标签:fr plt 手工 title dft 离散 range np 傅里叶

离散傅里叶变换手工实现

import numpy as np
import matplotlib.pyplot as plt
import cv2
f = [[4,6],[2,9]]
F = np.complex64(f)
def dft(img,N):
    W = np.zeros((N,N),dtype=np.complex64)
    for x in range(N):
        for y in range(N):
            W[x][y] = ((np.cos(2*np.pi/N))-(np.sin(2*np.pi/N)*1j))**(x*y) #计算excp(-2πjxy/N) = (cos(2π/N)-jsin(2π/N))^(xy)
    return W@img@W

F = dft(F,2)
i = F.imag
r = F.real
print(F)
F = np.abs(F) #求模即频谱
plt.subplot(121)
plt.title("spatial")
plt.imshow(f,"gray")
plt.subplot(122)
plt.title("frequency")
plt.imshow(F,cmap="gray")
plt.show()
[[21.+0.0000000e+00j -9.-1.8369703e-15j]
 [-1.-1.3471115e-15j  5.+1.2246468e-15j]]

与opencv中的dft对比

在上一文中使用dft后并未进行取模操作,所以最终结果并不是频域,仅仅是取了结果的实部,现已纠正

f = [[4,6],[2,9]]
f = np.float64(f)
F =  cv2.dft(f,flags=cv2.DFT_COMPLEX_OUTPUT)
fr = np.zeros((2,2),np.complex64)
for i in range(2):
    for k in range(2):
        for l in range(2):
            fr[i][k] = F[i][k][0] + F[i][k][1]*1j
fr = np.abs(fr)
plt.subplot(121)
plt.title("spatial")
plt.imshow(f,"gray")
plt.subplot(122)
plt.title("frequency")
plt.imshow(fr,cmap="gray")
plt.show()

标签:fr,plt,手工,title,dft,离散,range,np,傅里叶
From: https://www.cnblogs.com/ryuta/p/16724611.html

相关文章

  • 那永恒没骗我 离散也没有 这份爱只是活在 另外时空
    那永恒没骗我离散也没有这份爱只是活在另外时空如果每一声再见会开启一个新的空间每做一个梦是时空偶尔的重叠你好吗离开的人啊请帮我相爱到剧终\(~~~~~~~......
  • HTTP API 自动化测试从手工到平台的演变
    https://www.infoq.cn/news/http-api-automated-test-from-manual-to-platform?utm_source=related_read_bottom&utm_medium=article不管是Web系统,还是移动APP,前后端逻......
  • 离散数学中群、环、域的理解
    1、群(group)是两个元素作二元运算得到的一个新元素,需要满足群公理(groupaxioms),即:①封闭性:a∗bisanotherelementintheset②结合律:(a∗b)∗c=a∗(b∗......
  • 离散数学中 群的概念
    一.群的定义说起群,首先要引出一个更大的概念——代数系统(什么是代数系统就不解释了…),其中在概念上来看,代数系统>广群>半群独异点>群。设【<G,*>】是一个代数系统,其中G是......
  • Windows 系统 PostgreSQL 手工安装配置方法
    自从2020年底开始接触PostgreSQL以来就喜欢上了这个数据库,个人感觉比MySQL好用,多表联合查询性能好很多,同时也不存在SQLServer的版权授权费用问题。搭配.NET开发很......
  • 数字信号处理--第二章/离散时间信号和离散时间系统
    离散时间信号--数字序列离散时间信号的表示概述对于x(n):n为整数时有对应数值,n非整数时,x(n)没有定义,不可认定为0单位取样序列δ(n):n=0时值为1;单位冲激函数δ(t):n=0时值为∞......
  • HCIA学习笔记二十六:手工负载分担模式二层链路聚合
    一、链路聚合的应用场景• 链路聚合一般部署在核心结点,以便提升整个网络的数据吞吐量。二、链路聚合• 链路聚合能够提高链路带宽,增强网络可用性,支持负载分担。三......
  • 算法学习之路 离散化
    //离散化值得就是一一对应的关系,通常处理大数据范围中的小范围数据;离散化的中的两个步骤:1.a[]中可能的重复元素(去重)2.如何算出x离散化之后的值(二分)/*离散化模板......