前言

实际野外采集到的信号都是有一定时间间隔的,因为本文主要关注于"离散傅里叶变换(DFT)"。另外,本文主要关注的是"如何使用"DFT这样一个工具(公式的使用+程序编写),并非介绍其背后的原理。最后,本文将自己编写的程序与Matlab自带的相关语句的结果做对比,验证方法与程序的正确性。

DFT相关公式及使用

我们假设原始时域信号为x(n),经DFT后频域信号为X(k),其中n是采样点的序号,k是对应到频率域中的频率值,N是采样点总数。傅里叶正变换公式为:

公式1:DFT原始公式

注意1:在等号右边的最后一项

中,nk乘积是

的幂指数!

注意2:

是一个常数!其公式为:

公式1怎么用?先把它展开看看:

公式2:把公式1展开成多项来看

公式2看上去还是不够直观,我们再把它用矩阵表示成:

公式3:公式2的矩阵形式

是不是清晰多了呢?

已经知道

是一个常数!

那公式3"等号右边第一项"可进一步简化:

公式4:对公式3中右边第一项的简化

到此,DFT公式可变为:

这样的矩阵相乘。

有了上面的公式的基础,我们可以手写Matlab程序:

data = [2 3 8 9 12 4 8 10]; % 原始离散时域信号

N = length(data);

% DFT需要的相关矩阵:

WN = exp(-i*2*pi/N); % 常数

WN_nk = zeros(N)+WN; % WN_kn矩阵(初始)

xk = data'; % 时域信号振幅(列矩阵)

E = zeros(N); % 辅助的E(WN_kn的幂,单独拿出来算)

%%% 傅里叶正变换即结果 %%%

for row = 0:N-1

for cow = 0:N-1

E(row+1,cow+1) = row*cow;

WN_nk(row+1,cow+1) = WN_nk(row+1,cow+1)^E(row+1,cow+1);

end

end

Xk = WN_nk * xk; % 频域结果

fft(data); % Matlab自带语句,两者结果对比一样

IDFT相关公式及使用

很DFT的公式非常相似,只不过多了负号:

公式5:IDFT原始公式

将公式转换成矩阵,再写出矩阵E和对应的

即可。最后不要忘记除以总采样点数N。

对应的手写Matlab程序为:

% 继DFT代码后跟着写

% IDFT需要的相关矩阵:

WN_nk_n = zeros(N)+WN; % WN_kn矩阵(初始)

E_n = zeros(N); % 辅助的E(WN_kn的幂,单独拿出来算)

for row = 0:N-1

for cow = 0:N-1

E_n(row+1,cow+1) = -row*cow; % 注意负号

WN_nk_n(row+1,cow+1) = WN_nk_n(row+1,cow+1)^E_n(row+1,cow+1);

end

end

xk_n = real((WN_nk_n * Xk)/N)' % IDFT手写结果

ifft(Xk) % Matlab自带语句,上下俩结果对比一样。

更多完整程序与相关实例程序参考:傅里叶变换程序及实例.

补充说明:

频率域的优越性:时间域信号虽然可以反映原始信号不少的信息,但是这种图像不易修改!因为地球物理野外接收到的信号,不论是有效信号还是特定噪声,它们都各有自己所属的频带宽度!也就是说有效信号与噪声它们在频率域是很好识别和区分开来的!虽然频率信息也能少量反应在时域图像中(图像的紧密或舒张程度),但是要想从时域图像中将二者分离开来是非常非常困难的!这也体现出频域的优越性。不只是信号提取与消除,频率域或者类频率域(后面的小波域、τp域等)还能做很多更高级的操作,这些都是时域图像所不能进行的。总结之:时域信号好采集不好处理,频域信号好处理但直接采集不了。

