很多人想找找不到的2维DFT矩阵算法和手动Fspecial退化函数实现

MIMO信道估计中的码本 在MIMO信道估计等问题中, 往往需要使用码本, 而最常用的就是DFT码本。本文介绍了为何。首先会从ULA 阵列天线入手, 然后拓展到UPA 平面天线。 阅读详情

今天起床脑仁疼,趁着脑袋不清醒把这个月的工作总结一下haha,提前祝csdn和各位小老板双11快乐哈。

基于课业要求或者想了解matlab内库的童鞋想自己写DFT的和退化模型的可以看下。

咱们只谈干货,二维DFT和退化模型的基础知识什么的就不在这说了,可以去看别的博主。


如果尝试去写的话遇到的问题可能有:①使用四个for循环的2维DFT运行时间比较长,我用实验室的i5试了下大概100分钟的样子。考虑到matlab的老本行,还是用矩阵写。②矩阵的话"市面上"只有一维的,对于二维的其实不难猜到它的形式其实就是一维的推广。对一个MXN的矩阵进行运算得到一个MXN的可能会猜到就是MMXMNXNN,我写了两张A2的草稿纸证明了下是完全正确的。③退化函数Fspecial可能有人用的贼6,但是其内部机理还是有点说头的。好像如果只是按照给的H函数去做不会做出斜向的退化效果,这个时候就要湿考辽。


%%
%二维DFT
clc;
clear;
Q=imread('im.bmp');
I1=rgb2gray(Q);                                  %读取后转为灰度图
I=double(I1);                                    
[M,N] = size(I);
%构造两个矩阵分别为MxM,NxN,在I前后分别相乘
m=[1:M];         
n=[1:N]                                      
subplot(221);imshow(I1);title('时域图像');
WM=exp(-j*2*pi/M);
mm=m'*m;
WMmm=WM.^mm;
WN=exp(-j*2*pi/N);
nn=n'*n;
WNnn=WN.^nn;                                     %是nn里的元素分别乘方,指数为WN
F=WMmm*I*WNnn;                                   %F里的元素均为复数
FRE=abs(F);                                    %取模并缩小范围
FRE=log(FRE+1);
%min=min(FRE(:));  
%max=max(FRE(:));
FRE_=im2double(FRE);%转换为unit8便于显示
FRE_=FRE_/25;
y=fftshift(FRE_);
subplot(222);imshow(y);title('频域DFT图像');
%imwrite(y,'dft队员.bmp');

使用冈萨雷斯书里经典的配图,效果如下:

图1

可能有一些亮度上的缺陷,自行调整就好了。

clc,clear;
[I,map]=imread('im.bmp'); % 原始图像X数据类型为uint8
f=double(rgb2gray(I));
[M,N]=size(f);
% imshow(X,[]);title('ImageOrg.bmp');
H = zeros(M,N);
T=1;a=0.1;b=0.1;
for i = 1:M
   for k = 1:N
       ii=i-M/2+0.001;
       kk=k-N/2+0.001;
       H(i,k) = (T/(pi*(ii*a+kk*b))) * sin(pi*(ii*a+kk*b))*exp(-j*pi*(ii*a+kk*b));
   end
end
F=fft2(f);
F=fftshift(F);
G=F.*H;
g=ifftshift(G);
gg=ifft2(g);
ggg=abs(gg)/200;
%gg=abs(g)/3;
imshow(ggg);title('result.bmp');

先解释下突破点,就是H函数其实原点在中心,而不是简单地把它带进去算,得到矩阵再相乘。然后有个小问题是会有ii=kk=0,这样分母就会为0,得到NAN,因此在后面加个很小的数(比如0.001)就行了。

退化没有用自己的DFT,变换部分直接用的库函数,效果如下:

图2

用fspecial函数的效果如下,自己写的这个就算是成功了罢:

图3

二维傅里叶变换的矩阵表示 二维傅里叶变换的矩阵表示二维傅里叶变换公式二维傅里叶矩阵公式表达1. F(v,u)F(v,u)F(v,u) 为 R1×1R^{1\times1}R1×1 时2. F(v,u)F(v,u)F(v,u) 为 RNv×MuR^{N_v\times M_u}RNv​×Mu​ 时 说明: 做完了图像处理的实验报告,老师要求自己编二维傅里叶变换的算法,故不能用 Matlab 内置的 fft2 函数。循环求解会... 阅读详情

相关推荐

一窥数字傅里叶变换矩阵

