精华内容
下载资源
问答
  • 傅立叶变换、拉普拉斯变换与小波变换手写公式推导笔记
  • 根据时域圆周移位特性 可得 即X1(k)={7,2+3j,-1-2j,-j} 5.2. 6 X(k)={7,2+3j,-1-2j,-j} 5.2.3 ... 8 中[x1(n) x2(n)]表示序列x1(n)和x2(n)的时域圆周卷积也称为循环卷积简称圆卷积其定义如下 5.2. 9 x1(n) 我们称
  • %画出时间系列图像 %傅里叶变换 for k=1:200 for n=1:200 X(k)=X(k)+x(n)*exp(-i*2*pi*n*k/N); end end f=abs(X); %对傅里叶变换后的图像取正数部分 figure(2),plot(f); %画出傅里叶变换后的图像 %滤波 H=ones(200)...

    MATLAB作业

    方法一:

    N=200;dt=0.001;n=1:200;

    x=3*sin(2*pi*10*n*dt)+3*sin(2*pi*30*n*dt)+sin(2*pi*40*n*dt)+sin(2 *pi*50*n*dt)+sin(2*pi*60*n*dt)+6*sin(2*pi*80*n*dt);%建立时间序列

    X=zeros(1,200); %给X一个预先的内存空间,提高运行速度figure(1),plot(n,x); %画出时间系列图像

    %傅里叶变换

    for k=1:200

    for n=1:200

    X(k)=X(k)+x(n)*exp(-i*2*pi*n*k/N);

    end

    end

    f=abs(X); %对傅里叶变换后的图像取正数部分

    figure(2),plot(f); %画出傅里叶变换后的图像

    %滤波

    H=ones(200);H(8:14)=0;H(186:193)=0; %建立40、50、60Hz的时间序列所在空间域数值为0的一维矩阵

    for k=1:200

    Y(k)=X(k)*H(k);

    end

    k=1:200;

    figure(3);

    plot(k,abs(Y)); %画出滤波之后的时间序列

    %傅里叶逆变换

    y=zeros(1,200)% 给y一个预先的内存空间,提高运行速度

    for n=1:200

    for k=1:200

    y(n)=Y(k)*exp(i*2*pi*n*k/N)+y(n);

    end

    y(n)=y(n)/N;

    end

    figure(4) ;

    n=1:200;

    plot(n,y,'r-',n,x,'b-');% 画出原时间序列和滤波后的时间序列,可见滤波之后的时间序列振幅明显变小

    方法二:

    N=200;dt=0.001;n=1:200;

    x=3*sin(2*pi*10*n*dt)+3*sin(2*pi*30*n*dt)+sin(2*pi*40*n*dt)+sin(2

    展开全文
  • 得到其频率响应,然后再做一次傅立叶反变换即可,当然其中傅立叶变换的公式是一定的,你可以将其看成是时域向频域做的一次映射,而输入,输出,单位冲激响应,这三者是知二推一的关系,显然在频域里做乘法运算比在...

    61ee2691c9e85f7eb403888d4726758f.png

    距离上一次发稿已经过去了快三个月,创作欲有些旺盛,虽然最近很忙,但还是想写点东西,因为近来重新仔细研读了奥本海姆的那本圣经级别的绿皮书《信号与系统》,深有感触,我在之前学习中的更多困惑也得到了解决,因此想分享给读者,同时也强烈推荐此书及MIT的奥本海姆相关公开课程给EE相关专业的朋友,不管是初学信号与系统还是已经学过这门课的同学,都非常值得细细品味

    在我大一还是大二(具体不记得了)学习这门课时,有一个很大的疑惑困扰着我,我们为什么要对一个信号做傅立叶展开呢?诚然,书上的很多例题告诉我们傅立叶变换让解题或者实际问题变得简单,但是并没有哪本书清楚的说明傅立叶展开的意义所在,而我仔细审视这个困惑的根源,可以分为两个部分,首先,为什么要对信号进行展开?其次,为什么一定是用复指数正交基展开?这个问题问扰了我很长一段时间,因为这两年做的最多还是数字信号处理相关的工程和项目,所以这个可以算是一个核心症结,而我接下来文章会对这两个困惑逐一进行解释,至少它现在已经能够让我非常安心和舒服的使用傅立叶变换了,希望也能给和我有同样困惑的朋友一点启发。(由于想保证我自己的连贯的创作体验,在接下来的论述中我不会加入任何公式和图形帮助理解,纯粹的语言文字描述,这可能对我是友好的,但对读者并不友好,但我想如果可以通篇读下来的读者一定会两眼发光,心旷神怡)

    整个信号与系统的框架建立中,我们大多数时间研究的系统默认都是线性时不变的(而在现实生活中常常还是因果的),为什么这么默认?因为物理过程大多具有线性和时不变性,同时,线性时不变系统的数学描述上具有共性,比如不同的系统可用同一微分方程或者差分方程来表示,因此我们易于建立一套方法论去分析这类系统,同时也更容易让学生来学习,这里就像我们研究回归问题时,通常学的都是线性拟合,比如最小二乘法,为什么,不是它在任何情况下都好,也不是非线性比不上线性,而是非线性相对于线性而言太复杂了,没有这么好解释,也不易建立方法论,就像现在的deep-learning,每一层输出都会经过一个激活函数,来对结果进行非线性变换,这在经过多层之后,整个模型就变成了一个黑匣子,只有机器知道自己在做些什么,而人类却很难去解释,对于这样的问题和系统,人类想去研究起来就格外的费劲

    而线性时不变系统又具有非常多很好的特性,比如说叠加性质,这里就要说到信号展开的问题了,为什么要展开?如果将线性时不变系统的输入用一组基本信号的线性组合来表示,可由系统对这些基本信号的响应,利用叠加性质得到整个系统的输出。因此,照这个思路继续下去,我们可以找到一种求系统输出的更简单的方法,而不需要每次都对于不同的x(t)去解微分方程的y(t)

    首先以离散时间信号为例,我们可以将一个时间序列表示成一串移位单位脉冲序列的线性组成,而系统对每一个移位脉冲都有一个输出,也就是响应,各个移位脉冲序列的区别仅在于在一个脉冲中加入了不同的时移,因此这里如果把系统变成时不变系统,根据时不变性,那么其对应的输出也就是某一脉冲序列的响应加入一与之对应的时移,因此我们可以确定一个单位冲激响应,而其他脉冲序列的响应仅是在其上添加一个时移,这样我们可以巧妙而简洁的将一个线性时不变系统的输出表示成输入序列与其单位冲激响应的卷积和的形式,故这里可以说是因为线性时不变系统特有的叠加性质和时不变性,才导致了卷积这么一个经典而又简洁的表达形式,同时,换句话说,当已知一个线性时不变系统的单位冲激响应时,你也就知道了这个系统的全部特性

    这里略作小结,我们已经看到了线性时不变系统的好,它让我们之前繁琐的求输出的过程变成了在已知单位冲激响应时求卷积的过程,而且因为卷积的形式就是一个循环移位求和,这个过程完全可以交给计算机去做,丝毫不需要花费太大的力气,而这里可以有人要问了,单位冲激响应怎么得到,把一个狄拉克函数丢到系统里作为输入,看系统的输出不就知道了吗?而以上过程的推导都是基于我们先将一个时间序列表示成一串移位单位脉冲序列的线性组成才得到的,所以这里我们也可以粗略感受到展开的妙处了,接下来我们来看看傅立叶同学做的事情(当然并不完全是他干的,或者说他只是提供最初思想的那个人)

    现在,我们不用移位脉冲信号,我们想要将信号表示成另一组基本信号的线性组合,而这里我们要遵循几个原则来让我们之后的分析变得简单,首先,这组基本信号要能够构成一类相当广泛的有用信号,也许不能表示所有信号,但至少在大多数情况下得够用,然后呢,在线性时不变系统中,对每一个基本信号的响应最好也要十分的简单

    我们知道在傅立叶分析中选用的基是复指数信号(对于傅立叶级数展开数学上大多数情况下会表示成三角函数的形式,但本质都是相同的,因为学过复变函数的都知道正弦波其实就是一个圆周运动在一条直线上的投影,故之后论述中以复指数信号为基)所谓的基,也就是在线代里我们学过的,在某个线性空间中如果可以找到了一些线性无关的向量,这些向量可以通过线性组合构成无数其他该空间的向量,那么这组线性无关的向量就称为该空间的一组基,虽然我们在线代里的基是以向量形式表示,而这里的基是一组函数,但思想上是一致的,如果这组函数两两之间的内积为零,而自己与自己的内积为1,那么这组基就被称为正交函数基,所谓内积,也就是求其在某个规定区间内的积分,很显然,傅立叶基是一组无限正交基

    接下来先从傅立叶级数说起,任意周期信号(功率有限)都可以表示成一组复指数信号(傅立叶基)的线性组合,这里用到的复指数信号可能是无限个,也可能是有限个,对于离散的情况而言,因为离散复指数信号的周期性,必然是有限的,而在满足狄利克雷条件时,信号的傅立叶级数展开是收敛的,而对于每组基前面的系数也非常好求,根据正交性,只需要将原始信号与基做内积即可求得,这原本应该是数学里级数那一块的内容,不做深究,但现在的问题来了,为什么我们要选择复指数信号作为基(傅立叶基),而不是其他的信号,其实在不同情况下,我们也是有依据其他的基所做的变换的,比如哈达玛变换,小波变换,这些基是不是比不上傅立叶基,或者说,为什么傅立叶基我们用的最多,这确实是一个值得思考的问题。

    这里回过头来看我们之前提到的寻找基的两个准则,首先,这组基本信号要能够构成一类相当广泛的有用信号(一会说到傅立叶变换时,就会知道傅立叶变换的使用条件是针对能量有限信号,只有这类信号才能做傅立叶变换),然后呢,在线性时不变系统中,对每一个基本信号的响应最好也要十分的简单,这里,就要说到复指数信号一个非常神奇的性质了,复指数信号是线性时不变系统的特征函数,所谓特征函数,又可以和线性代数里的特征向量做类比,如果某个矩阵乘以一个向量后所得向量与该向量平行,那么就称该向量为该矩阵的特征向量,而特征函数也就是说,一个复指数信号通过线性时不变系统后仍旧是一个复指数信号,其频率未发生变换,只是指数全面的幅度发生了变化,而这个幅度也是可以用一个通式表示的,那就是该线性时不变系统的单位冲激响应的傅立叶正变换,这件事情非常的神奇,神奇到我们就有了频谱这个东西(虽然准确来说我们在能量信号的傅立叶变换中才去说频谱,傅立叶级数中通常叫傅立叶系数谱)

    总之,这里通过线性时不变系统后,复指数信号的频率没变,系数是一个关于频率w的函数,我们将其称为频率响应,对于原始的输入信号在做傅立叶展开时(即一组复指数信号的线性组合),每个不同频率的复指数信号前都会有一个系数,这个称之为傅立叶系数而线性时不变系统也就可以看作是通过乘以相应频率点上的频率响应值来逐个改变输入信号的傅立叶系数,于是我们整理一下就会发现,如果我们知道一个线性时不变系统的单位冲激响应,通过傅立叶正变换可以求出其频率响应,而如果我们又知道输入信号的傅立叶系数,那么自己通过乘法就可以求出输出信号所对应的傅立叶级数,而不需要先在时间域上做卷积运算,再做傅立叶级数展开这么麻烦,根据复指数信号是线性时不变系统的特征函数这一点让原本的卷积运算变为了更加简单的逐频率系数相乘,确实是一件让人激动的事情

    虽然我们还只讲了傅立叶级数,没有说傅立叶变换,但观者应该已经可以体会到傅立叶分析的奇妙所在,而我们之前说的一个信号的傅立叶级数展开的条件是它首先是一个周期信号,并且功率有限,但如果这么限定下来,对于非周期信号岂不是很不友好,因此我们要把傅立叶级数再往前推一步,让其对于非周期信号也同样适用,而这就是我们通常所说的大名鼎鼎的无处不在的傅立叶变换(这篇我们讨论的是连续傅立叶变换以及离散时间傅立叶变换,对于其演进的版本,比如快速算法的DFT,FFT这些不做探讨)

    先给出傅立叶变换的使用条件,仅限于能量有限信号,对于非能量有限信号拉普拉斯在向你招手,而更傅立叶级数一样,还是那句话,一个能量有限信号可以由一组复指数信号的线性组合来表示,但是这里,每个复指数信号前面的系数都是无穷小,很多人可能对这个表述有疑惑,明明傅立叶正反变化都是以积分的形式给出(连续时),怎么又是线性组合,这里就要来源于傅立叶变换的推导,对于每一个能量有限的非周期信号都可以看作是周期无穷大的周期信号,而我们依然将其按照傅立叶级数的方式展开,就会得到一个黎曼和的形式,这和我们在高数中学的定积分的推到过程非常类似,一组极限和的结果变成了在某个区间内的积分,所以虽然傅立叶变换(连续)是以积分形式给出,但其本质还是可以看作一组复指数信号的线性组合,但我之前也说了,每个复指数信号前面的系数都是无穷小,因为会乘上一个积分式里最后的那个无穷小量,因此我们就不能在用傅立叶系数(傅立叶级数的系数)来表示,而需要找一个非无穷小量,并且去之前的傅立叶系数成正比,因此我们这里要做归一化,把每个傅立叶系数成以信号的周期T(无穷大量),得到的就是一个有限值,而这也就是我们通常所说的傅立叶正变换,或者说频谱公式(注意,这还是一个关于w的函数,可能是实数也可能是偶数),我们将其画出来应该是一个三维的图像,一个w,一个实轴,一个复轴,而如果对其取模的话,对于任意频率都会得到一个实数,就是我们通常所说的幅度谱,当然把它的相位提取出来就是相位谱,只是这个我们通常考试考的不多(但实际上同样非常重要)

    至此,不管是周期信号还是能量有限信号,我们都可以通过傅立叶级数展开或者傅立叶变换来得到其傅立叶系数谱或者频率谱,这件事情的好处有很多,比如对于原本的线性时不变系统而言,我们不在需要去直接求单位冲激响应,只需要通过输出信号的傅立叶变换除以输入信号的傅立叶变换,得到其频率响应,然后再做一次傅立叶反变换即可,当然其中傅立叶变换的公式是一定的,你可以将其看成是时域向频域做的一次映射,而输入,输出,单位冲激响应,这三者是知二推一的关系,显然在频域里做乘法运算比在时域做卷积运算要方便很多,但如果仅仅是减少运算量这件事情似乎很难说服大多数人接受傅立叶变换,它的优势觉不仅于此,这里知乎上有很多的讲解傅立叶变换通俗易懂的文章,读起来肯定比我这一篇要舒服很多,其中很多的道理也讲的很清楚,我这里不再过多展开,仅补充几点

    通常大家说自己学完傅立叶变换后最大的感受就是看问题的角度变多了,以前我们总在时域上看问题,最多不过是四维空间,而现在我们多了一个研究和分析问题的角度就是频域,时域上很多复杂的问题放到频域里面去看就会简单很多,比如一组不同频率的正弦波的叠加在时域上可能是一个比较复杂的模型,但在频域上则是对应于不同频率处的冲激响应,一目了然,从实际问题中体会傅立叶变换的妙处和哲学是一个理解它的不错的方法,但是在我看来,由于这本身还是一个数学方法,所以最好的还是要从数学的角度来看其实傅立叶变换,或者是小波变换,或者是离散余弦变换,这些变换本质都是一种基变换,对于不同的系统,不同的研究对象,我们可以选取不同的基来让研究和分析变得更加简单,比如因为复指数信号是线性时不变系统的特征函数,因此我们在研究线性时不变系统及其特性时通常采用傅立叶变换,选取了一组好的基,可以让问题变得简单,比如我们的现在机器学习里很多的降维算法,像PCA,K-L变换也是基变换,对于一些基可能会出现很多很小的系数,或者是零系数,这要用这组基去表示这一信号或者向量时也就更加的简洁,而越是简洁就越于分析

    总之,傅立叶变换是一个非常神圣而又优雅的数学方法,它的应用绝对远不止本文提到的这些,比如滤波,调制等等,由于笔者学通信出生,对这方面的内容还是很有兴趣的,但我想每一个学EE的同学都应该把傅立叶变换熟记于心,同时不至于其公司的简单形式,更应知道其适用范围和数学内涵,我想这对于我们以后的研究和学习都大有裨益

    展开全文
  • 2020-03-23傅立叶级数是将周期函数表示成由多个 (或无穷多个) 不同频率的正弦函数和余弦函数的线性组合,这些不同的频率是不连续的,例如傅立叶级数: ,其 sin 内的 x, 3x, 5x 是不连续的。...至于傅立叶变换...

    d9009ed8c35a69384ab67ecd72e2dd2b.png

    2020-03-23

    傅立叶级数是将周期函数表示成由多个 (或无穷多个) 不同频率的正弦函数和余弦函数的线性组合,这些不同的频率是不连续的,例如傅立叶级数:

    sin 内的 x, 3x, 5x 是不连续的。而傅立叶积分是将傅立叶级数延伸到非周期函数,但这些不同的频率是连续的,例如:若 f(x) 的傅立叶积分=

    ,其
    cos 内的 wx 是连续的 (因 w 积分从 0 积到 )。至于傅立叶变换是将函数变换成另一种形式,以方便某些领域的计算。接下来,我们将傅立叶级数及变换分成十个章节来探讨。

    周期函数

    (1). 若函数 f(x) 的定义域为实数集合 R 且存在一正数 T,使得 f(x+T)=f(x),x∈R,则称 f(x) 为周期函数,且此正的数值 T 称为 f(x) 的周期。

    (2). f(x) g(x) 的周期均为 T,则 h(x)=af(x)±bg(x) 亦为周期 T 的函数。

    (3). f(x) 的周期为 T,则 f(kx) 的周期为:

    (4). f(x) 的周期为 mT,g(x) 的周期为 nT,则 h(x)=af(x)±bg(x) 的周期为 m, n 的最小公倍数乘以 T。(若 m, n 为分数,则先通分后再取分子的最小公倍数)

    (5). 常数函数 f(x)=c,亦为周期函数,其周期为任意数。

    (6). 级数

    ,其中

    均为常数,则此级数称为三角级数,而
    称为此级数的系数。

    (7). 三角级数的周期为

    (ex.47) sin(2x)+cos(3x) 的周期。

    Sol:

    (1) . sin(2x) 的周期为

    (2) . cos(3x) 的周期为

    ,而
    ,两周期的分子
    3 2 的最小公倍数是 6,所以 sin(2x)+cos(3x) 的周期为

    周期为 2π 的傅立叶级数

    (1). 若函数 f(x) 是周期为 的周期函数,则其可以用下面的三角级数表示:

    (2). 在上式中,若 f(x) 已知,则

    可由下法求得:

    n=1, 2, 3…

    n=1, 2, 3…

    pf:

    (3). 用法:要求周期为的周期函数 f(x) 的傅立叶级数时,

    (a). 抄下

    (b). 抄下

    (c). 将题目的 f(x) 代入 (b) 式。

    (d). (b) 式积分出来,求出

    (e). 重复 (b)~(d) 式,算出

    (f). 最后将

    代入
    (a) 式。

    (g).

    求出前三项之值 (
    n=1, 2, 3 代入),找出其规律。

    (4).

    ,则右式称为
    f(x) 的傅立叶级数,而
    称为
    f(x) 的傅立叶系数。

    (ex.48) f(x) 的周期为 ,且

    ,求
    f(x) 的傅立叶级数。

    Sol:由傅立叶级数公式知

    (1).

    (2).

    (3).

    偶函数与奇函数的傅立叶级数

    此节的目的是要简化计算傅立叶系数的过程。

    (1). 若函数 f(x) 满足 f(-x)=f(x),则 f(x) 称为偶函数,例如:

    等,或图形沿
    y 轴对折,左右两边图形会重叠在一起,如下图:

    c5266e0f111789fce313c0f8d63aba07.png

    (2). 若函数 g(x) 满足 g(-x)=-g(x),则 g(x) 称为奇函数,例如:

    等,或图形沿
    y 轴对折,再沿 x 轴对折,右上图形与左下图形会重叠在一起,如下图:

    079b60dc2ea3706d534c9d929e192e5c.png

    (3). 偶函数与偶函数的乘积为偶函数,例如:

    为偶函数;偶函数与奇函数的乘积为奇函数,例如:
    为奇函数;奇函数与奇函数的乘积为偶函数,例如:
    为偶函数。

    (4). 偶函数积分积一个周期等于积半个周期的 2 倍,即若函数 f(x) 是周期为的偶函数,

    (5). 奇函数积分积一个周期的值为 0,即若函数 g(x) 是周期为 的奇函数,则

    (6). 若函数 f(x) 是周期为的周期函数,且为偶函数,则 f(x) f(x)cosnx 为偶函数,f(x)sinnx 为奇函数,所以 f(x) 的傅立叶级数为:

    其中,

    (7). 若函数 f(x) 是周期为的周期函数,且为奇函数,则 f(x) f(x)cosnx 为奇函数,f(x)sinnx 为偶函数,所以 f(x) 的傅立叶级数为:

    其中,

    (ex.49) f(x) 的周期为 ,且

    ,求
    f(x) 的傅立叶级数。

    Sol:f(x) 可改写成

    因为它是偶函数,所以

    (1).

    (2).

    (3).

    (4).

    任意周期函数之傅立叶级数

    (1). 周期为 2L 的周期函数 f(t) (注:L 为半周期),其傅立叶级数为:

    ,其中,

    Pf:

    说明:周期为 2L 的傅立叶级数,只要将周期为的傅立叶级数作下列二项修改,

    (a). 将公式的所有 π 改成 L

    (b). sin cos 内的 x 改成

    (2). 周期为 2L 的偶函数 f(x),其傅立叶级数为:

    其中,

    (3). 周期为 2L 的奇函数 f(x),其傅立叶级数为:

    其中,

    (ex.50) 周期为 4 f(x),且

    ,求
    f(x) 的傅立叶级数。

    Sol:週期 2L=4

    ,所以

    (1).

    (2).

    (3).

    (4).

    (5). 所以

    半周期函数 (或称半周期展开)

    (1). 若給定一半週期函數,如週期是 2L 的函數,f(x) 只在 [0, L] 內有定義,現要將函數f(x)的定義擴展到 (-∞, ∞),其擴展的方式有二種:

    (a). 偶函数扩展:即先扩展到 [-L, L] 一周期的偶函数,再扩展到 (-∞, ∞)

    (b). 奇函数扩展:即先扩展到 [-L, L] 一周期的偶函数,再扩展到 (-∞, ∞)

    函数本来定义在 [0, L] 半周期内,经以上的扩展方式,周期均变为 2L,称为"半周期展开"。

    (2). 要求半周期展开的傅立叶级数时,可以使用上节「任意周期函数之傅立叶级数」方法求得,及若是偶函数扩展或奇函数扩展,则代偶函数或奇函数的傅立叶级数公式。

    (ex.51) 求下列函数的偶函数和奇函数半周期展开,且

    Sol:半周期 L=2

    (1). 展开成一周期偶函数

    (a). 偶函数扩展:

    (b).

    (c).

    (d). n=1, 2, 3, …代入,得

    ,….

    (e). 所以

    (2). 展开成一周期奇函数

    (a). 奇函数扩展:

    (b).

    (c). n=1, 2, 3, …代入,得

    ,….

    (d). 所以

    复数傅立叶级数

    (1). 也可以用复数方法来求傅立叶级数,其与用前面的方法求出来的答案相同。

    (2). 函数 f(x) 是周期为 的函数,其复数傅立叶级数为

    ,其中,

    ,n=0, ±1, ±2, …

    (3). 要求复数傅立叶级数时,

    (a). 抄下

    (b). 抄下

    (c). 将题目的 f(x) 代入 (b) 式。

    (d). (b) 式积分出来。

    (e). 求出

    中的第
    -k 项 (即
    和第
    k 项 (即
    ,再将此二项相加起来,以消去虚数部分。

    (f). 求出

    的第
    0 项 (即
    )。

    (g).

    ,答案与用前面方法求出答案相同。

    注:

    (i). 若题目要求「复数傅立叶级数」,只要做到 (d) 步骤,再将

    代回
    (a) 式即可;

    (ii). 若题目要求「傅立叶级数」,则还要往下做以消去虚数 i,其結果与用前面方法求出答案相同。

    (4). 函数 f(x) 是周期为 2L 的函数,其复数傅立叶级数为:

    ,其中,

    ,n=0, ±1, ±2, …

    说明:周期为 2L 的复数傅立叶级数只要将周期为 的复数傅立叶级数作下列二项修改:

    (a). 将公式的所有 π 改成 L

    (b). e 的指数 x 改成

    (ex.52) f(x) 的周期为,且

    ,用复数方法求
    f(x) 的傅立叶级数。

    Sol:

    (1).

    (2).

    (注:

    ,因
    n 是整数,所以 sin(-nπ)=0)

    (3). (a). n=-k 代入

    (b). n=k 代入

    (c). (a)+(b)

    (4). n=0 代入

    (5).

    (答案与「周期为 的傅立叶级数」中 (ex.48) 相同。)

    傅立叶积分

    (1). 若函数 f(x) 为非周期性函数或考虑整个 x 轴时,就要使用傅立叶积分。

    (2). f(x) 的傅立叶积分为:

    ,其中,

    (3). f(x) 是偶函数,则 B(w)=0;若 f(x) 是奇函数,则 A(w)=0

    (ex.53)

    ,求其傅立叶级数。

    Sol:

    所以 f(x) 的傅立叶积分

    傅立叶余弦与正弦变换

    (1). fc(w) 称为 f(x) 的“傅立叶余弦变换” (其中,c 表示 cos),

    (2). f(x) 称为 f(x) 的“反傅立叶余弦变换”,

    (3). fs(w) 称为 f(x) 的“傅立叶正弦变换” (其中,s 表示 sin),

    (4). f(x) 称为 f(x) 的“反傅立叶正弦变换” (其中,c 表示 cos),

    (5). 它们在某些应用中仍然是首选,例如信号处理或统计。

    (ex.54)

    ,求其
    (1).傅立叶余弦级数; (2).傅立叶正弦级数。

    Sol:

    (1). 傅立叶余弦转换,

    (2). 傅立叶正弦转换,

    离散傅立叶变换

    (1). 在数字影像处理或通信系统的应用中,所处理的数据都是离散 (非连续) 数值。

    (2). f(x) 是周期为 的周期函数 (0≦x≦2π),对 f(x) N 次相同“间隔点”(是离散数值)的量测,即间隔点为

    k=1, 2, …., N-1,量测到的值是

    注:

    符号上面有箭头,表示其为向量。

    (3). f(x) 的离散傅立叶变换

    ,即

    =

    其中,

    (a).

    NxN 傅立叶矩阵。

    (b).

    a・b 是矩阵行与列位置的相乘,因
    NxN 矩阵,有时候
    會寫成

    (c).

    (d).

    (ex.55) N=4 次量测 (取样值),量到的值为

    ,此离散傅立叶变换为何?

    Sol:

    =
    =

    快速傅立叶变换

    (1). 离散傅立叶变换的矩阵 NxN,若取样点有 1,000 点,其计算时间会很常,此时可以用快速傅立叶变换 (Fast Fourier Transform, FTF) 来解题。

    (2). 快速傅立叶变换是将 N 分成 2 组,即 N=2M 来解。

    (3). 将原向量

    分解成二个包含
    M 个分量的向量,及包含所有的偶数分量
    ,和包含所有的奇数分量

    (注:有顶线的 f 表一向量,而无顶线的 f 表一纯量。)

    (4). 分别对

    计算其离散傅立叶变换,可利用下列公式求得:

    ---(A)

    ---(B)

    (注:上面两个

    是相同的。)

    (5). (A)、(B) 我们可以得到某一组量测点 f 的离散傅立叶变换,即为:

    (ex.56) N=4 次量测 (取样值),量到的值为

    ,此离散傅立叶变换为何?

    Sol: N=4,所以

    ,而
    (M=2)

    =

    (N=4)

    (A) 式得

    (B) 式得

    (C) 式得

    (D) 式得

    Ref.:

    李狗嗨:如何给文科生解释傅里叶变换?​zhuanlan.zhihu.com
    87d8e4ba262c9c4ab107fc887e9a818e.png
    分类
    展开全文
  • 全面解析傅立叶变换(非常详细)

    万次阅读 2020-12-21 11:17:05
    前言第一部分、 DFT第一章、傅立叶变换的由来第二章、实数形式离散傅立叶变换(Real DFT)从头到尾彻底理解傅里叶变换算法、下第三章、复数第四章、复数形式离散傅立叶变换前言:“关于傅立叶变换,无论是书本还是在...

    前言

    第一部分、 DFT

    第一章、傅立叶变换的由来

    第二章、实数形式离散傅立叶变换(Real DFT)

    从头到尾彻底理解傅里叶变换算法、下

    第三章、复数

    第四章、复数形式离散傅立叶变换

    前言:“关于傅立叶变换,无论是书本还是在网上可以很容易找到关于傅立叶变换的描述,但是大都是些故弄玄虚的文章,太过抽象,尽是一些让人看了就望而生畏的公式的罗列,让人很难能够从感性上得到理解”---dznlong,

    那么,到底什么是傅里叶变换算法列?傅里叶变换所涉及到的公式具体有多复杂列?

    傅里叶变换(Fourier transform)是一种线性的积分变换。因其基本思想首先由法国学者傅里叶系统地提出,所以以其名字来命名以示纪念。

    哦,傅里叶变换原来就是一种变换而已,只是这种变换是从时间转换为频率的变化。这下,你就知道了,傅里叶就是一种变换,一种什么变换列?就是一种从时间到频率的变化或其相互转化。

    ok,咱们再来总体了解下傅里叶变换,让各位对其有个总体大概的印象,也顺便看看傅里叶变换所涉及到的公式,究竟有多复杂:

    以下就是傅里叶变换的4种变体(摘自,维基百科)

    连续傅里叶变换一般情况下,若“傅里叶变换”一词不加任何限定语,则指的是“连续傅里叶变换”。连续傅里叶变换将平方可积的函数f(t)表示成复指数函数的积分或级数形式。

    这是将频率域的函数F(ω)表示为时间域的函数f(t)的积分形式。

    连续傅里叶变换的逆变换 (inverse Fourier transform)为:

    即将时间域的函数f(t)表示为频率域的函数F(ω)的积分。

    一般可称函数f(t)为原函数,而称函数F(ω)为傅里叶变换的像函数,原函数和像函数构成一个傅里叶变换对(transform pair)。

    除此之外,还有其它型式的变换对,以下两种型式亦常被使用。在通信或是信号处理方面,常以来代换,而形成新的变换对:

    或者是因系数重分配而得到新的变换对:

    一种对连续傅里叶变换的推广称为分数傅里叶变换(Fractional Fourier Transform)。分数傅里叶变换(fractional Fourier transform,FRFT)指的就是傅里叶变换(Fourier transform,FT)的广义化。

    分数傅里叶变换的物理意义即做傅里叶变换 a 次,其中 a 不一定要为整数;而做了分数傅里叶变换之后,信号或输入函数便会出现在介于时域(time domain)与频域(frequency domain)之间的分数域(fractional domain)。

    当f(t)为偶函数(或奇函数)时,其正弦(或余弦)分量将消亡,而可以称这时的变换为余弦变换(cosine transform)或正弦变换(sine transform).

    另一个值得注意的性质是,当f(t)为纯实函数时,F(−ω) = F*(ω)成立.

    傅里叶级数连续形式的傅里叶变换其实是傅里叶级数 (Fourier series)的推广,因为积分其实是一种极限形式的求和算子而已。对于周期函数,其傅里叶级数是存在的:

    其中Fn为复幅度。对于实值函数,函数的傅里叶级数可以写成:

    其中an和bn是实频率分量的幅度。

    离散时域傅里叶变换离散傅里叶变换是离散时间傅里叶变换(DTFT)的特例(有时作为后者的近似)。DTFT在时域上离散,在频域上则是周期的。DTFT可以被看作是傅里叶级数的逆变换。

    离散傅里叶变换 离散傅里叶变换(DFT),是连续傅里叶变换在时域和频域上都离散的形式,将时域信号的采样变换为在离散时间傅里叶变换(DTFT)频域的采样。在形式上,变换两端(时域和频域上)的序列是有限长的,而实际上这两组序列都应当被认为是离散周期信号的主值序列。即使对有限长的离散信号作DFT,也应当将其看作经过周期延拓成为周期信号再作变换。在实际应用中通常采用快速傅里叶变换以高效计算DFT。

    为了在科学计算和数字信号处理等领域使用计算机进行傅里叶变换,必须将函数xn定义在离散点而非连续域内,且须满足有限性或周期性条件。这种情况下,使用

    离散傅里叶变换(DFT),将函数xn表示为下面的求和形式:

    其中Xk是傅里叶幅度。直接使用这个公式计算的计算复杂度为O(n*n),而

    快速傅里叶变换(FFT)可以将复杂度改进为O(n*lgn)。(后面会具体阐述FFT是如何将复杂度降为O(n*lgn)的。)计算复杂度的降低以及数字电路计算能力的发展使得DFT成为在信号处理领域十分实用且重要的方法。

    下面,比较下上述傅立叶变换的4种变体,

    如上,容易发现:函数在时(频)域的离散对应于其像函数在频(时)域的周期性。反之连续则意味着在对应域的信号的非周期性。也就是说,时间上的离散性对应着频率上的周期性。同时,注意,离散时间傅里叶变换,时间离散,频率不离散,它在频域依然是连续的。

    如果,读到此,你不甚明白,大没关系,不必纠结于以上4种变体,继续往下看,你自会豁然开朗。(有什么问题,也恳请提出,或者批评指正)

    ok, 本文,接下来,由傅里叶变换入手,后重点阐述离散傅里叶变换、快速傅里叶算法,到最后彻底实现FFT算法,全篇力求通俗易懂、阅读顺畅,教你从头到尾彻底理解傅里叶变换算法。由于傅里叶变换,也称傅立叶变换,

    下文所称为傅立叶变换,同一个变换,不同叫法,读者不必感到奇怪。

    第一部分、DFT第一章、傅立叶变换的由来

    要理解傅立叶变换,先得知道傅立叶变换是怎么变换的,当然,也需要一定的高等数学基础,最基本的是级数变换,其中傅立叶级数变换是傅立叶变换的基础公式。

    一、傅立叶变换的提出

    傅立叶是一位法国数学家和物理学家,原名是Jean Baptiste Joseph Fourier(1768-1830), Fourier于1807年在法国科学学会上发表了一篇论文,论文里描述运用正弦曲线来描述温度分布,论文里有个在当时具有争议性的决断:任何连续周期信号都可以由一组适当的正弦曲线组合而成。

    当时审查这个论文拉格朗日坚决反对此论文的发表,而后在近50年的时间里,拉格朗日坚持认为傅立叶的方法无法表示带有棱角的信号,如在方波中出现非连续变化斜率。直到拉格朗日死后15年这个论文才被发表出来。

    谁是对的呢?拉格朗日是对的:正弦曲线无法组合成一个带有棱角的信号。但是,我们可以用正弦曲线来非常逼近地表示它,逼近到两种表示方法不存在能量差别,基于此,傅立叶是对的。

    为什么我们要用正弦曲线来代替原来的曲线呢?如我们也还可以用方波或三角波来代替呀,分解信号的方法是无穷多的,但分解信号的目的是为了更加简单地处理原来的信号。

    用正余弦来表示原信号会更加简单,因为正余弦拥有原信号所不具有的性质:正弦曲线保真度。一个正余弦曲线信号输入后,输出的仍是正余弦曲线,只有幅度和相位可能发生变化,但是频率和波的形状仍是一样的。且只有正余弦曲线才拥有这样的性质,正因如此我们才不用方波或三角波来表示。

    二、傅立叶变换分类 根据原信号的不同类型,我们可以把傅立叶变换分为四种类别:

    1、非周期性连续信号 傅立叶变换(Fourier Transform)

    2、周期性连续信号 傅立叶级数(Fourier Series)

    3、非周期性离散信号 离散时域傅立叶变换(Discrete Time Fourier Transform)

    4、周期性离散信号 离散傅立叶变换(Discrete Fourier Transform)

    下图是四种原信号图例(从上到下,依次是FT,FS,DTFT,DFT):

    这四种傅立叶变换都是针对正无穷大和负无穷大的信号,即信号的的长度是无穷大的,我们知道这对于计算机处理来说是不可能的,那么有没有针对长度有限的傅立叶变换呢?没有。因为正余弦波被定义成从负无穷小到正无穷大,我们无法把一个长度无限的信号组合成长度有限的信号。

    面对这种困难,方法是:把长度有限的信号表示成长度无限的信号。如,可以把信号无限地从左右进行延伸,延伸的部分用零来表示,这样,这个信号就可以被看成是

    非周期性

    离散信号,我们可以用到

    离散时域傅立叶变换(DTFT)的方法。也可以把信号用复制的方法进行延伸,这样信号就变成了

    周期性

    离散信号,这时我们就可以用

    离散傅立叶变换方法(DFT)进行变换。本章我们要讲的是离散信号,对于连续信号我们不作讨论,因为计算机只能处理离散的数值信号,我们的最终目的是运用计算机来处理信号的。

    但是对于非周期性的信号,我们需要用无穷多不同频率的正弦曲线来表示,这对于计算机来说是不可能实现的。所以对于离散信号的变换只有离散傅立叶变换(DFT)才能被适用,对于计算机来说只有离散的和有限长度的数据才能被处理,对于其它的变换类型只有在数学演算中才能用到,在计算机面前我们只能用DFT方法,后面我们要理解的也正是DFT方法。

    这里要理解的是我们使用周期性的信号目的是为了能够用数学方法来解决问题,至于考虑周期性信号是从哪里得到或怎样得到是无意义的。

    每种傅立叶变换都分成实数和复数两种方法,对于实数方法是最好理解的,但是复数方法就相对复杂许多了,需要懂得有关复数的理论知识,不过,如果理解了实数离散傅立叶变换(real DFT),再去理解复数傅立叶变换就更容易了,所以我们先把复数的傅立叶变换放到一边去,先来理解实数傅立叶变换,在后面我们会先讲讲关于复数的基本理论,然后在理解了实数傅立叶变换的基础上再来理解复数傅立叶变换。

    还有,这里我们所要说的变换(transform)虽然是数学意义上的变换,但跟函数变换是不同的,函数变换是符合一一映射准则的,对于离散数字信号处理(DSP),有许多的变换:傅立叶变换、拉普拉斯变换、Z变换、希尔伯特变换、离散余弦变换等,这些都扩展了函数变换的定义,允许输入和输出有多种的值,简单地说变换就是把一堆的数据变成另一堆的数据的方法。

    三、一个关于实数离散傅立叶变换(Real DFT)的例子

    先来看一个变换实例,下图是一个原始信号图像:

    这个信号的长度是16,于是可以把这个信号分解9个余弦波和9个正弦波(一个长度为N的信号可以分解成N/2+1个正余弦信号,这是为什么呢?结合下面的18个正余弦图,我想从计算机处理精度上就不难理解,一个长度为N的信号,最多只能有N/2+1个不同频率,再多的频率就超过了计算机所能所处理的精度范围),如下图:

    9个余弦信号:

    9个正弦信号:

    把以上所有信号相加即可得到原始信号,至于是怎么分别变换出9种不同频率信号的,我们先不急,先看看对于以上的变换结果,在程序中又是该怎么表示的,我们可以看看下面这个示例图:

    上图中左边表示时域中的信号,右边是频域信号表示方法,

    从左向右,-->,表示正向转换(Forward DFT),从右向左,

    用小写x[]表示信号在每个时间点上的幅度值数组, 用大写X[]表示每种频率的副度值数组(即时间x-->频率X),

    因为有N/2+1种频率,所以该数组长度为N/2+1,

    X[]数组又分两种,一种是表示余弦波的不同频率幅度值:Re X[],

    另一种是表示正弦波的不同频率幅度值:Im X[],

    Re是实数(Real)的意思,Im是虚数(Imagine)的意思,采用复数的表示方法把正余弦波组合起来进行表示,但这里我们不考虑复数的其它作用,只记住是一种组合方法而已,目的是为了便于表达(在后面我们会知道,复数形式的傅立叶变换长度是N,而不是N/2+1)。如此,再回过头去,看上面的正余弦各9种频率的变化,相信,问题不大了。

    第二章、实数形式离散傅立叶变换(Real DFT) 上一章,我们看到了一个实数形式离散傅立叶变换的例子,通过这个例子能够让我们先对傅立叶变换有一个较为形象的感性认识,现在就让我们来看看实数形式离散傅立叶变换的正向和逆向是怎么进行变换的。在此,我们先来看一下频率的多种表示方法。

    一、 频域中关于频率的四种表示方法

    1、序号表示方法,根据时域中信号的样本数取0 ~ N/2,用这种方法在程序中使用起来可以更直接地取得每种频率的幅度值,因为频率值跟数组的序号是一一对应的: X[k],取值范围是0 ~ N/2;

    2、分数表示方法,根据时域中信号的样本数的比例值取0 ~ 0.5: X[ƒ],ƒ = k/N,取值范围是0 ~ 1/2;

    3、用弧度值来表示,把ƒ乘以一个2π得到一个弧度值,这种表示方法叫做自然频率(natural frequency):X[ω],ω = 2πƒ = 2πk/N,取值范围是0 ~ π;

    4、以赫兹(Hz)为单位来表示,这个一般是应用于一些特殊应用,如取样率为10 kHz表示每秒有10,000个样本数:取值范围是0到取样率的一半。

    二、 DFT基本函数

    ck[i] = cos(2πki/N)

    sk[i] = sin(2πki/N)

    其中k表示每个正余弦波的频率,如为2表示在0到N长度中存在两个完整的周期,10即有10个周期,如下图:

    上图中至于每个波的振幅(amplitude)值(Re X[k],Im X[k])是怎么算出来的,这个是DFT的核心,也是最难理解的部分,我们先来看看如何把分解出来的正余弦波合成原始信号(Inverse DFT)。

    三、 合成运算方法(Real Inverse DFT)

    DFT合成等式(合成原始

    时间

    信号,频率-->时间,逆向变换):

    如果有学过傅立叶级数,对这个等式就会有似曾相识的感觉,不错!这个等式跟傅立叶级数是非常相似的:

    当然,差别是肯定是存在的,因为这两个等式是在两个不同条件下运用的,至于怎么证明DFT合成公式,这个我想需要非常强的高等数学理论知识了,这是研究数学的人的工作,对于普通应用者就不需要如此的追根究底了,但是傅立叶级数是好理解的,我们起码可以从傅立叶级数公式中看出DFT合成公式的合理性。

    _ _

    DFT合成等式中的ImX[k]和Re X[k]

    跟之前提到的Im X[k]和Re X[k]是不一样的,下面是转换方法(

    关于此公式的解释,见下文):

    但k等于0和N/2时,实数部分的计算要用下面的等式:

    上面四个式中的N是时域中点的总数,k是从0到N/2的序号。

    为什么要这样进行转换呢?这个可以从频谱密度(spectral density)得到理解,如下图就是个频谱图:

    这是一个频谱图,横坐标表示频率大小,纵坐标表示振幅大小,原始信号长度为N(这里是32),经DFT转换后得到的17个频率的频谱,频谱密度表示每单位带宽中为多大的振幅,那么带宽是怎么计算出来的呢?看上图,除了头尾两个,其余点的所占的宽度是2/N,这个宽度便是每个点的带宽,头尾两个点的带宽是1/N,而Im X[k]和Re X[k]表示的是频谱密度,即每一个单位带宽的振幅大小,但表示2/N(或1/N)带宽的振幅大小,所以分别应当是Im X[k]和Re X[k]的2/N(或1/N)。

    频谱密度就象物理中物质密度,原始信号中的每一个点就象是一个混合物,这个混合物是由不同密度的物质组成的,混合物中含有的每种物质的质量是一样的,除了最大和最小两个密度的物质外,这样我们只要把每种物质的密度加起来就可以得到该混合物的密度了,又该混合物的质量是单位质量,所以得到的密度值跟该混合物的质量值是一样的。

    至于为什么虚数部分是负数,这是为了跟复数DFT保持一致,这个我们将在后面会知道这是数学计算上的需要(Im X[k]在计算时就已经加上了一个负号(

    稍后,由下文,便可知),再加上负号,结果便是正的,等于没有变化)。

    如果已经得到了DFT结果,这时要进行逆转换,即合成原始信号,则可按如下步骤进行转换:

    1、先根据上面四个式子计算得出的值;

    2、再根据DFT合成等式得到原始信号数据。

    下面是用BASIC语言来实现的转换源代码:

    100 ‘DFT逆转换方法

    110 ‘/XX[]数组存储计算结果(时域中的原始信号)

    120 ‘/REX[]数组存储频域中的实数分量,IMX[]为虚分量

    130 ‘

    140 DIM XX[511]

    150 DIM REX[256]

    160 DIM IMX[256]

    170 ‘

    180 PI = 3.14159265

    190 N% = 512

    200 ‘

    210 GOSUB XXXX ‘转到子函数去获取REX[]和IMX[]数据

    220 ‘

    230 ‘

    240 ‘

    250 FOR K% = 0 TO 256

    260 REX[K%] = REX[K%] / (N%/2)

    270 IMX[K%] = -IMX[K%] / (N%/2)

    280 NEXT k%

    290 ‘

    300 REX[0] = REX[0] / N

    310 REX[256] = REX[256] / N

    320 ‘

    330 ‘ 初始化XX[]数组

    340 FOR I% = 0 TO 511

    350 XX[I%] = 0

    360 NEXT I%

    370 ‘

    380 ‘

    390 ‘

    400 ‘

    410 ‘

    420 FOR K% =0 TO 256

    430 FOR I%=0 TO 511

    440 ‘

    450 XX[I%] = XX[I%] + REX[K%] * COS(2 * PI * K% * I% / N%)

    460 XX[I%] = XX[I%] + IMX[K%] * SIN(2 * PI * K% * I% / N%)

    470 ‘

    480 NEXT I%

    490 NEXT K%

    500 ‘

    510 END

    上面代码中420至490换成如下形式也许更好理解,但结果都是一样的:

    420 FOR I% =0 TO 511

    430 FOR K%=0 TO 256

    440 ‘

    450 XX[I%] = XX[I%] + REX[K%] * COS(2 * PI * K% * I% / N%)

    460 XX[I%] = XX[I%] + IMX[K%] * SIN(2 * PI * K% * I% / N%)

    470 ‘

    480 NEXT I%

    490 NEXT K%

    四、 分解运算方法(DFT)

    有三种完全不同的方法进行DFT:

    一种方法是通过联立方程进行求解, 从代数的角度看,要从N个已知值求N个未知值,需要N个联立方程,且N个联立方程必须是线性独立的,但这是这种方法计算量非常的大且极其复杂,所以很少被采用;

    第二种方法是利用信号的相关性(correlation)进行计算,这个是我们后面将要介绍的方法;

    第三种方法是快速傅立叶变换(FFT),这是一个非常具有创造性和革命性的的方法,因为它大大提高了运算速度,使得傅立叶变换能够在计算机中被广泛应用,但这种算法是根据复数形式的傅立叶变换来实现的,它把N个点的信号分解成长度为N的频域,这个跟我们现在所进行的实域DFT变换不一样,而且这种方法也较难理解,这里我们先不去理解,等先理解了复数DFT后,再来看一下FFT。有一点很重要,那就是这三种方法所得的变换结果是一样的,经过实践证明,当频域长度为32时,利用相关性方法进行计算效率最好,否则FFT算法效率较高。现在就让我们来看一下相关性算法。

    利用第一种方法、信号的相关性(correlation)可以从噪声背景中检测出已知的信号,我们也可以利用这个方法检测信号波中是否含有某个频率的信号波:把一个待检测信号波乘以另一个信号波,得到一个新的信号波,再把这个新的信号波所有的点进行相加,从相加的结果就可以判断出这两个信号的相似程度。如下图:

    上面a和 b两个图是待检测信号波,图a很明显可以看出是个3个周期的正弦信号波,图b的信号波则看不出是否含有正弦或余弦信号,图c和d都是个3个周期的正弦信号波,图e和f分别是a、b两图跟c、d两图相乘后的结果,图e所有点的平均值是0.5,说明信号a含有振幅为1的正弦信号c,但图f所有点的平均值是0,则说明信号b不含有信号d。这个就是通过信号相关性来检测是否含有某个信号的方法。

    第二种方法:相应地,我也可以通过把输入信号和每一种频率的正余弦信号进行相乘(关联操作),从而得到原始信号与每种频率的关联程度(即总和大小),这个结果便是我们所要的傅立叶变换结果,下面两个等式便是我们所要的计算方法:

    第二个式子中加了个负号,是为了保持复数形式的一致,

    前面我们知道在计算时又加了个负号,所以这只是个形式的问题,并没有实际意义,你也可以把负号去掉,并在计算时也不加负号。

    这里有一点必须明白一个正交的概念:两个函数相乘,如果结果中的每个点的总和为0,则可认为这两个函数为正交函数。要确保关联性算法是正确的,则必须使得跟原始信号相乘的信号的函数形式是正交的,我们知道所有的正弦或余弦函数是正交的,这一点我们可以通过简单的高数知识就可以证明它,所以我们可以通过关联的方法把原始信号分离出正余弦信号。当然,其它的正交函数也是存在的,如:方波、三角波等形式的脉冲信号,所以原始信号也可被分解成这些信号,但这只是说可以这样做,却是没有用的。

    下面是实域傅立叶变换的BASIC语言代码:

    到此为止,我们对傅立叶变换便有了感性的认识了吧。但要记住,这只是在实域上的离散傅立叶变换,其中虽然也用到了复数的形式,但那只是个替代的形式,并无实际意义,现实中一般使用的是复数形式的离散傅立叶变换,且快速傅立叶变换是根据复数离散傅立叶变换来设计算法的,在后面我们先来复习一下有关复数的内容,然后再在理解实域离散傅立叶变换的基础上来理解复数形式的离散傅立叶变换。

    第三章、复数

    复数扩展了我们一般所能理解的数的概念,复数包含了实数和虚数两部分,利用复数的形式可以把由两个变量表示的表达式变成由一个变量(复变量)来表达,使得处理起来更加自然和方便。

    我们知道傅立叶变换的结果是由两部分组成的,使用复数形式可以缩短变换表达式,使得我们可以单独处理一个变量(这个在后面的描述中我们就可以更加确切地知道),而且快速傅立叶变换正是基于复数形式的,所以几乎所有描述的傅立叶变换形式都是复数的形式。

    但是复数的概念超过了我们日常生活中所能理解的概念,要理解复数是较难的,所以我们在理解复数傅立叶变换之前,先来专门复习一下有关复数的知识,这对后面的理解非常重要。

    一、复数的提出

    在此,先让我们看一个物理实验:把一个球从某点向上抛出,然后根据初速度和时间来计算球所在高度,这个方法可以根据下面的式子计算得出:

    其中h表示高度,g表示重力加速度(9.8m/s2),v表示初速度,t表示时间。现在反过来,假如知道了高度,要求计算到这个高度所需要的时间,这时我们又可以通过下式来计算:

    (

    多谢JERRY_PRI提出:

    1、根据公式h=-(gt2/2)+Vt(gt后面的2表示t的平方),我们可以讨论最终情况,也就是说小球运动到最高点时,v=gt,所以,可以得到t=sqt(2h/g)

    且在您给的公式中,根号下为1-(2h)/g,化成分数形式为(g-2h)/g,g和h不能直接做加减运算。

    2、g是重力加速度,单位是m/s2,h的单位是m,他们两个相减的话在物理上没有意义,而且使用您给的那个公式反向回去的话推出的是h=-(gt2/2)+gt啊(gt后面的2表示t的平方)。

    3、直接推到可以得出t=v/g±sqt((v2-2hg)/g2)(v和g后面的2都表示平方),那么也就是说当v2<2hg时会产生复数,但是如果从实际的v2是不可能小于2hg的,所以我感觉复数不能从实际出发去推到,只能从抽象的角度说明一下。

    )

    经过计算我们可以知道,当高度是3米时,有两个时间点到达该高度:球向上运动时的时间是0.38秒,球向下运动时的时间是1.62秒。但是如果高度等于10时,结果又是什么呢?根据上面的式子可以发现存在对负数进行开平方运算,我们知道这肯定是不现实的。

    第一次使用这个不一般的式子的人是意大利数学家Girolamo Cardano(1501-1576),两个世纪后,德国伟大数学家Carl Friedrich Gause(1777-1855)提出了复数的概念,为后来的应用铺平了道路,他对复数进行这样表示:复数由实数(real)和虚数(imaginary)两部分组成,虚数中的根号负1用i来表示(在这里我们用j来表示,因为i在电力学中表示电流的意思)。

    我们可以把横坐标表示成实数,纵坐标表示成虚数,则坐标中的每个点的向量就可以用复数来表示,如下图:

    上图中的ABC三个向量可以表示成如下的式子:

    A = 2 + 6j

    B = -4 – 1.5j

    C = 3 – 7j

    这样子来表达方便之处在于运用一个符号就能把两个原来难以联系起来的数组合起来了,不方便的是我们要分辨哪个是实数和哪个是虚数,我们一般是用Re( )和Im( )来表示实数和虚数两部分,如:

    Re A = 2 Im A = 6

    Re B = -4 Im B = -1.5

    Re C = 3 Im C = -7

    复数之间也可以进行加减乘除运算:

    这里有个特殊的地方是j2等于-1,上面第四个式子的计算方法是把分子和分母同时乘以c – dj,这样就可消去分母中的j了。

    复数也符合代数运算中的交换律、结合律、分配律:

    A B = B A

    (A + B) + C = A + (B + C)

    A(B + C) = AB + AC

    二、复数的极坐标表示形式

    前面提到的是运用直角坐标来表示复数,其实更为普遍应用的是极坐标的表示方法,如下图:

    上图中的M即是数量积(magnitude),表示从原点到坐标点的距离,θ是相位角(phase angle),表示从X轴正方向到某个向量的夹角,下面四个式子是计算方法:

    我们还可以通过下面的式子进行极坐标到直角坐标的转换:

    a + jb = M (cosθ + j sinθ)

    上面这个等式中左边是直角坐标表达式,右边是极坐标表达式。

    还有一个更为重要的等式——欧拉等式(欧拉,瑞士的着名数学家,Leonhard Euler,1707-1783):

    ejx = cos x + j sin x

    这个等式可以从下面的级数变换中得到证明:

    上面中右边的两个式子分别是cos(x)和sin(x)的泰勒(Taylor)级数。

    这样子我们又可以把复数的表达式表示成指数的形式了:

    a + jb = M ejθ (这便是复数的两个表达式)

    指数形式是数字信号处理中数学方法的支柱,也许是因为用指数形式进行复数的乘除运算极为简单的缘故吧:

    三、复数是数学分析中的一个工具

    为什么要使用复数呢?其实它只是个工具而已,就如钉子和锤子的关系,复数就象那锤子,作为一种使用的工具。我们把要解决的问题表达成复数的形式(因为有些问题用复数的形式进行运算更加方便),然后对复数进行运算,最后再转换回来得到我们所需要的结果。

    有两种方法使用复数,一种是用复数进行简单的替换,如前面所说的向量表达式方法和前一节中我们所讨论的实域DFT,另一种是更高级的方法:数学等价(mathematical equivalence),复数形式的傅立叶变换用的便是数学等价的方法,但在这里我们先不讨论这种方法,这里我们先来看一下用复数进行替换中的问题。

    用复数进行替换的基本思想是:把所要分析的物理问题转换成复数的形式,其中只是简单地添加一个复数的符号j,当返回到原来的物理问题时,则只是把符号j去掉就可以了。

    有一点要明白的是并不是所有问题都可以用复数来表示,必须看用复数进行分析是否适用,有个例子可以看出用复数来替换原来问题的表达方式明显是谬误的:假设一箱的苹果是5美元,一箱的桔子是10美元,于是我们把它表示成 5 + 10j,有一个星期你买了6箱苹果和2箱桔子,我们又把它表示成6 + 2j,最后计算总共花的钱是(5 + 10j)(6 + 2j) = 10 + 70j,结果是买苹果花了10美元的,买桔子花了70美元,这样的结果明显是错了,所以复数的形式不适合运用于对这种问题的解决。

    四、用复数来表示正余弦函数表达式

    对于象M cos (ωt + φ)和A cos(ωt ) + B sin(ωt )表达式,用复数来表示,可以变得非常简洁,对于直角坐标形式可以按如下形式进行转换:

    上式中余弦幅值A经变换生成a,正弦幅值B的相反数经变换生成b:A <=> a,B<=> -b,但要注意的是,这不是个等式,只是个替换形式而已。

    对于极坐标形式可以按如下形式进行转换:

    上式中,M <=> M,θ<=>φ。

    这里虚数部分采用负数的形式主要是为了跟复数傅立叶变换表达式保持一致,对于这种替换的方法来表示正余弦,符号的变换没有什么好处,但替换时总会被改变掉符号以跟更高级的等价变换保持形式上的一致。

    在离散信号处理中,运用复数形式来表示正余弦波是个常用的技术,这是因为利用复数进行各种运算得到的结果跟原来的正余弦运算结果是一致的,但是,我们要小心使用复数操作,如加、减、乘、除,有些操作是不能用的,如两个正弦信号相加,采用复数形式进行相加,得到的结果跟替换前的直接相加的结果是一样的,但是如果两个正弦信号相乘,则采用复数形式来相乘结果是不一样的。幸运的是,我们已严格定义了正余弦复数形式的运算操作条件:

    1、参加运算的所有正余弦的频率必须是一样的;

    2、运算操作必须是线性的,如两个正弦信号可以进行相加减,但不能进行乘除,象信号的放大、衰减、高低通滤波等系统都是线性的,象平方、缩短、取限等则不是线性的。要记住的是卷积和傅立叶分析也只有线性操作才可以进行。

    下图是一个相量变换(我们把正弦或余弦波变成复数的形式称为相量变换,Phasor transform)的例子,一个连续信号波经过一个线性处理系统生成另一个信号波,从计算过程我们可以看出采用复数的形式使得计算变化十分的简洁:

    在第二章中我们描述的实数形式傅立叶变换也是一种替换形式的复数变换,但要注意的是那还不是复数傅立叶变换,只是一种代替方式而已。下一章、即,第四章,我们就会知道复数傅立叶变换是一种更高级的变换,而不是这种简单的替换形式。

    第四章、复数形式离散傅立叶变换

    复数形式的离散傅立叶变换非常巧妙地运用了复数的方法,使得傅立叶变换变换更加自然和简洁,它并不是只是简单地运用替换的方法来运用复数,而是完全从复数的角度来分析问题,这一点跟实数DFT是完全不一样的。

    一、 把正余弦函数表示成复数的形式

    通过欧拉等式可以把正余弦函数表示成复数的形式:

    cos( x ) = 1/2 e j(-x) + 1/2 ejx

    sin( x ) = j (1/2 e j(-x) - 1/2 ejx)

    从这个等式可以看出,如果把正余弦函数表示成复数后,它们变成了由正负频率组成的正余弦波,相反地,一个由正负频率组成的正余弦波,可以通过复数的形式来表示。

    我们知道,在实数傅立叶变换中,它的频谱是0 ~ π(0 ~ N/2),但无法表示-π~ 0的频谱,可以预见,如果把正余弦表示成复数形式,则能够把负频率包含进来。

    二、 把变换前后的变量都看成复数的形式

    复数形式傅立叶变换把原始信号x[n]当成是一个用复数来表示的信号,其中实数部分表示原始信号值,虚数部分为0,变换结果X[k]也是个复数的形式,但这里的虚数部分是有值的。

    在这里要用复数的观点来看原始信号,是理解复数形式傅立叶变换的关键(如果有学过复变函数则可能更好理解,即把x[n]看成是一个复数变量,然后象对待实数那样对这个复数变量进行相同的变换)。

    三、 对复数进行相关性算法(正向傅立叶变换)

    从实数傅立叶变换中可以知道,我们可以通过原始信号乘以一个正交函数形式的信号,然后进行求总和,最后就能得到这个原始信号所包含的正交函数信号的分量。

    现在我们的原始信号变成了复数,我们要得到的当然是复数的信号分量,我们是不是可以把它乘以一个复数形式的正交函数呢?答案是肯定的,正余弦函数都是正交函数,变成如下形式的复数后,仍旧还是正交函数(这个从正交函数的定义可以很容易得到证明):

    cos x + j sin x, cos x – j sin x,……

    这里我们采用上面的第二个式子进行相关性求和,为什么用第二个式子呢?,我们在后面会知道,正弦函数在虚数中变换后得到的是负的正弦函数,这里我们再加上一个负号,使得最后的得到的是正的正弦波,根据这个于是我们很容易就可以得到了复数形式的DFT正向变换等式:

    这个式子很容易可以得到欧拉变换式子:

    其实我们是为了表达上的方便才用到欧拉变换式,在解决问题时我们还是较多地用到正余弦表达式。

    对于上面的等式,我们要清楚如下几个方面(也是区别于实数DFT的地方):

    1、X[k]、x[n]都是复数,但x[n]的虚数部分都是由0组成的,实数部分表示原始信号;

    2、k的取值范围是0 ~ N-1 (也可以表达成0 ~ 2π),其中0 ~ N/2(或0 ~ π)是正频部分,

    N/2 ~ N-1(π~ 2π)是负频部分,由于正余弦函数的对称性,所以我们把 –π~ 0表示成π~ 2π,这是出于计算上方便的考虑。

    3、其中的j是一个不可分离的组成部分,就象一个等式中的变量一样,不能随便去掉,去掉之后意义就完全不一样了,但我们知道在实数DFT中,j只是个符号而已,把j去掉,整个等式的意义不变;

    4、下图是个连续信号的频谱,但离散频谱也是与此类似的,所以不影响我们对问题的分析:

    上面的频谱图把负频率放到了左边,是为了迎合我们的思维习惯,但在实际实

    现中我们一般是把它移到正的频谱后面的。

    从上图可以看出,时域中的正余弦波(用来组成原始信号的正余弦波)在复数DFT的频谱中被分成了正、负频率的两个组成部分,基于此等式中前面的比例系数是1/N(或1/2π),而不是2/N,这是因为现在把频谱延伸到了2π,但把正负两个频率相加即又得到了2/N,又还原到了实数DFT的形式,这个在后面的描述中可以更清楚地看到。

    由于复数DFT生成的是一个完整的频谱,原始信号中的每一个点都是由正、负两个频率组合而成的,所以频谱中每一个点的带宽是一样的,都是1/N,相对实数DFT,两端带宽比其它点的带宽少了一半;复数DFT的频谱特征具有周期性:-N/2 ~ 0与N/2 ~ N-1是一样的,实域频谱呈偶对称性(表示余弦波频谱),虚域频谱呈奇对称性(表示正弦波频谱)。

    四、 逆向傅立叶变换

    假设我们已经得到了复数形式的频谱X[k],现在要把它还原到复数形式的原始信号x[n],当然应该是把X[k]乘以一个复数,然后再进行求和,最后得到原始信号x[n],这个跟X[k]相乘的复数首先让我们想到的应该是上面进行相关性计算的复数:

    cos(2πkn/N) – j si(2πkn/N),

    但其中的负号其实是为了使得进行逆向傅立叶变换时把正弦函数变为正的符号,因为虚数j的运算特殊性,使得原来应该是正的正弦函数变为了负的正弦函数(我们从后面的推导会看到这一点),所以这里的负号只是为了纠正符号的作用,在进行逆向DFT时,我们可以把负号去掉,于是我们便得到了这样的

    逆向DFT变换等式:

    x[n] = X[k] (cos(2πkn/N) + j sin(2πkn/N))

    我们现在来分析这个式子,会发现这个式其实跟实数傅立叶变换是可以得到一样结果的。我们先把X[k]变换一下:

    X[k] = Re X[k] + j Im X[k]

    这样我们就可以对x[n]再次进行变换,如:

    x[n] = (Re X[k] + j Im X[k]) (cos(2πkn/N) + j sin(2πkn/N))

    = ( Re X[k] cos(2πkn/N) + j Im X[k] cos(2πkn/N) +j Re X[k] sin(2πkn/N) - Im X[k] sin(2πkn/N) )

    = ( Re X[k] (cos(2πkn/N) + j sin(2πkn/N)) + ---------------------(1)

    Im X[k] ( - sin(2πkn/N) + j cos(2πkn/N))) ---------------(2)

    这时我们就把原来的等式分成了两个部分,第一个部分是跟实域中的频谱相乘,第二个部分是跟虚域中的频谱相乘,根据频谱图我们可以知道,Re X[k]是个偶对称的变量,Im X[k]是个奇对称的变量,即

    Re X[k] = Re X[- k]

    Im X[k] = - Im X[-k]

    但k的范围是0 ~ N-1,0~N/2表示正频率,N/2~N-1表示负频率,为了表达方便我们把N/2~N-1用-k来表示,这样在从0到N-1的求和过程中对于(1)和(2)式分别有N/2对的k和-k的和,对于(1)式有:

    Re X[k] (cos(2πkn/N) + j sin(2πkn/N)) + Re X[- k] (cos( - 2πkn/N) + j sin( -2πkn/N))

    根据偶对称性和三角函数的性质,把上式化简得到:

    Re X[k] (cos(2πkn/N) + j sin(2πkn/N)) + Re X[ k] (cos( 2πkn/N) - j sin( 2πkn/N))

    这个式子最后的结果是:

    2 Re X[ k] cos(2πkn/N)。

    再考虑到求Re X[ k]等式中有个比例系数1/N,把1/N乘以2,这样的结果不就是跟实数DFT中的式子一样了吗?

    对于(2)式,用同样的方法,我们也可以得到这样的结果:

    -2 Im X[k] sin(2πkn/N)

    注意上式前面多了个负符号,这是由于虚数变换的特殊性造成的,当然我们肯定不能把负符号的正弦函数跟余弦来相加,还好,我们前面是用cos(2πkn/N) – j sin(2πkn/N)进行相关性计算,得到的Im X[k]中有个负的符号,这样最后的结果中正弦函数就没有负的符号了,这就是为什么在进行相关性计算时虚数部分要用到负符号的原因(我觉得这也许是复数形式DFT美中不足的地方,让人有一种拼凑的感觉)。

    从上面的分析中可以看出,实数傅立叶变换跟复数傅立叶变换,在进行逆变换时得到的结果是一样的,只不过是殊途同归吧。本文完。(July、dznlong)

    展开全文
  • 用MATLAB实现图像的傅里叶变换解-数字图像处理3.1 二维离散傅里叶变换(DFT) 3.1.1 二维连续傅里叶变换 二维连续函数 f (x, y)的傅里叶变换定义如下: 设 是独立变量 的函数,...的付里叶变换,并定义 为 的反变换。 ...
  • 傅里叶变换和反变换

    千次阅读 2017-01-07 16:33:57
    傅里叶变换和反变换
  • 注:本系列来自于图像处理课程实验。...这些方法称为变换域方法,最常见的变换域是频域。 使用Fourier变换把图像从空间域变换到频域。在频域内做对应增强处理,再从频域变换到空间域得到处理后的图像。 我们这里主...
  • C#|图像快速傅立叶变换与反变换

    千次阅读 2016-11-01 22:55:20
    C#实现图像快速傅立叶变换与反变换的原理与程序
  • 注意:这一系列实验的图像处理程序,...这些方法称为变换域方法,最常见的变换域是频域。 使用Fourier变换把图像从空间域变换到频域。在频域内做对应增强处理,再从频域变换到空间域得到处理后的图像。 我们这里...
  • 从头到尾彻底理解傅里叶变换算法

    万次阅读 多人点赞 2016-11-06 16:15:38
    从头到尾彻底理解傅里叶变换算法
  • 傅立叶变换常见公式

    千次阅读 2020-06-26 16:57:26
    傅里叶变换 连续周期信号的傅里叶级数 CTFS 三角形式 x(t)=a0+∑k=1+∞[akcos(kw0t)+bksin(kw0t)] x(t)=a_0+\sum_{k=1}^{+\infty}[a_kcos(kw_0t)+b_ksin(kw_0t)] x(t)=a0​+k=1∑+∞​[ak​cos(kw0​t)+bk​sin(kw0...
  • 离散傅立叶变换与逆变换

    千次阅读 2015-08-28 09:39:44
    傅立叶变换实现韩式为idft,逆变换后输出的为复数,我们可取其实部显示即可 int main(){ Mat I = imread( "F:\\opencv_test\\6.tif" , 0 ); if (I.empty()) return - 1 ; //傅立叶变换 int m=...
  • 第3章傅立叶变换.doc

    千次阅读 2021-02-05 02:57:21
    第3章傅立叶变换第三章 连续信号与系统的频域分析1、求图(a)中所示梯形信号的傅里叶变换图(a)图(b)图(1) 梯形信号的微分求解解:求信号的频谱有多种解法,可按定义、微分性质等求解,下面列出几种解法。(1) 用微分...
  • 对于这个子,我们最想问的问题是为什么它比连续傅里叶变换多了一个系数 1 N \frac{1}{N} N 1 ​ 为了解答这个问题,我们先改写一下DFT与inverse DFT 我们定义向量 ω \omega ω 为: ω ‾ [ m ] = e 2...
  • 这时候我们就需要拿出来我们的黑科技——傅里叶变换。一、傅里叶级数的推广当然这东西肯定不是凭空脑补出来的,而是将傅里叶级数进一步推广到非周期函数上。现在已经得到了周期函数的情况,一种很自然的想法就是将非...
  • 第三节 连续时间周期信号的频谱分析 一)周期矩形脉冲的频谱 三、 周期信号的有效频帶宽度(简称带宽) 四、 周期信号的功率谱 第四节、 连续时间非周期信号的频谱 一、 从傅立叶级数到傅里叶变换 三、一些典型信号的 ...
  • 我已经写过傅立叶变换(FT)不适合非平稳信号,并且已经展示了一些例子以使其更加清晰。 快速回顾一下,让我举一个例子。 假设我们有两个不同的信号。 还假设它们都具有相同的光谱成分,但有一个主要区别。 假设...
  • 傅里叶变换(一)——认识傅里叶变换

    万次阅读 多人点赞 2018-05-29 22:36:07
    注:本文为博主参考书籍和他人文章并加上自己的理解所编,作为学习笔记使用并将其分享出去供大家学习。若涉及到引用您的文章内容请评论区告知!...一、什么是傅里叶变换   时域及频域  在讲...
  • 3.1 Python图像的频域图像增强-图像的傅里叶变换和反变换 文章目录3.1 Python图像的频域图像增强-图像的傅里叶变换和反变换1 算法原理2 代码3 效果 1 算法原理 图像的傅里叶变换和反变换(需要考虑图像旋转、平移时...
  • 卷积与傅立叶变换

    万次阅读 多人点赞 2018-06-29 15:43:09
    一、卷积 1、一维的卷积 连续: 在泛函分析中,卷积是通过两个函数f(x)f(x)f(x)和g(x)g(x)g(x)生成第三个函数的一种算子,它代表的意义是:两个函数中的一个(我取g(x)g(x)g(x),可以任意取)函数,把g(x)g(x)g...
  • 连续傅里叶变换 傅里叶变换的性质 离散傅里叶变换(DFT) 从前面我们已经知道,非周期连续函数傅里叶变换如下 F(ω)=∫−∞+∞f(t)e−iωtdt F(\omega)=\int ^{+\infty}_{-\infty}f(t)e^{-i\omega t}dt F(ω)=∫−...
  • (本人为本文原作者,转载请标明出处)第一节 三角函数正交性... 并由2.2可知,角速度和正弦波的频率是正相关的。同时,因为三角函数是周期函数,其在-π到π的积分必定为0,由此性质可写出2.3,2.4 设某三角函数...
  • 理解离散傅立叶变换

    千次阅读 2017-06-04 20:27:05
    理解离散傅立叶变换(一)  ------傅立叶变换的由来  关于傅立叶变换,无论是书本还是在网上可以很容易找到关于傅立叶变换的描述,但是大都是些故弄玄虚的文章,太过抽象,尽是一些让人看了就望而生畏的公式的...
  • 学过信号处理的都应该知道傅立叶变换把时域上的信号处理为频域上的信号叠加对于在空间域上的数字图像,我们也能通过傅立叶变换转换为频域类的信号在实现某些图像处理的时候,频域类的处理比空间域更简单好啦,我们来...
  • 傅里叶变换常用的就可以了 问题是我找不到教材书了啊 大概最常用的输10个左右就ok了连续傅里叶变换 一般情况下,若“傅立叶变换”一词的前面未加任何限定语,则指的是“连续傅里叶变换”。“连续傅里叶变换”将...
  • 以下为原创内容转载请注明地址 Fw=fourier(y):连续傅里叶变换函数 ft=ifourier(Fw,t):连续傅里叶变换函数 傅里叶变换举例如下: ...%Fw即为傅里叶变换后的子 ezplot(Fw);%可以画图检查一下 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,388
精华内容 2,155
关键字:

傅里叶反变换式