matlab离散傅里叶逆变换,手动实现离散傅里叶正变换与逆变换(程序+例子)相关推荐

  1. 【傅里叶变换】离散傅里叶正变换和离散傅里叶逆变换

    离散傅里叶正变换: 表面上看是对时域采样数据进行 N点离散傅里叶正变换, 实质上求的是被采样信号周期性拓展得到的周期信号的傅里叶系数再乘以点数 N. 离散傅里叶逆变换: 表面上看是对频域采样数据 X( ...

  2. 用Matlab编程实现图像的傅立叶变换和逆变换并显示出来

    用Matlab编程实现图像的傅立叶变换和逆变换并显示出来 % 用Matlab编程实现图像的傅立叶变换并显示出来 % 可进行傅立叶变换和逆变换恢复 clear all close all clc I=i ...

  3. matlab拉氏逆变换,偏微分方程的拉氏变换解法.ppt

    偏微分方程的拉氏变换解法 第15章 积分变换的MATLAB求解 编者 Outline 15.1 傅里叶变换 15.2 拉普拉斯变换 15.3 Z 变换 15.1 傅里叶变换 1.傅里叶变换的概念 若函 ...

  4. MATLAB:Radon正变换的理解

    Radon正变换的理解 前言 一.介绍 二.MATLAB实现 1.图1的matlab程序 2.多角度radon变换 三.总结 前言 网上看了些有关Radon变换的介绍,结合自己看书和理解写下这篇blo ...

  5. matlab 沃尔什矩阵,压缩感知——沃尔什-哈达玛(WHT)变换与逆变换的Matlab代码实现...

    沃尔什-哈达玛变换(Walsh-Hadmard Transform,WHT),是一种典型的非正弦函数变换,采用正交直角函数作为基函数,具有与傅里叶函数类似的性质,图像数据越是均匀分布,经过沃尔什-哈达 ...

  6. 压缩感知——沃尔什-哈达玛(WHT)变换与逆变换的Matlab代码实现

    沃尔什-哈达玛变换(Walsh-Hadmard Transform,WHT),是一种典型的非正弦函数变换,采用正交直角函数作为基函数,具有与傅里叶函数类似的性质,图像数据越是均匀分布,经过沃尔什-哈达 ...

  7. matlab遥感影像相对配准,基于IHS 变换的遥感影像融合方法研究

    摘 要:为了解决遥感影像空间分辨率与光谱信息不能兼顾的问题,即全色影像具有较高的空间分辨率但缺乏光谱信息,多光谱影像光谱分辨率高,光谱信息丰富,但其空间分辨率低的问题,本文采用MATLAB 实验工具, ...

  8. 利用Matlab进行图像变换(傅里叶变换、余弦变换)

    本文章包含以下内容: 1.利用matlab工具箱实现傅里叶变换及逆变换. 2.利用matlab工具箱实现余弦变换及逆变换. 代码如下: function U()clear;clc;img = imre ...

  9. Matlab代码生成任意边长等间距正六边形采样点

    Matlab代码生成任意边长等间距正六边形采样点 https://blog.csdn.net/Hanghang_/article/details/87064184 本文以n代表正六边形在x轴正轴上的长 ...

最新文章

  1. 「消息队列」看过来!
  2. Django 知识补漏单例模式
  3. 个人见解:*与(c语言)
  4. python3扫盲系列-(3)
  5. 工业互联网的最后一公里
  6. npm dev run 报错
  7. 当面试官问我————为什么String是final的?
  8. 超硬核直播课 | 自主旋翼无人机主流算法、视觉SLAM基础
  9. 构件与构架,我的理解
  10. 程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)
  11. 攻防世界web新手随记
  12. 怎样安装linux中文字体,linux如何安装中文字体库
  13. python酒店管理系统案例
  14. 利用SQL求中位数(已修复BUG)
  15. System mem和AGP mem和video mem
  16. 免费后台管理UI界面、html源码推荐
  17. 获取公众号的关注链接
  18. Go语言 基础语法学习 (未完待更......
  19. Matlab之绘制箭头图或速度图
  20. C# SolidWorks 二次开发 API --- 提升exe执行效率接近DLL

热门文章

  1. SpringBoot之使用(一)
  2. Java中的String.hashCode()方法可能有问题?
  3. MVP公益活动:编程一小时
  4. CentOS下桥接模式连不上网
  5. 传西门子中国运营中近一半业务涉及行贿
  6. 什么是动态链接库(DLL)以及常见问题
  7. jdk下载--操作系统
  8. codeforces 111A/112C Petya and Inequiations
  9. GDI+ 中发生一般性错误(在 OutputStream 中保存 PNG 格式图像时遇到的问题)
  10. HDOJ 2639 Bone Collector II (背包)