傅里叶变换

  • 基础知识了解
  • 傅里叶变换
  • 离散傅里叶变换(DFT)

小红老师告诉我傅里叶变换与量子图像加密有着紧密的联系,于是我开始学习傅里叶变换,以下是我的一点点收获。

基础知识了解

要想了解傅里叶变换,首先我们先来了解以下什么是时域、空间域和频域。

时域
时域又叫时间域,其自变量是时间,因变量是信号的变化,动态信号 Python把时域变成频域 时域变成频域怎么变_信号处理

Python把时域变成频域 时域变成频域怎么变_离散时间傅立叶变换_02


频域

频域又叫频率域,其自变量是频率,因变量是频率信号的幅度,也就是通常说的频谱图。频谱图描述了信号的频率结构及频率与该频率信号幅度的关系,以频率作为变量进行的研究就是频域。频谱密度就像物理中物质密度,原始信号中的每一个点就像是一个混合物,这个混合物是由不同密度的物质组成的,混合物中含有的每种物质的质量是一样的,除了最大和最小两个密度的物质外,这样我们只要把每种物质的密度加起来就可以得到该混合物的密度了,又该混合物的质量是单位质量,所以得到的密度值跟该混合物的质量值是一样的。如下图横轴是频率,纵轴是频率信号的幅度

Python把时域变成频域 时域变成频域怎么变_信号处理_03


看到频域和时域的时候,我的感觉是emmm,莫名有种神奇的力量在召唤着我,让我有一种他们之间一定有着很大的联系,下面让我们再来看看频域和时域纠结有什么关系。如下图,

Python把时域变成频域 时域变成频域怎么变_信号处理_04


空间域

空间域又称图像空间(image space),是由图像素组成的空间。在图像空间中以长度(距离)为自变量直接对像素值进行处理称为空间域处理, 以空间坐标作为变量进行的研究就是空间域。

傅里叶变换

我对傅里叶变换的印象还停留在上学期学高数的时候,难度指数五颗星,所以我果断放弃。没想到时隔半年多我又要重新学一遍,欠下的债迟早都要还的。

Python把时域变成频域 时域变成频域怎么变_离散时间傅立叶变换_05

回到正题。傅里叶变换是一种积分变换,它能将满足一定条件的某个函数表示成正弦基函数的线性组合或者积分。如下图

Python把时域变成频域 时域变成频域怎么变_离散时间傅立叶变换_06


另外一种一个例子,如下图,按照pan_jinquan博主说的,只要努力,弯的都能掰直!只要正弦基函数的线性组合够多或者积分次数够大,没有傅里叶变换不能表示的函数,当然这里指的是近似表示。

Python把时域变成频域 时域变成频域怎么变_离散时间傅立叶变换_07

对于任何连续测量的信号,也都可以表示为不同频率的正弦波信号的无限叠加。利用傅里叶变换算法直接测量到的原始信号,以累加方式来计算该信号中不同正弦波信号的频率、振幅和相位。一种更生动的表现形式,将傅里叶变换比作一个三棱镜,三棱镜是可以将光分解为不同颜色的物理仪器,每个成分的颜色由波长或频率来决定。在这里,傅里叶变换可以看作是数学上的棱镜,可以将函数基于频率分解为不同的成分。就像我们考虑光时讨论它的光谱或频率谱,对于傅里叶变换我们也同样能通过频率成分来分析一个函数。

图像的频率是表征图像中灰度变化剧烈程度的指标。从纯粹的数学意义上看,傅里叶变换是将一个函数转换为一系列周期函数来处理的。从物理效果看,傅里叶变换是将图像从空间域转换到频率域,它的逆变换是将图像从频率域转换到空间域。也就是傅里叶变换的物理意义是将图像的灰度分布函数变换为图像的频率分布函数,傅里叶逆变换是将图像的频率分布函数变换为灰度分布函数。于是乎,傅里叶变换提供了一条从空域到频率自由转换的途径。

讲了这么久终于和图像有关系了,至于是什么关系,怎么和量子图像加密扯上关系?慢慢思考,继续摸索…

Python把时域变成频域 时域变成频域怎么变_Python把时域变成频域_08

离散傅里叶变换(DFT)

离散傅里叶变换(DFT):

Python把时域变成频域 时域变成频域怎么变_离散时间傅立叶变换_09

其中N表示傅里叶变换的点数,k表示傅里叶变换的第k个频谱。

下面涉及的内容可能会有些不懂,但是不要放弃,请耐心的往下看!
将信号从时域空间转换到频域空间,傅里叶变换后的第k个点对应的是一个复数,由于余弦信号也一种相位发生 Python把时域变成频域 时域变成频域怎么变_Python把时域变成频域_10

Python把时域变成频域 时域变成频域怎么变_时域_11

傅里叶变换的优点就是能够将信号从空间域转换到频域,从频率的角度去分析信号,能够容易发现一些空间域内不容易发现的规律。但是怎么进行转换呢?下面听我细细道来。

在这里就不能不提及被誉为“宇宙第一公式”的欧拉公式了。在傅里叶级数、泰勒级数、三角函数等都存在它的身影,欧拉公式的具体形式如下式:

Python把时域变成频域 时域变成频域怎么变_傅里叶变换_12

Python把时域变成频域 时域变成频域怎么变_傅里叶变换_13Python把时域变成频域 时域变成频域怎么变_时域_14

Python把时域变成频域 时域变成频域怎么变_傅里叶变换_15

这个恒等式将这Python把时域变成频域 时域变成频域怎么变_离散时间傅立叶变换_16Python把时域变成频域 时域变成频域怎么变_信号处理_17Python把时域变成频域 时域变成频域怎么变_时域_14,1,0这几个常量联系在一起。

把长度有限的离散信号表示成长度无限的信号有两种方式。可以把信号无限地从左右进行延伸,延伸的部分用零来表示,这样,这个信号就可以被看成是非周期性离散信号,这里我们可以用到离散时域傅立叶变换的方法。

根据欧拉公式及其变化形式:

Python把时域变成频域 时域变成频域怎么变_傅里叶变换_12

Python把时域变成频域 时域变成频域怎么变_傅里叶变换_20

我们可以推出:
Python把时域变成频域 时域变成频域怎么变_离散时间傅立叶变换_21

Python把时域变成频域 时域变成频域怎么变_傅里叶变换_22

于是有:
Python把时域变成频域 时域变成频域怎么变_傅里叶变换_23

也可以把信号用复制的方法进行延伸,这样信号就变成了周期性离散信号,这时我们就可以用离散傅立叶变换方法(DFT)进行变换

Python把时域变成频域 时域变成频域怎么变_傅里叶变换_24


为什么要使用复数呢?不知道有没有小伙伴和我有一样的想法,直到我看到一个博主的解释。复数其实它只是个工具而已,就如钉子和锤子的关系,复数就像是锤子,作为一种使用的工具。因为有些问题用复数的形式进行运算更加方便,所以我们把要解决的问题表达成复数的形式,然后对复数进行运算,最后再转换回来得到我们所需要的结果。虽然看起来我们是在用复数进行运算,但是实际上我们还是在用我们一直接触到的实数在计算。