精华内容
下载资源
问答
  • MATLAB求傅里叶级数

    2013-03-14 23:03:16
    MATLAB求傅里叶级数,有例子,有真相
  • Funike的方法来做波浪反射分析,就是通过得到的三个位置随时间变化的水面高度数据,用MATLAB程序,过程中用到傅里叶变换之后,求得随频率分布的密度图像。我使用的是MATLAB R2010b操作系统 64位 Win7​我得到的最后...

    本帖最后由 多多会迈特来布 于 2016-2-11 05:59 编辑

    我现在是需要用水力学的一个叫做Mansard&Funike的方法来做波浪反射分析,就是通过得到的三个位置随时间变化的水面高度数据,用MATLAB程序,过程中用到傅里叶变换之后,求得随频率分布的密度图像。

    我使用的是MATLAB R2010b  操作系统 64位 Win7

    我得到的最后密度分布图像是这样的

    forum.php?mod=image&aid=185279&size=300x300&key=9bcee5c52b44874f&nocache=yes&type=fixnone

    然而另外一个软件得到的图像是

    0a6e3c2bd01bb3292945025b736d69c1.png

    pastedImage.png (59.04 KB, 下载次数: 3)

    2016-2-11 05:26 上传

    这两张图是在相同的数据条件下得到的,而第二章的图应该是对的。就是中间一个频率的图很高,然后两边低。但是由于那个软件在学术上来说已经过期了, 所以我导师要求我在matlab里面吧这个程序弄通。

    以下是我有疑问的程序部分

    N=2^14; %Number of Records

    L=2^14; %Transform Length

    SmoothingK=2^0;

    %Define all the required Mansard & Fuke variables

    fd=zeros(L,1); %Frequency division matrix

    %Sampling Frequency

    Fs=(N-1)/(Times(N,1)-Times(1,1));

    %Find the resolution from the sampling frequency

    f=Fs/L;

    %Auto spectal density for each probe

    SP1=pwelch(P1,(L/SmoothingK),[],L)/(Fs/12.566);

    SP2=pwelch(P2,(L/SmoothingK),[],L)/(Fs/12.566);

    SP3=pwelch(P3,(L/SmoothingK),[],L)/(Fs/12.566);

    %Find amplitude spectra

    AP1=zeros(L,1);

    AP2=zeros(L,1);

    AP3=zeros(L,1);

    for i = 1:(L/2)

    AP1(i,1)=sqrt((SP1(i,1)*f));

    AP2(i,1)=sqrt((SP2(i,1)*f));

    AP3(i,1)=sqrt((SP3(i,1)*f));

    end

    %Generate cross spectral densities

    CSD12=cpsd(P1,P2,(L/SmoothingK),[],L);

    CSD13=cpsd(P1,P3,(L/SmoothingK),[],L);

    PH11=zeros(L,1);

    PH12=zeros(L,1);

    PH13=zeros(L,1);复制代码

    可不可以请大神帮我看看有没有什么问题 为什么会出现和第二章图片差距这么大的第一张图片。由于我是MATLAB初学者, 对于傅里叶变换也只是看过网络上的扫盲,不知道错误在哪儿啊?  另外由于程序不是我写的,我是拿到这个程序然后将它修改然后让他能运行处正确结果。其中我对于pwelch后面Fs/12.566 这个部分不是很理解。  Fs是采样频率

    程序中的AP1,AP2,AP3就是这张图

    d19bc888bf23651490086c89182c956f.png

    QQ截图20160211060145.png (43.12 KB, 下载次数: 6)

    2016-2-11 05:59 上传

    中公式中的Ap,k,是频率k/T对应的傅里叶参数。

    以下是我的MATLAB软件和一篇讲述这个软件用的算法的论文,比较重要的内容我在文中用高亮标出来了。论文和完整程序我都附件在了帖子里,由于数据文件太大了,所以就没有上传,如果需要我也可以提供

    谢谢各位大神了

    我的QQ292031713  如果有思路也可以加我细聊 谢谢啦! 最近好急这个

    我根据讲述这个程序用的Mansard&Funke的方法的文章里面写的计算方法检查过,后面的步骤基本都是正确的,比较可能出现问题的部分就是我写在上方的程序部分。

    展开全文
  • 该项目提供不同信号的 Matlab 实现。该项目可以使用该技术计算任何信号的傅立叶级数系数​​。 在这个项目中,我们测试了 5 个不同的信号。
  • ;matlab快速傅里叶变换; 通过分析300年左右的太阳黑子活动的记录资料可以发现每过11年就会达到一个极大值;matlab快速傅里叶变换;傅里叶系数Y在复平面上的分布;第四章完
  • 1的对称方波的前十项傅里叶级数的系数(三角函数形式),并分别用前三项、前五项和前十项恢复原信号,时域采样点数N=1000,所有图中时间坐标从-0.5到0.5。 ...
  • 大纲从积分变换谈起积分变换的基本概念积分变换的来源傅里叶级数傅里叶级数的相关基础概念傅里叶级数的基石——三角函数系及其正交性三角函数系三角函数系的正交性傅里叶级数的含义傅里叶系数的导出傅里叶级数收敛...

    从积分变换谈起

    积分变换的基本概念

    积分变换是函数变换的一种。积分变换可以通过计算原函数与一个含参函数的乘积的积分映射为另一个函数。这里要变换的原函数称为原像函数,含参函数称为积分变换核函数,变换后的函数称为像函数
    积分变换的基本概念

    积分变换的来源

    积分变换来源于数学中的转化思想。在数学中有些问题直接求解较为复杂,而通过转化就能将原问题转化成较为简单的问题,通过求解较为简单的问题,得到解之后再进行逆变换就能得到原问题的解。比如通过取对数将复杂的乘积运算转化为加减运算,然后通过对数的逆运算——指数运算可以得到原问题的解。

    如要计算:ab×aca^b \times a^c。将整个式子取以a为底的对数,loga(ab×ac)=b+c\log_a (a^b \times a^c)=b+c,然后再将结果取以a为底,b+c为幂的指数,得到ab×ac=ab+ca^b \times a^c=a^{b+c}。这就是积分变换转化思想的核心所在。

    傅里叶级数

    要深入了解傅里叶变换,就不得不先了解傅里叶级数和傅里叶积分。

    傅里叶级数的相关基础概念

    傅里叶级数和幂级数都可以用来逼近函数,但是幂级数要求被逼近函数连续,且有任意阶导数(从函数的幂级数展开式中包含任意阶导数可以理解这一点。),同时还要求余项的极限为0。而傅里叶级数只要求函数连续或者有有限个第一类间断点。(确保被逼近函数可积,从傅里叶级数的系数由积分确定可以理解这一点。)

    傅里叶级数的基石——三角函数系及其正交性

    三角函数系

    三角函数系为1,cosx,sinx,cos2x,sin2x,...,cosnx,sinnx...1,\cos {x},\sin{x},\cos{2x},\sin{2x},...,\cos{nx},\sin{nx}...

    三角函数系的正交性

    三角函数系在[π,π][-\pi,\pi]上正交,也就是说上述三角函数系中任意两个相异函数的乘积在[π,π][-\pi,\pi]的积分为0。(函数系的正交和我们之前理解直线垂直和向量正交都不一样,但是共同点都在于乘积为0,只是此处是乘积的积分为0。)
    三角函数系的正交性
    对于上图中的第一二个式子,可以由三角函数的周期性很容易理解,也可以直接通过积分求得。
    而对于上图中的3,到5式,则可以通过积化和差后依然由三角函数的周期性得到。验证三角函数系的正交性
    注意:两个相同函数的乘积在[π,π][-\pi,\pi]上不为0。事实上,有如下结果在这里插入图片描述

    傅里叶级数的含义

    所谓函数的傅里叶级数,就是把函数表示成三角级数的形式。在这里插入图片描述如上式右边所示的函数项级数就是三角级数。其中的系数a0,ak,bka_0,a_k,b_k称为傅里叶系数,由下面的式子给出(注意aaa0a_0开始而bbb1b_1开始)在这里插入图片描述

    傅里叶系数的导出

    在这里插入图片描述
    在这里插入图片描述
    从上述导出傅里叶系数的过程中可以看出,三角函数系的正交性是导出傅里叶系数的关键。(相异函数积分为0,相同函数除1外全为π\pi)。
    而且也可以理解为什么三角级数的常数项是a02\frac{a_0}{2}。这样的话恰好与后面导出的ana_nn=0n=0的时候是一致的。

    傅里叶级数收敛条件与收敛定理

    当周期为2π2\pi的函数满足狄利克雷条件:

    1. [π,π][-\pi,\pi]上连续或者有有限个间断点(是可积的)
    2. 在一个周期上有有限个极值点(保证函数不作无限次振动)

    则函数f(x)f(x)的傅里叶级数a02+n=0(ancosnx+bnsinnx)\frac{a_0}{2}+\sum_{n=0}^{\infty} (a_n\cos nx + b_n\sin nx)收敛于12[f(x0)+f(x+0)]\frac{1}{2}[f(x-0)+f(x+0)]。则当x是函数的连续点时傅里叶级数收敛于f(x)f(x)。 而当x是f(x)f(x)的间断点的时候,傅里叶j数收敛于12[f(x0)+f(x+0)]\frac{1}{2}[f(x-0)+f(x+0)].

    为便于理解,下面给出了一个傅里叶级数的典型例题。在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    从上面这个例题中也可以看出,当f(x)是一个奇函数的时候,由于奇函数乘以cosnx\cos nx仍然是奇函数,在对称区间[π,π][-\pi,\pi]上积分为0,其傅里叶级数将只包含正弦项。
    注意

    1. 在写函数f(x)f(x)等于其傅里叶级数的时候一定要注意标明可以取等号的范围,也就是把所有的函数间断点去除。
    2. 傅里叶级数是三角级数,因而其每一项在整个实数范围内都是连续的,但是其和函数却在实数范围内有间断点。
    3. 上述讨论的是定义在R的周期函数的傅里叶级数,而**利用周期延拓可以求出仅仅定义在区间[π,π][-\pi,\pi]的函数f(x)f(x)**的傅里叶级数。(注意在写成立范围的时候限定在[π,π][-\pi,\pi]即可)。如下面这道例题讨论的一样。在这里插入图片描述
      在这里插入图片描述在这里插入图片描述
      注意:上述求出的倒数平方和的结果非常典型,值得记住。

    从周期函数到任意区间函数的傅里叶级数

    周期为2π2\pi的奇函数偶函数的傅里叶级数

    在这里插入图片描述

    定义在区间[0,π][0,\pi]的非周期函数的傅里叶级数

    在这里插入图片描述
    从上述图片可以看出,定义在区间[0,π][0,\pi]的函数的傅里叶级数并不唯一,选择不同的延拓方式可以得到对应的正弦级数表达式和余弦级数表达式。

    周期为2l的函数的傅里叶级数

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述从上述周期为2l的函数的傅里叶级数的展开式中可以看出ω=πl\omega=\frac{\pi}{l}。下文洪将用到这个式子得出傅里叶级数的复数表达式。

    定义在任意有限区间[a,b][a,b]函数的傅里叶级数

    对于任意有限区间上的函数,既可以通过换元成定义在对称区间上的函数然后进行周期延拓转化成上一种情况解决;也可以通过换元成定义在[0,l]区间上的函数进行奇延拓或者偶延拓成对称区间上的函数然后进行周期延拓,最后展开成傅里叶级数,
    在这里插入图片描述
    在这里插入图片描述

    傅里叶积分

    傅里叶级数的复指数形式


    在这里插入图片描述
    将傅里叶系数换成指数:在这里插入图片描述在这里插入图片描述
    根据上述cnc_nana_n还有bn,b_n之间的关系,cnc_n可以写成:
    在这里插入图片描述

    傅里叶积分的定义

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    对于傅里叶积分公式中的内层积分对应的其实是傅里叶级数的系数,由于是任意函数,周期趋于无穷大,所以变成了积分的样子。外层积分对应的是傅里叶级数的求和符号

    傅里叶积分定理(傅里叶级数收敛定理的升级)

    之前讨论了定义在区间[π,π][-\pi,\pi]的函数的收敛定理,下面给出了任意函数的傅里叶积分的存在定理:
    在这里插入图片描述
    在这里插入图片描述
    根据欧拉公式可以证明。不懂可以参考:第八章 傅里叶变换 - 百度文库

    傅里叶变换

    傅里叶变换的概念

    在这里插入图片描述
    在这里插入图片描述
    傅里叶变换是一种积分变换,原像函数是f(t)f(t),像函数对应F(ω)F(\omega),核函数为eiωte^{-i\omega t}。傅里叶变换对应的其实是求函数的傅里叶系数。原函数和傅里叶系数都能确定一个函数的值,只是两种不同的形式。
    傅里叶逆变换也是一种积分变换,原像函数是F(ω)F(\omega),像函数对应f(t)f(t),核函数为eiωt2π\frac{e^{i\omega t}}{2\pi}。傅里叶逆变换对应的是求傅里叶级数的和。

    求傅里叶变换的典型例题

    指数衰减函数的傅里叶变换

    在这里插入图片描述
    在这里插入图片描述
    (请先阅读下文MATLAB在求解fourier变换中的应用后阅读程序)使用MATLAB求上述傅里叶变换如下:

    %% 傅里叶变换eg1
    clc;clear;
    syms t w
    syms b positive  // 定义一个正的常数b
    f(t)=exp(-b*t)*heaviside(t);
    ft=fourier(f(t),w);
    

    运行结果:

    ft =
     
    1/(b + w*1i)
    

    注:

    • heaviside(x)是阶梯函数,x>0时返回1,x<0时返回0,x=0时返回12\frac{1}{2}
    • syms b positive定义一个正的参数b

    根据傅里叶逆变换的定义,可以求出上述傅里叶变换结果的逆变换在这里插入图片描述
    在这里插入图片描述注意

    • 上述求解结果是通过傅里叶变换的定义得到的而不是通过正常的积分手段得到。这说明傅里叶变换可以用来求一些正常积分不好求的特殊积分。
    • 在求解傅里叶逆变换的过程中,经常使用将复指数化成三角形式的技巧,然后通过奇偶性化简。

    使用MATLAB命令求解傅里叶逆变换如下

    clc;clear;
    syms t w b
    ft=ifourier(1/(b + w*1i),t)
    

    运行结果:

    ft =
     
    (exp(-b*t)*(sign(t) + 1))/2
    

    恰好可以得到原函数。(与原函数稍有不同:在间断点x=0处,得到等于左右极限的平均值。这与傅里叶积分定理所给出的结果是一致的。)

    正态钟形函数的傅里叶变换

    在这里插入图片描述
    在这里插入图片描述
    从上述求傅里叶变换的过程中可以看出,对于求指数的负复数平方次幂和实数的结果是一致的,这可以通过换元x=t+iω2βx=t+\frac{i\omega}{2\beta}得到。

    %% 傅里叶变换eg2
    clc;clear;
    syms t  w
    syms A b positive
    f(t)=A*exp(-b*t^2)
    ft=fourier(f(t),w)
    

    运行结果:

    ft =
    (A*pi^(1/2)*exp(-w^2/(4*b)))/b^(1/2)
    

    傅里叶变换的物理意义

    函数f(t)f(t)的傅里叶变换F(ω)F(\omega)称为f(t)f(t)频谱函数(在物理学中,ω\omega是圆频率,所以F(ω)F(\omega)是圆频率的函数)。
    而频谱函数的模F(ω)|F(\omega)|称为振幅频谱

    振幅频谱是偶函数。
    在这里插入图片描述
    F(ω)F(\omega)是一个复函数,其辐角称为f(t)f(t)相角频谱
    在这里插入图片描述

    广义傅里叶变换

    单位脉动函数

    单位脉冲函数起源于物理学中的脉冲现象,如断电后的突然来电,总电量是一定的,但是时间非常短,这意味着电流随时间变化的函数q(t)q(t)与t轴围成的面积是一定的,但是时间极短。当围成的面积是一个单位时就是单位脉冲函数。
    在这里插入图片描述

    单位脉冲函数

    Dirac(狄拉克)第一次引入了单位脉冲函数描述上述积分为定值,但是时间极短的变化过程。

    单位脉冲函数的定义

    在这里插入图片描述
    注意,单位脉冲函数没有具体的显性表达式,凡是满足上述积分性质的函数都可认为时单位脉冲函数

    单位脉冲函数的性质

    单位脉冲函数的积分为1.

    在这里插入图片描述
    在单位脉冲函数的定义中取无穷次可微函数f(t)=1f(t)=1可得到上述结果。

    筛选性质

    在这里插入图片描述
    由于单位脉冲函数只在0附近有函数值,其余为0,则求积分的时候,只有0附近的函数值为\infty,则求δ(t)f(t)\delta(t) f(t)的积分过程为:f(0)××1=f(0)f(0) \times \infty \times \frac{1}{\infty}=f(0)

    常见的广义傅里叶变换

    根据傅里叶积分定理,函数f(t)f(t)能够写成傅里叶积分形式的其中一个前提条件是f(t)f(t)绝对可积,而这个条件相当强,许多常见的函数如sinxcosxx\sin x \cos x x等都不满足。将单位脉冲函数应用到傅里叶变换中可以得到上述函数的广义的傅里叶变换。

    单位阶跃函数的广义傅里叶变换

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    使用MATLAB求单位阶跃函数的傅里叶变换,同时验证所给出的频谱函数的傅里叶逆变换就是单位阶跃函数的代码如下:

    clc;clear;
    syms t w
    ft1=fourier(heaviside(t),w)
    ft2=simplify(ifourier(ft1,t))
    

    结果如下:

    ft1 =
     
    pi*dirac(w) - 1i/w
     
     
    ft2 =
     
    sign(t)/2 + 1/2
    

    其中dirac(w)就是单位脉冲函数。在MATLAB命令栏中可以验证,dirac(0)=inf,当x不等于0时dirac(x)=0。

    MATLAB求傅里叶变换的应用

    fourier命令

    fourier命令是matlab中求解傅里叶变换的主要命令,包含以下三种调用格式。其中transVar是傅里叶变换后像函数的自变量,一般使用ω\omega

        fourier(f)
        fourier(f,transVar)
        fourier(f,var,transVar)
    

    ifourier命令

    ifourier命令是matlab中求解傅里叶逆变换的主要命令,调用格式和fourier命令相同。

    参考文献与资料

    1. 三角级数及三角函数系的正交性 - 百度文库
    2. 第八章 傅里叶变换 - 百度文库本文主要参考的傅里叶变换的内容,较为详细
    3. 实验三 MATLAB求Fourier变换及逆变换 - 百度文库该教程详细介绍了使用matlab命令求解傅里叶变换的过程
    4. Matlab实现Fourier级数的简单教程 该教程主要是使用MATLAB利用傅里叶级数的公式实现求解傅里叶系数。
    展开全文
  • 计算函数的级数展开的傅立叶系数,以及幅度谱和相位谱。 该脚本包含一些理论和 3 种不同的计算系数的方法。 用法Fourier_coeff(fun,t0,T) Fourier_coeff(fun,t0,T,M) Fourier_coeff(fun,t0,T,M,N) Fourier_coeff...
  • matlab傅里叶变换

    千次阅读 2019-10-18 14:18:29
    更多MATLAB图像处理视频请点击  http://study.163.com/course/courseMain.htm?courseId=1003594013    图像变换:     更多MATLAB图像处理视频请点击  ...

    更多MATLAB图像处理视频请点击  http://study.163.com/course/courseMain.htm?courseId=1003594013   

    图像变换:    

    更多MATLAB图像处理视频请点击  http://study.163.com/course/courseMain.htm?courseId=1003594013

         在 MATLAB 中,一般用二元函数 f(x, y) 作为图像的数学表示。  f( x, y) 表示在特定点f( x, y) 处的函数值,表示图像在该点相应的颜色强度或者灰度。所谓图像变换就是指把图像转换为另一种数学表示方式的操作。

            在图像处理技术中,图像的正交变换技术有着广泛的应用,是图像处理的重要工具。通过变换图像,改变图像的表示域及表示数据,可以给后继工作带来极大的方便。例如,傅立叶变换可使处理分析在频域中进行,使运算简单;而离散余弦变换(DCT)可使能量集中在少数数据上,从而实现数据压缩,便于图像传输和存储。

             1.傅立叶变换的基本概念

           假设  f (m,n) 是一个包含两个离散空间变量 m 和 n 的函数,则该函数的二维傅立叶变换的定义如下:

                                                                

           式中, ω 1 和 ω 2 为频域变量,其单位为弧度/采样单元。通常函数 F( ω 1 ,  ω 2 )称为函数 f (m, n)的频域表示。F( ω 1 ,  ω 2 )是复变函数,其变量 ω 1 和 ω 2 的周期均为 2π。因为这种周期性的存在,所以通常在图像显示时,这两个变量的取值范围为-pi<=ω 1,ω 2<=pi.

       傅立叶反变换定义如下:

                

            简单地说,该方程说明 f (m, n)可以表示为无限多项不同频率的复指函数之和。而不同的频率点( ω 1 ,  ω 2 )所做的贡献由幅度 F( ω 1 ,  ω 2 )决定。

       

          例如,考察下面的矩形函数 f (m, n)。该函数在一个矩形的区域中的函数值为 1,其他区域都为 0,如图 所示。
          在 MATLAB 中,变量 m、n 和函数 f (m, n)均采用离散表示,所以要想真实地逼近连续函数,只能通过提高取样率。因此,f (m, n)函数的傅立叶变换可由以下程序段获得,傅立叶变换的幅值即|F( ω 1 ,  ω 2 )|,如图 (b)所示。其中 x 轴和 y 轴分别为水平分量和垂直分量

    例:  

    N=100;
    f=zeros(50,50);
    f(15:35,23:28)=1;
    figure(1);
    imshow(f,'InitialMagnification','fit');title('矩形连续函数')
    %图片自动适应窗口大小输出

    F=fft2(f,N,N);
    % F = fft2(f,N,N)是由用户设定变换区域的大小NxN。当然,如果用户设定的区域大小不是 2 的整数次方,FFT 还会有默认的补零操作

    F2=fftshift(abs(F));
    %fftshift的作用正是让正半轴部分和负半轴部分的图像分别关于各自的中心对称。
    %因为直接用fft得出的数据与频率不是对应的,fftshift可以纠正过来

    figure(2);
    x=1:N;y=1:N;
    mesh(x,y,F2(x,y)),title('傅立叶变换幅值');%三维网格图
    colormap(gray);%输出灰色系曲面图
    colorbar;%添加颜色条





    2.离散傅立叶变换

          在用计算机处理傅立叶变换通常采用离散傅立叶变换(Discrete Fourier Transform,DFT)。采用离散傅立叶变换主要有以下两个原因:

        (1)因为 DFT 的输入/输出均为离散值,非常适用于计算机的运算操作。
       (2)采用离散傅立叶变换,就可以用一种快速算法,即快速傅立叶变换(Fast FourierTransform,FFT)。
         FFT 的设计思想是将原函数分为奇数项和偶数项,通过不断将一个奇数项和一个偶数项相加(减),得到需要的结果。

       也就是说 FFT 是将复杂的乘法运算变成两个数相加(减)的简单运算的重复,即通过计算两个单点的 DFT,来计算两个双点的 DFT;通过计算两个双点的 DFT,来计算四个  点的DFT⋯⋯依此类推。

        对于任何 N=2 m 的 DFT 的计算,通过计算两个 N/2 点的 DFT,来计算 N 个点的 DFT。
        数学定义:

       

          在 MATLAB 中,可分别用函数 fft、fft2 和 fftn 来计算一维、二维和 n 维的 FFT,而其反变换依次为 ifft、ifft2 和 ifftn。

    例:

     f = zeros(30,30);
    f(5:24,13:17) = 1;
    imshow(f,'InitialMagnification','fit');title('矩形连续函数');
    %图片自动适应窗口大小输出
    F = fft2(f);
    F2 = log(abs(F));%输出幅度值的另一种方法
    figure
    imshow(F2,[-1 5],'InitialMagnification','fit'); colormap(jet); colorbar;title('傅里叶变换幅值');
    %matlab colormap(jet)中数值大为红色,数值小为蓝色

        在计算离散傅立叶变换时,可以通过下面的语句对被变换函数(或图像区域)进行补零操作来提高分辨率,具体调用方式如下:
        F = fft2(f,M,N);M×N 表示进行补零操作后被变换区域的大小,与原区域不相重叠的区域补零。


    3.利用傅立叶变换进行图像特征识别

    (1)快速卷积

             傅立叶变换的另一个重要特性是能够实现快速卷积。由线性系统理论可知,两个函数的卷积的傅立叶变换等于两个函数的傅立叶变换的乘积。该特性与快速傅立叶变换一
    起,可以快速计算函数的卷积

    fft(f1*f2)=fft(f1)x fft(f2)

    f1*f2=ifft(fft(f1)xfft(f2));

    (2)图像特征识别

         傅立叶变换可以用于与卷积密切相关的相关运算(correlation)。在数字图像处理中的相关运算通常用于匹配模板,可以用于对某些模板对应的特征进行定位。例如,假如我们希望在图像 text.tif 中定位字母“a”,如图所示,可以采用下面的方法定位。

        将包含字母“a”的图像与图像 text.png 进行相关运算,也就是对字母“a”的图像和图像 text.png 进行傅立叶变换,然后利用快速卷积的方法,计算字母“a”和图像 text.png 的卷积,提取卷积运算的峰值,即得到在图像 text.png 中对应字母“a”的定位结果。

    例:

    bw=imread('text.png');
    >> a=bw(32:45,88:98);
    >> figure,imshow(bw),title('原图,在这幅图中找出字母a的位置');
    >> figure,imshow(a),title('字母a');
    >>
    >> C = real(ifft2(fft2(bw) .* fft2(rot90(a,2),256,256)));
    figure, imshow(C,[]),title('C');
    >> max(C(:))

    ans =

       68.0000

    >> thresh=60;
    >> figure,imshow(C>thresh);
    >> %卷积运算的值大于60的输出为白色,小于的为黑色,卷积值反映了相似程度,越大表示越相近,当大于阈值的时候就任务是字母'a'了,


    更多MATLAB图像处理视频请点击  http://study.163.com/course/courseMain.htm?courseId=1003594013

    展开全文
  • matlab快速傅里叶变换进行数字图像处理,读入一幅灰度图像并实现图像的快速傅立叶变换,变换后的系数分布。
  • matlab通过傅里叶级数生成周期三角波引入原理matlab代码运行结果 引入 我们知道,任何周期函数都可以用正弦函数和余弦函数构成的无穷级数来表示。...我们使用周期函数求傅里叶级数的公式: ak=1T∫0Tf(t)e−jkω

    引入

    我们知道,任何周期函数都可以用正弦函数和余弦函数构成的无穷级数来表示。那么周期三角波如何通过matlab这一工具使用傅里叶级数相加的方法来表示呢?
    我所选择生成的三角波的函数表达式为:

    f(t) = t - [t] , [t]为不大于t的最大整数

    它的函数图像为:在这里插入图片描述

    原理

    1. 复数表示

    根据三角波的函数表达式:

    f(t) = t - [t] , [t]为不大于t的最大整数

    我们使用周期函数求傅里叶级数的公式:
    ak=1T0Tf(t)ejkω0tdt a_k=\frac1T\int_0^Tf\left(t\right)e^{-jk\omega_0t}\operatorname dt
    此时我们可以使用傅里叶级数来表示三角波函数:
    f(t)^=k=NNakejkw0t \widehat{f(t)}={\textstyle\sum_{k=-N}^N}a_ke^{jkw_0t}
    其中N在数学公式中理应为正无穷+∞,但是在代码实现过程中为一个我们可以调整的有限变量值,它表示傅里叶级数相加的位数。它越大,三角波函数的生成情况越好。我们也可以通过从小到大调整这一变量值,来观察三角波函数生产情况的由坏变好。

    2. 三角函数

    我们知道,一个周期为2L的周期函数f(t)可以表示为:
    f(t)=a02+n=1ancos(nπLt)+n=1+bnsin(nπLt) f(t)=\frac{a_0}2+{\textstyle\sum_{n=1}^\infty}a_n\cos(\frac{n\pi}Lt)+{\textstyle\sum_{n=1}^{+\infty}}b_n\sin(\frac{n\pi}Lt)
    其中:
    an=1LLLf(t)cosnπLtdt a_n=\frac1L\int_{-L}^Lf(t)\cos\frac{n\pi}Lt\operatorname dt
    bn=1LLLf(t)sinnπLtdt b_n=\frac1L\int_{-L}^Lf(t)\sin\frac{n\pi}Lt\operatorname dt
    处理上述系数的方式有两种:(1)通过matlab计算,这种方法可以避免我们自己人工运算积分式子,但是会大大增加程序的计算量,增加程序运行时间;(2)通过人工计算出积分式子,得到系数的表达式,省去matlab中积分的运算。

    若采用第二种方法,需将我们这次需要实现的周期三角波函数代入到上述公式,计算出:
    an={201tcos(2nπt)dt=0n01n=0 a_n=\left\{\begin{array}{lc}2\int_0^1t\cos(2n\pi t)dt=0&n\neq0\\1&n=0\end{array}\right.
    bn=201tsin(2nπt)dt=1nπ bn=2\int_0^1t\sin(2n\pi t)dt=-\frac1{n\pi}
    所以三角波函数可以表示为:
    f(t)^=1+n=11nπsin(2nπt) \widehat{f(t)}=1+{\textstyle\sum_{n=1}^\infty}{\textstyle\frac{-1}{n\pi}}\sin(2n\pi t)

    matlab代码

    复数

    复数积分在matlab中的代码还没得到很好的解决

    三角函数

    方法1(不推荐,运行时间很长)

    运行时间很长,当N输入为1000时,matlab运行时间约为20分钟左右。

    clear;
    x = -3:0.01:3;
    N = input('please enter the N')
    y = g(N);  %N为相加的项数
    plot(x,y);
    
     %定义累加函数,其变量N决定相加项数的多少
    function y=g(N) 
    x = -3:0.01:3;
    y = zeros(1,length(x))
    y = a(0)/2+y;
    for k = 1:N
    ai= a(k).*cos(2*k*pi.*x)+b(k).*sin(2*k*pi.*x); 
    y = y + ai;  %各项累加
    end
    end
    
    %定义求an的函数
    function ak = a(k)  
    syms t;
    ak = 2*int(t*cos(2*k*pi*t),t,0,1);
    end
    
    %定义求bn的函数
    function bk = b(k)
    syms t;
    bk = 2*int(t*sin(2*k*pi*t),t,0,1);
    end
    

    方法2

    直接代入an,bn的值,运行速度很快,当n输入为1000时,运行时间也仅为1s以内

    clear
    n = input("please enter the n"); %取无穷级数的前K项叠加来近似f(t)
    t = -2:0.01:2;
    for k = 2:n
        f(k,:)=(-1)/pi/(k-1)*sin(2*pi*(k-1)*t);
    end
    f(1,:) = 1/2;  %加入a0的值
    F = sum(f,1);
    plot(t,F);
    

    运行结果

    因为三角函数的方法一和方法二是等价的,所以上述两个程序运行产生的效果是相同的。随着改变n的大小,结果如下图:
    在这里插入图片描述
    可以很明显地发现:随着相加项数的增加,三角波生成情况越来越好。

    展开全文
  • 一个MATLAB傅里叶级数变换的函数

    千次阅读 2019-08-27 15:15:25
    一个MATLAB傅里叶级数变换的函数 很多朋友在做傅里叶级数变换时,会发自己的matlab中并不带有傅里叶级数变换函数,这就需要我们自己编一个级数变换函数。在大学高数我们学过傅里叶级数的变换原理,就是下面的公式...
  • 基于MATLAB傅里叶级数可视化

    千次阅读 多人点赞 2018-09-05 15:12:17
    去年有幸选到学校MATLAB的选修课,课程作业是利用MATLAB写一个GUI程序,作为电类专业的小学渣,当时正学习《信号与系统》,同时看到前辈们对于傅里叶变换的各种精妙文章,就做了这样一个傅里叶级数可视化的小程序。...
  • 作者:盛夏的猫宁来源:SegmentFault 思否社区傅里叶分析公式法下例 是将振幅为1的5Hz正弦波和振幅为0.5的10Hz正弦波相加之后进行傅里叶分析。clear allN=512;dt=0.02;n=0:N-1;t=n*dt;x=sin(2*pi*5*t)+0.5*sin(2*pi*...
  • 1原理 正交级数的展开是其理论基础 将一个在时域收敛...看它是以一族正交函数为基向量 将函数空间进行正交分解 相应的系数即为坐标从变幻的角度的看 他建立了周期函数与序列之间的对应关系 而从物理意义上看他将信号分
  • 一傅立叶变化的原理 1原理 正交级数的展开是其理论基础将一个在时域...看它是以一族正交函数为基向量将函数空间进行正交分解相应的系数即为 坐标从变幻的角度的看他建立了周期函数与序列之间的对应关系而从物理 意义上
  • 关于使用Matlab进行信号的傅里叶级数分析时的一个坑 傅里叶级数 首先是对于周期信号的傅里叶分析公式,如果大家都想着用matlab来分析信号,一定对公式很熟悉,这里就直接给出公式 xt=∑k=−∞+∞ak×ejw0t x_t = \...
  • 傅里叶(Fourier)展开 傅里叶级数的定义如下: 设函数f(x)f(x)f(x)在区间[0,2π][0,2\pi][0,2π]上绝对可积,令 {an=1π∫02πf(x)cos⁡nx dx(n=0,1,2,⋯ )bn=1π∫02πf(x)sin⁡nx dx(n=1,2,⋯ ) \...
  • matlab傅里叶变换实现图像的低通滤波

    万次阅读 多人点赞 2017-07-19 21:34:18
    可以使用 MATLAB傅里叶变换函数和反变换函数。 原理部分 低通滤波器指去除图像中的高频成分,而低通滤波器指去除图像中的高频成分。考虑的有三种低通滤波器:理想滤波器、布特沃斯滤波器和高斯滤波器。理想低通...
  • 由输出信号频域,进行傅里叶反变换得到时域,应与输入信号相同,但结果并不是如此。感觉错误出现在 phi=N*T.^2/(2*pi*m); h=exp(0.5i*phi*w.^2); y2=y1.*h; x2 =ifftshift(ifft(y2)); 这几行里,大神指导。 ...
  • 博主上次介绍了傅里叶级数,同时也介绍了三种基本函数的编写过程,本能的就想将傅里叶级数用matlab这个强大的工具来实现,但是在库里找了一圈也没有找到实现fourier seires的函数(或许是我没有认真找),但是抱着...
  • Y = Fseriesval(a,b,X) 计算由系数 a 和 b 在向量 X 中的值定义的傅立叶级数。 额外的参数允许重新缩放 X 数据和仅正弦或仅余弦的扩展。 例子: % 生成数据x = linspace(0,2,41)'; y = mod(2*x,1); % 使用 F...
  • matlab勒让德公式原代码
  • 图像的正交变换在数字图像的处理与...1. 傅里叶变换实验原理对一幅图像进行 离散傅里叶变换 (DFT),可以得到图像信号的傅里叶频谱。二维 DFT 的变换及逆变换公式如下:DFT 尽管解决了频域离散化的问题,但运算量太...
  • matlab傅里叶变换矩阵

    千次阅读 2017-03-17 18:57:23
    matlab傅里叶变换矩阵
  • 附件给出的是齿轮动力学振动模型和微分方程其中x为要求的位移响应,Zeta为齿轮副相对阻尼系数,Zeta =0.07,m为等效质量m=3;Fn为法向载荷Fn=100N。k(t)为齿轮副的时变啮合刚度对k(t)我做了关于时间t的傅里叶变换:k...
  • 傅里叶级数展开matlab实现》由会员分享,可在线阅读,更多相关《傅里叶级数展开matlab实现(3页珍藏版)》请在人人文库网上搜索。1、傅里叶级数展开matlab 实现 给个例子说明下:将函数 y=x*(x-pi)*(x-2*pi),在(0,2...
  • 文章目录一、信号的合成和分解(一)傅里叶级数(二)将正弦波合成方波二、信号的相关性及傅里叶系数的计算(一)信号的相关性(二)傅里叶系数(三)相关性的验证及幅值、相位的计算三、信号的分解从信号合成到信号...
  • 从periodogram estimate of the power spectrum计算得到的倒谱系数,可以用于基音追踪(pitch tracking),然而,从AR power spectral estimate计算得到的倒谱系数可以用于语音识别(现在已经被MFCCs所替代)。...
  • 今天在补习MATLAB数字信号处理时,突然碰到稳态响应,一脸懵逼,感觉并不理解什么是稳态响应了,也许之前也没有懂过吧。百度百科对概念进行了解释:稳态响应是指当足够长的时间之后,系统对于固定的输入,有了一个...
  • Matlab求余弦信号的频谱

    千次阅读 2019-10-25 23:37:27
    如果你是电子信息类专业的学生,一定对频谱这个词听过无数次了,当然频谱的方法之一就是可以采取快速傅里叶的方法,今天来给大家介绍一种用Matlab对余弦信号频谱的实际操作。 第一步:构建原始余弦信号 Matlab...

空空如也

空空如也

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

matlab求傅里叶系数

matlab 订阅