美文网首页图形学音视频其他FFmpeg与音视频流媒体工程开发相关
从时域和频域来解析傅里叶变换(含代码和性质)

从时域和频域来解析傅里叶变换(含代码和性质)

作者: LiBiscuit | 来源:发表于2018-12-01 12:03 被阅读593次

    冒泡~十二月啦!艰难的十一月总算是熬过去,十二月希望少熬一点吧(不可能)。
    【题外话:傅里叶变换讲道理应该是大一高数就学习,然而当时的老师因为考试不考就放弃了教学,于是乎现在的我学起来真是恶补的痛苦】

    傅里叶变换

    傅里叶变换实质涉及的是频域函数和时域函数的转换。

    概念解释

    a.先引入时域和频域这两个概念的解释。

    时域

    时域是真实世界,是惟一实际存在的域。可以这样理解,从我们出生开始,所接触的这个世界就是随着时间在变化的,是在运动的。

    频域

    频域它不是真实的,而是一个数学构造。如果说时域是惟一客观存在的域,那么频域是一个遵循特定规则的数学范畴,频域也被一些学者称为上帝视角。结合上面对时域的理解,如果时域是运动永不停止的,那么频域就是静止的。
    正弦波是频域中唯一存在的波形,这是频域中最重要的规则,即正弦波是对频域的描述,因为频域中的任何波形都可用正弦波合成
    通过图片来直观解释:
    在时域里面,一段音乐是什么?是一个随着时间变化的震动(我们可以观察到钢琴的琴弦一会上一会下的摆动)。
    相比较,在频域里面,一段音乐又是什么?是一个个音符,是乐谱。音符的个数是有限且固定的,但可以组合出无限多的乐曲。

    参考来源:https://zhuanlan.zhihu.com/p/19763358

    b.接下来再讲解两个概念 :频谱和相位谱

    频谱

    在这里先引入一个通俗的解释:


    如上图所示:
    第一幅图是一个余弦波 cos(x)
    第二幅图是 2 个余弦波的叠加 cos (x) +a.cos (3x)
    第三幅图是 4 个余弦波的叠加
    第四幅图是 10 个余弦波的叠加
    那么问题来了:
    随着正弦波数量逐渐的增长,他们最终会叠加成一个标准的矩形,那么可以推出什么?
    不仅仅是矩形,你能想到的任何波形都是可以如此方法用正弦波叠加起来的。

    接下来我们换一个角度来看看:
    从侧面看就是矩形波在频域的样子,是不是完全认不出来了?教科书一般就给到这里然后留给了读者无穷的遐想,以及无穷的吐槽,其实教科书只要补一张图就足够了:频域图像,也就是俗称的频谱。

    对比展示:

    image.png
    可以看出,从时域来看,我们会看到一个近似为矩形的波,而我们知道这个矩形的波可以被差分为一些正弦波的叠加。而从频域方向来看,我们就看到了每一个正弦波的幅值,可以发现,在频谱中,偶数项的振幅都是0,也就对应了图中的彩色直线。振幅为 0 的正弦波。
    正面--时域图像 侧面--频域图像
    动图展示:
    相位谱

    频谱只代表了一个正弦函数的幅值,而要准确描述一个正弦函数,我们不仅需要幅值,还需要相位,不同相位决定了波的位置,所以对于频域分析,仅仅有频谱(振幅谱)是不够的,我们还需要一个相位谱。
    频谱的重点是侧面看,相位谱的重点则是从下面看。


    如上图所示:投影点我们用粉色点来表示,红色的点表示离正弦函数频率轴最近的一个峰值,而相位差就是粉色点和红色点水平距离除以周期。将相位差画到一个坐标轴上就形成了相位谱。
    【这里需要纠正一个概念:时间差并不是相位差。如果将全部周期看作2Pi或者360度的话,相位差则是时间差在一个周期中所占的比例。我们将时间差除周期再乘2Pi,就得到了相位差。】

    傅里叶变换

    为什么需要傅里叶变换?
    如下图所示:上面我们能看到的仅仅是一个类似正弦波的波形,其幅值在按照一定的规律变化。如何记载这个波形的信息呢?尤其是量化的记载!是很困难的。那么这个时候引入傅里叶变换就可以得到一个频谱(幅值谱),主要包括3、5、7、9次谐波,一目了然!


    傅里叶变换是一种信号分析方法,让我们对信号的构成和特点进行深入的、定量的研究。
    把信号通过频谱的方式(包括幅值谱、相位谱和功率谱)进行准确的、定量的描述。
    这就是傅里叶变换的主要目的。
    (具体分析可参考:(https://www.sohu.com/a/224533027_99907714))

    公式定义:


    可以这样理解,
    ①为频率域的函数F(ω)表示为时间域的函数f(t)的积分形式
    ②为时间域的函数f(t)表示为频率域的函数F(ω)的积分
    傅里叶变换过程图解:

    具体看参考(https://blog.csdn.net/qq_33414271/article/details/79117586
    其他性质
    参考:(https://www.cnblogs.com/AndyJee/p/5073281.html)
    参考:百度百科

    Matlab实现(频谱和相位谱)

    %% 二维傅立叶变换
    %读取图片
    I=imread('Naruto.jpg');
    img=rgb2gray(I);
    %幅值图和相位谱
    %进行傅立叶变换
    f=fft2(img);        %傅里叶变换
    f=fftshift(f);      %使图像对称,中心化
    r=real(f);          %图像频域实部
    i=imag(f);          %图像频域虚部
    margin=log(sqrt(r.^2+i.^2));      %图像幅度谱,加log便于显示
    phase=real(angle(f)*180/pi);     %图像相位谱
    figure
    subplot(1,3,1),imshow(img),title('源图像');
    subplot(1,3,2),imshow(margin,[]),title('图像幅度谱');
    subplot(1,3,3),imshow(phase,[]),title('图像相位谱');
    

    参考(https://blog.csdn.net/qq_33414271/article/details/79117586
    https://ww2.mathworks.cn/help/matlab/math/fouriertransforms.html#responsive_offcanvas

    Ending~在自我理解的基础上完成了资料的搬运是很不容容易了!
    十二月加油鸭!

    相关文章

      网友评论

        本文标题:从时域和频域来解析傅里叶变换(含代码和性质)

        本文链接:https://www.haomeiwen.com/subject/jyulcqtx.html