一窥数字傅里叶变换矩阵前言DFT vs IDFT matrics酉矩阵特性矩阵DFT运算矩阵的值长什么样操练总结参考 前言 DFT技术虽然很神奇,但总觉得是个黑洞,摸不着头脑,今天研究一下DFT matrix,能更加清楚的了解一些内核的东西。 DFT vs IDFT matrics 这是一个N*N方阵,矩阵的基本元素由W=e−j2π/NW=e^{-j2\pi/N}W=e−j2π/N来构成,每个位置元素aij=W(i−1)∗(j−1)=e−j2π(i−1)(j−1)/Na_{ij}=W^{(i-1)*(j-1

golfbears的博客 7068

基于二维矩阵的FFT计算原理

基于二维矩阵的FFT计算原理 在一些对FFT点数要求较大或者计算FFT实时性要求较高的场合,传统的FFT算法劣势愈发明显,难以满足工程实际的要求。本文针对长点数FFT计算开发了一种基于二维矩阵的FFT算法,此算法将需要计算的复数点序列抽象为一个二维矩阵进行处理,将大点数计算分割为多次小点数FFT计算,并且小点数之间的处理互不影响,进而可在多核处理器上并行执行。下面对基于二维矩阵的FFT计算过程进行...

qq_43622265的博客 1万+

二维离散傅里叶变换矩阵表示1

设 其中 计算步骤:对图像按行执行次一维得到 对矩阵按列执行次一维得到 计算步骤:对频率矩阵按行执行次一维得到 对矩阵按列执行次一维得到。

离散傅里叶变换(DFT)的矩阵形式

废话不多说了,先看一下离散傅里叶变换的公式: 公式1 看着如此简单的公式,其实暗藏玄机,往往我们忽略的都是最重要的细节。第一,这个公式针对的是离散周期信号,得到的频域也是离散周期频信号。这也是最普遍使用的公式,方便在计算机上计算。即使信号不是周期信号,在计算机上计算的时候,由于序列长度有限,我们就可以认为这只是信号的一个周期内容。同样,我们输入到计算机中的序列一定是经过采样定理采样后的信号,...

天下对手教会少林武僧 2万+

详细解读文字识别工具———Tesseract-OCR

   在尝试破解12306验证码的时候,提前了解了一下应对各种验证码的解决方案,这里主要是学习到了面对文字图片验证码,例如亚马逊、豆瓣等平台的登录时会遇到的情况,效果还不错。 一、工具介绍 ​    Tesseract-OCR 是一款由HP实验室开发由Google维护的开源OCR(Optical Character Recognition...

别看我只是一只羊 2万+

电流互感器的使用分析

有关电流互感器使用的注意事项,回头再看,耳目一新。

qq_46757048的博客 2万+

傅里叶变换 ~ 离散傅里叶变换(DFT)

离散傅里叶变换(DFT)–有限长序列的离散频域表示 离散傅里叶变换(DFT)是数字信号处理中非常有用的一种变换,因为它是频域也离散化的一种傅里叶变换。也就是说,时域和频域都离散化了,这样使计算机对信号的时域、频域都能进行计算;另外DFT作为有限长序列的一种傅里叶表示法在理论上相当重要;最后由于DFT有多种快速算法。使得信号处理速度有非常大的提高。 离散傅里叶变换(DFT)是离散傅里叶级数(DFS)...

shouwangyunkai666的博客 5万+

tmux + Claude Code 远程开发指南:从 WSL 配置到断线无忧

远程开发中,SSH 连接中断常导致后台任务丢失,这是困扰开发者的经典难题。tmux 作为终端复用器,通过将进程挂在常驻会话中,使其脱离 SSH 连接独立运行,从根本上解决了断线导致的任务终止问题。Claude Code 等 AI 编程代理需要长时间运行并保持交互上下文,恰好依赖这种会话持久化能力。结合 Windows Subsystem for Linux 提供类 Unix 环境,开发者可在 Windows 上实现稳定的远程开发工作流。本文将完整介绍从 WSL 环境配置、tmux 会话管理,到与 Claud

weixin_30423065的博客 348

信号处理冷知识:为什么DFT矩阵必须是酉矩阵?

本文深入探讨了离散傅里叶变换(DFT)矩阵为何必须是酉矩阵的原因。通过分析能量守恒、复数运算的必然性以及工程实现中的关键细节,揭示了DFT矩阵在数字信号处理中的核心作用。文章还对比了普通正交矩阵与DFT矩阵的特性,并指出了工程应用中常见的误区,帮助读者更好地理解和应用DFT技术。

weixin_29061465的博客 272

最详细的Cadence OrCAD Capture自带元件库的介绍

最详细的Cadence OrCAD Capture自带元件库的介绍 本章节将介绍Cadence OrCAD Capture 软件自带的各类元件库的分类,方便大家在设计时能够快速的选择元件。 AMPLIFIER.OLB 共182个零件,存放模拟放大器,IC,如LM386,MAX457等。 ARITHMETIC.OLB 共182个零件...

LGCPCB的博客 6万+

AI工程化之生成式UI & A2UI(二)

本文介绍了生成式UI框架A2UI的架构设计与核心实现。项目采用AI协作开发模式,通过ATDD(AI驱动的测试驱动开发)确保代码质量。前端SDK基于zustand实现框架无关的状态管理,包含协议解析器、存储管理、渲染器等核心模块。重点展示了基础store构建、A2UI协议解析器的实现过程,包括mock数据准备、测试用例生成和可视化调试。项目采用monorepo管理,利用vite实现高效开发构建。整个系统设计遵循模块化原则,通过清晰的接口定义实现各组件解耦,为后续功能扩展打下基础。

qq_34306228的博客 406

在matlab使用矩阵的方法计算DFT

在matlab使用矩阵的方法计算DFT dft矩阵算法原理学习笔记 2021年10月22日 编写一个函数,在matlab使用矩阵的方法计算DFT,输入序列x(n)和N,输出序列x(n)的N点DFT变换结果X(k) 函数的定义 %这是matlab代码,若要使用此函数,请复制此代码保存为MDFT.m文件到你的工作路径 function [Xk]=MDFT(xn,N) %此函数使用DFT矩阵方法计算序列x(n)的N点DFT M=length(xn);%记录序列x(n)初始长度 if M<N

qq_46541463的博客 1万+

ONFI5.0命令字实战指南:从基础操作到高级应用

本文深入解析ONFI5.0协议的核心——命令字,提供从基础操作到高级应用的实战指南。详细拆解了NAND闪存的复位、读状态、数据读取(00-30)、页编程(80-10)和块擦除(60-D0)等关键命令周期,并探讨了多平面操作与缓存操作等高级性能优化技巧,帮助开发者高效、稳定地与NAND芯片进行底层交互。

vscode5coder的博客 462

[EE261学习笔记] 14.矩阵形式的离散傅里叶变换,及离散傅里叶变换的相关公式

本文主要罗列一下DFT的相关公式 首先,不难将DFT写成矩阵形式,回忆之前的推导,DFT表达式为: Ff––––=∑n=0N−1f[n]––––ω––−nFf_=∑n=0N−1f[n]_ω_−n\underline{{\scr F}f} = \sum_{n=0}^{N-1} \underline{f[n]} \underline{\omega}^{-n} 写成矩阵形式就是: ⎡⎣...

一个球的博客 8601

性能调优秘籍——让OpenClaw运行速度提升10倍(2026优化版)

OpenClaw性能优化核心摘要 本文详细介绍了提升OpenClaw系统性能的关键技术,包括: 使用性能分析器进行代码级性能诊断 内存优化与高效缓存策略 并发处理优化技术 数据库查询性能提升方法 重点内容包括: 全面的性能分析工具实现(计时、内存监控、错误跟踪) 自动生成性能报告和优化建议 操作耗时与内存占用分析算法 关键性能指标(平均耗时、内存增长)计算 通过系统性的性能分析优化,可使OpenClaw运行速度提升10倍以上。

博客 900

cadence中利用sva进行FPV实战(可直接使用)

在cadence中使用fpv进行formal验证

youzjuer的博客 749

信号分析 | 二维傅立叶变换矩阵的实现方法

二维傅里叶变换的矩阵表示的理论可以参考以下博客或文章: 二维傅立叶变换矩阵 离散傅立叶变换的矩阵表示 可以通过编程实现矩阵表示,但是运算量很大。 我这里用MATLAB自带的dftmtx函数实现。 dftmtx()函数——离散傅立叶变换矩阵 句法 a = dftmtx(n); n — 离散傅立叶变换长度,正整数 a = dftmtx(n) 返回一个 n-by- n复杂离散傅立叶变换矩阵。 对于列向量 x的傅立叶变换如下: y = dftmtx(n)* x 与y = fft(x,n)相同。 离散傅里叶逆

Aubrey_yt的博客 4582

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

DFT和IDFT分析

DFT和IDFT分析DFT和IDFT的意义DFT的定义DFT的矩阵分析 DFT和IDFT的意义 DFT:离散傅里叶变换 离散傅里叶变换可以将连续的频谱转化成离散的频谱去计算,这样就易于计算机编程实现傅里叶变换的计算。FFT算法的出现,使得DFT的计算速度更快。 DFT的定义 设 x(n)x(n)x(n) 是一个长度为MMM的有限长序列,则定义x(n)x(n)x(n)的NNN点离散傅里叶变换为 X(...

weixin_44144171的博客 1万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C++实现二维离散傅里叶变换(DFT)

根据二维离散傅里叶变换公式(DFT),可以将图片从空间域转换到频率域内,对其进行一些处理,再通过离散傅里叶反变换(IDFT),转换回原空间域,达到一些特殊处理效果。 处理如下 原图 经过二维离散傅里叶变换(DFT),得到下图 再经过反变换,得到下图 这边我用C++重新实现下这个DFT和IDFT这两个算法。 根据定义 照着着两个公式编写程序即可,注意的是,e可用下面公式展开 由于安照此方式编写的程序套了4层循环,运行过于缓慢,我对原图进行了缩放,之前62...

海盗Isaac 4575

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

离散傅里叶变换(Discrete Fourier Transform, DFT)及其在图像处理中的应用

离散傅里叶变换(Discrete Fourier Transform, DFT)是一种强大的数学工具,用于将离散信号从时域(或空间域)转换到频域。它可以将一个有限长度的信号分解成一系列正弦和余弦波的组合,每个波都有特定的频率、幅度和相位。DFT 的核心思想来源于傅里叶分析,但它适用于离散信号,是数字信号处理和图像处理的基础。

阿正的梦工坊 4215

[傅里叶变换及其应用学习笔记] 二十一. 离散傅里叶变换的矩阵定义,一些性质...

  DFT在零点 $\underline{\mathcal{F}}\underline{f}(0) = \displaystyle{ \sum_{n=0}^{N-1}\underline{f}[n]e^{-2\pi i\frac{n0}{N}} = \sum_{n=0}^{N-1}\underline{f}[n] }$   还记得傅里叶变换在零点处也有类似的式子 $\mathcal{F}...

weixin_34336526的博客 1103

C语言数字图像处理(五):二维离散傅里叶变换和重建(相位角+振幅)

1. 二维傅里叶变换(DFT)1.1 DFT:算法:二维离散傅里叶变换公式如下:其中是原始像素,是傅里叶变换后的输出。根据欧拉公式的每个值都是一个复数,由实部和虚部计算得出。傅里叶谱的公式:变换后,我们希望四个频谱聚集在可视化图像的中心,这需要变换如下:因此将每个项乘以即可实现。图像和结果对比():结果分析:图像的频谱是图像灰度变化强度的指标,是灰度在平面空间中的梯度。右图是图像对应的光谱(spectrum),中间部分很亮,灰度值很高。

Wilson_Lin_01的博客 1833

快速傅里叶变换FFT

FN​FN​。

a353541382的博客 208

灰度图像--频域滤波 傅里叶变换之二维离散傅里叶变换

学习DIP第24天 转载请标明本文出处:http://blog.youkuaiyun.com/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对此表示很不满意。有些网站转载了我的博文,很开心的是自己写的东西被更多人看到了,但不开心的是这段话被去掉了,也没标明转载来源,虽然这并没有版权保护,但感觉还是不太好,出于尊重文章作者的劳动,转载请标明出处!

恰同学少年的博客 1万+

数字图像处理笔记——二维离散傅里叶变换(2D Discrete Fourier Transform)

二维傅里叶变换 我们先来看看一维情况的傅里叶变换。在信号系统中讲过连续时间的傅里叶变换和离散时间的傅里叶变换,连续时间傅里叶变换在频谱上时非周期的,离散时间傅里叶变换(DTFT)在频谱上是周期的。在DSP中讲了离散傅里叶变换,它的思想是将时域周期化,反映在频域上就是对连续的周期频谱进行抽样 有了一维的离散傅里叶变换(DFT),我们可以将其推广到二维的情况 我们其实可以将二维离散傅里叶...

shanwenkang的博客 2万+

二维离散傅里叶变换手算实例(加OpenCV实现)

二维离散傅里叶变换手算实例(加OpenCV实现) 二维傅里叶原理及公式不做赘述,直接看图片理解吧 如图 想起来我还写了个计算二维离散傅里叶变换的代码 要用opencv #include "opencv2/core.hpp" #include "opencv2/core/utility.hpp" #include "opencv2/imgproc.hpp" #include "opencv2/highgui.hpp" #include<iostream> #include <stdi

weixin_45314191的博客 1万+
上一篇: 自定义比例的GS噪声和椒盐噪声的加入和阿尔法修正的均值滤波的实现
下一篇: #就很固执#对上一篇的退化图像的最小二乘方滤波
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值