精华内容
下载资源
问答
  • 这次不会涉及太多公式,主要是通过实例简单了解下离散傅里叶变换应用。 离散傅立叶变换(DFT)是傅立叶变换的离散形式,因为现实中的数据大多都是离散的,所以我也主要记录离散傅立叶变换。 } 正文: { ...

    前言:

    {

        现在手头有个处理音频的练习,由于之前的在学校学的傅立叶变换只是为了解题,而且基本忘光。这次不会涉及太多公式,主要是通过实例简单了解下离散傅里叶变换的应用。

        离散傅立叶变换DFT)是傅立叶变换的离散形式,因为现实中的数据大多都是离散的,所以我也主要记录离散傅立叶变换。

    }

     

    正文:

    {

        先说应用

        先看下面的代码:

    #代码1
    
    import numpy as np
    
    input = [0, np.sqrt(2)/2, 1, np.sqrt(2)/2, 0, np.sqrt(2)/-2, -1, np.sqrt(2)/-2]
    output = np.fft.rfft(input)
    frequency = np.abs(output)
    print(frequency)

        (上面这段代码中rfft()是实数输入的快速傅立叶变换FFT)的函数,快速傅立叶变换是傅立叶变换的一种快速计算方法,公式我就不在这写了(其实我也不太懂),想看的话可以去看[1]或搜索一下。numpy中也有普通的ttf函数,当输入为实数时,ttf()的返回值貌似只是多了一个原始返回值的复共轭[2]。)

        代码1中的input是一个近似的正弦函数采样序列。代码1的输出frequency是input的频谱,具体如下:

       

        frequency列表中的值我觉得可以理解为一种隶属度。如果把这种隶属度归一化,那么input对频率i的隶属度就等于frequency[i]*2/len(input)。可以看到,frequency中除了frequency[1]之外几乎全为0,并且frequency[i]*2/len(input)=1,即input序列中几乎只包含信号的一个周期(frequency[3]出现了很小的数,估计是运算精度导致的,和下面的output[3]一样,我忽略不计)。

        这是当然的,我们知道input就是正弦波的一个周期的采样,这里我找到了一个更好的例子:  

        点此体验(ftp密码为:Ab123456)

        上面这个网页是一个简易的在线拾音器(支持火狐和谷歌浏览器,其他的不清楚[3]),你可以对着麦克风哼你想到的音调和旋律,屏幕上就会显示频率和最接近的音符。这个是我在阿贝云的免费主机上的副本,不能使用demo音频(第一个按钮无效),可以使用麦克风(第二个按钮)和振荡器(第三个按钮)。源码出自[4](不是我写的),想播放播放demo音频需要进[4]中的demo(科学上网注意)。

        [4]用了Web Audio API,而Web Audio API就用了傅立叶变换来获得实时频率(实时窗口大小默认为2048),具体可参考[5]。

     

        一些理解

        wiki上说:

        In mathematics, the discrete Fourier transform (DFT) converts a finite sequence of equally-spaced samples of a function into a same-length sequence of equally-spaced samples of the discrete-time Fourier transform(DTFT), which is a complex-valued function of frequency. [6]

        大意:

        在数学(的定义)中,离散傅立叶变换(DFT)将一个函数的等间隔样本的有穷序列转换为一个离散时间傅立叶变换(形式的)相同长度等间距序列,这种离散时间傅立叶变换就是一个频率的复数函数。

        简单来说,离散傅立叶变换的输入是一串数值序列(例如音频),输出是这串数值序列的频率序列。

        值得一提的是,代码1中的output其实是复频率,如下:

       

        复频率的形式是cos-sin*j(注意这里的cos和sin只是对正弦余弦的隶属度),例如output[1]=-4j代表input对f(x)=sin(2*pi*x/len(input))的隶属度为4(归一化后正好为1),output[2]=-0j代表input对f(x)=sin(2*2*pi*x/len(input))的隶属度为0。

        如果把output列表中的两种隶属度比作二维向量,那最终frequency就是这些向量的模(abs)。至于为什么选择复频率(既有正弦又有余弦),我认为是因为一般情况下信号不会只是没偏差的正弦或余弦函数,例如下面的代码:

    #代码2
    
    import numpy as np
    
    input = [np.sqrt(2)/2, 1, np.sqrt(2)/2, 0, np.sqrt(2)/-2, -1, np.sqrt(2)/-2, 0]
    output = np.fft.rfft(input)
    frequency = np.abs(output)
    print(frequency)

        代码2与代码1唯一的区别就是input,代码2的input是sin()+b的形式,无法单独用任何无偏移的sin()或cos()来表示。很明显,频率还是没变的,但代码2的output变为了:

       

    }

     

    结语:

    {

        估计是由于本人水平有限,同时只有理论的话也很枯燥,所以没太多人看。这次我就加点新鲜的东西。

        参考资料:

        {

            [1] https://blog.csdn.net/enjoy_pascal/article/details/81478582

            [2] https://stackoverflow.com/questions/52387673/what-is-the-difference-between-numpy-fft-fft-and-numpy-fft-rfft

            [3] https://developer.mozilla.org/en-US/docs/Web/API/Navigator/getUserMedia

            [4] https://github.com/cwilso/PitchDetect

            [5] https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API/Visualizations_with_Web_Audio_API

            [6] https://en.wikipedia.org/wiki/Discrete_Fourier_transform

        }

    }

    展开全文
  • 傅里叶变换及其应用(一)

    千次阅读 2019-10-16 09:08:07
    文章目录前言傅里叶变换的物理意义附:Matlab代码 前言 记得大学刚开始学...我是从事光电相关行业的,因此接触到大量的傅里叶变换在相关方向上的应用,感叹其带来的便捷。这几篇博文就是想回顾一下傅里叶变换的...

    前言

    记得大学刚开始学傅里叶变换的时候,只觉得这货怎么这么反人类,简简单单地一个函数被它这么一折腾就变得极其繁琐且不知所云。然而,毕业后随着读研究生到后来参加工作逐渐接触到越来越多的实际问题,不禁发出一句感叹,“真香!”。我是从事光电相关行业的,因此接触到大量的傅里叶变换在相关方向上的应用,感叹其带来的便捷。这几篇博文就是想回顾一下傅里叶变换的物理意义,总结一下它的应用。

    傅里叶变换的物理意义

    先来看一下傅里叶变换的定义:
      对于任意一个函数 f ( x ) f(x) f(x),它的傅里叶变换定义为:
         F ( f x ) = ∫ − ∞ + ∞ f ( x ) e − i 2 π f x d x F(f_x)=\int_{-\infin}^{+\infin}{f(x)e^{-i2\pi f_x}dx} F(fx)=+f(x)ei2πfxdx
    这个公式看起来就很复杂,我们先不管它,直接来看看这个变换干了什么事。我们使用Matlab作为仿真的工具,计算函数 f ( x ) = x 2 f(x)=x^2 f(x)=x2的傅里叶变换,如下所示:
    在这里插入图片描述
    好好地一条抛物线变成了一个尖峰,好像也看不出什么意义。
      接下来,我们用一个具有周期性的函数做变换来看一下它的意义。我们定义函数 f ( t ) = s i n ( 2 π T t ) f(t)=sin(\frac{2\pi}{T}t) f(t)=sin(T2πt),其中 T = 1 5 T=\frac{1}{5} T=51是函数的变化周期,然后再来看它的傅里叶变换:
    在这里插入图片描述
    这回好像有点意思了,这个周期函数的傅里叶变换结果是两个尖峰。我们看曲线的右半部分也就是频率大于0的区域,这个区域上有一个尖峰,尖峰的位置正好等于 1 T \frac{1}{T} T1,也就是函数 f ( t ) f(t) f(t)的变化频率。
      接下来,我们再来看另一个有多个变化周期的函数:
         f ( t ) = 3 ∗ s i n ( 2 π T 1 t ) + 1 ∗ s i n ( 2 π T 2 t ) + 4 ∗ s i n ( 2 π T 3 t ) f(t)=3*sin(\frac{2\pi}{T_1}t)+1*sin(\frac{2\pi}{T_2}t)+4*sin(\frac{2\pi}{T_3}t) f(t)=3sin(T12πt)+1sin(T22πt)+4sin(T32πt)
    这个函数里包含了3个变化周期,分别令 T 1 = 1 5 , T 2 = 1 8 , T 3 = 1 10 T_1=\frac{1}{5},T_2=\frac{1}{8},T_3=\frac{1}{10} T1=51,T2=81,T3=101,并且这三个周期的变化强度之比为 3 : 1 : 4 3:1:4 3:1:4,这个时候,我们再来看傅里叶变换的结果:
    在这里插入图片描述
    这个时候我们发现,傅里叶变换后的函数好像比原来的函数简洁了很多。原来的函数由于各种频率混杂,变化规律变得很复杂,但是经过傅里叶变换后就只有三个尖峰了(当然,我们仍然只看曲线的右半部分)。再仔细看的话,我们发现这三个尖峰的位置正好等于原函数里包含的三个周期函数的频率,而峰的高度之比也正好等于三个周期函数的强度之比。
      到这里,傅里叶变换的物理意义就很明显了,它的作用就是提取出原函数中的震荡频率和强度。如果原来函数中有很多中震荡频率,傅里叶变换以后得到的就是原函数的震荡频率谱。
      换而言之,任何一个函数,都有一个对应的震荡频谱,如果它是一条直线,那么它只包含一个频率为0的震荡分量;如果它是一个频率固定的正弦曲线,那么它只包含一个该频率下的震荡分量;如果它是一个任意变化的曲线,它就包含多个震荡分量,例如我们一开始用的抛物曲线。也就是说,任意一条函数曲线,我们都可以把它看成是由很多个不同强度、不同频率和相位的正弦曲线叠加而成。而这些正弦曲线的频率和强度分布就是我们看到的傅里叶变换曲线。
      如果回到最初的傅里叶变换的定义,我们会发现,原函数经过傅里叶变换以后应该是一个复函数。这个复函数既包含了所有频率分量的强度信息,也包含了它们的相位信息,而大多数情况下,我们只关心这些频率分量的强度信息,因此,通常对这个复函数取绝对值,也就是我们上面画的曲线了。
      明白了傅里叶变换的数学意义后,我们还有一个疑问,就是为什么我们这么关心一个函数的频率谱呢?在实际应用中,一个函数可以看成是某个系统的输出信号和输入信号之间的映射,这个系统可能是一块电路板、一块镜片或者一块物质等等。而自然界中很多情况下,这个系统是线性的,也就是它不改变输入信号的频率只改变不同频率的强度,例如,地震时,震源处的振动频率传播到地表后仍然是这个频率,只是有的频率衰减得快,有的频率衰减的慢而已。而对不同频率的衰减程度就是这个系统的本征属性,也就是它的傅里叶变换谱了。所以,从某种程度上说,傅里叶变换其实更能反映出一个函数或者说一个系统的本质。下一节,我们结合一些实际的系统来聊聊傅里叶变换的应用。

    附:Matlab代码

    下面附上以上示例中用到的Matlab代码:

    clc;clear all;close all;
    
    tm=10;%时间长度
    N=2^10;%采样点数
    dt=tm/N;%最小时间间隔
    t=(-N/2:N/2-1)*dt;%时间序列
    freq1=5;%三个频率分量
    freq2=8;
    freq3=10;
    f=3*sin(2*pi*freq1*t)+1*sin(2*pi*freq2*t)+4*sin(2*pi*freq3*t);%原函数
    
    Ft=ft(f,dt);%傅里叶变换
    df=(-N/2:N/2-1)/tm;%频率序列
    
    figure,
    subplot(211),
    plot(t,f,'linewidth',1.5,'color','red');
    xlabel('t (s)');
    ylabel('f');
    subplot(212),
    plot(df,abs(Ft),'linewidth',1.5,'color','blue');
    set(gca,'xLim',[-50,50]');
    xlabel('f (Hz)');
    ylabel('F(f)');
    
    
    function G=ft(g,delta)
    G=fftshift(fft(fftshift(g)))*delta;
    
    展开全文
  • 本书是电子工程领域内的一本颇受读者欢迎的教材及专业参考书,介绍了傅理叶变换的方法及其在电气系统中的应用、包括电路、天线、信号处理器等领域,另外,还有在连接信号、脉冲序列和离散信号连接方面的应用。...
  • 傅里叶变换应用

    万次阅读 2018-09-25 18:27:03
    傅立叶变换是一种线性的积分变换,常在将信号在时域(或空域)和频域之间变换时使用,在物理学和工程学中有许多应用。 根据查询资料的显示,个人感觉傅里叶变换应用之一是要转到频域上去去燥,去除污染以及找到...
        傅立叶变换是一种线性的积分变换,常在将信号在时域(或空域)和频域之间变换时使用,在物理学和工程学中有许多应用。
        根据查询资料的显示,个人感觉傅里叶正变换应用之一是要转到频域上去去燥,去除污染以及找到在时域上不明显而在频域上明显的信息;傅里叶反变换是要复原图像。
        参考:https://www.zhihu.com/question/20460630
    

    1.先对傅里叶变换去燥以及复原图像进行说明:
    以下图为例
    图片来自https://www.zhihu.com/question/20460630
    进行傅里叶变换之后,在频域上表示为信息出现的频率,其中上图右图中均布的亮点(中心除外)为上图左图中照片上的规律的纹路。
    再说明傅里叶反变换:
    我们将上图右图中均布的亮点(中心除外)去除后,反变换还原图像,得到下图:
    图片来自https://www.zhihu.com/question/20460630
    可以看到照片上的纹路去除了,图片也相应地没有那么清晰了。
    一般情况下,傅里叶变换较易去除的是有规律的噪声污染等。

    2.再对利用傅里叶变换提取时域(或空域)上不明显而频域上明显的信息进行说明。
    以halcon中的示例defect_indent_fft.hdev来说明。
    带缺陷图片
    此案例其中一幅图如上图所示,能够看到在图中间有一处缺陷,这处缺陷不太明显,而且在这幅图中不易提取。下面尝试在频域中进行提取。
    利用的算子为convol_fft(ImageFFT, ImageFilter : ImageConvol : : ),此算子需要利用滤波器将相应的傅里叶图像转到频域上去,也就是说这里我们将图像转为傅里叶图像以及生成一个滤波器。
    (1)先完成第一步,生成一个滤波器:
    这里利用的是比较两个高斯滤波器来生成滤波器,具体步骤如下:
    Sigma1 := 10.0
    Sigma2 := 3.0
    gen_gauss_filter (GaussFilter1, Sigma1, Sigma1, 0.0, ‘none’, ‘rft’, Width, Height)
    gen_gauss_filter (GaussFilter2, Sigma2, Sigma2, 0.0, ‘none’, ‘rft’, Width, Height)
    sub_image (GaussFilter1, GaussFilter2, Filter, 1, 0)
    (2)再将图像转为傅里叶图像
    rgb1_to_gray (Image, Image)
    rft_generic (Image, ImageFFT, ‘to_freq’, ‘none’, ‘complex’, Width)
    原图转为傅里叶图像
    (3)转到频域上去
    convol_fft (ImageFFT, Filter, ImageConvol)
    rft_generic (ImageConvol, ImageFiltered, ‘from_freq’, ‘n’, ‘real’, Width)
    转到频域上
    以傅里叶图片显示
    (4)过滤背景,提取缺陷
    现在可以看到这个图中的缺陷已经明显了些,但是存在的背景干扰。过滤图像利用算子

    gray_range_rect(Image : ImageResult : MaskHeight, MaskWidth : )
    利用灰度范围过滤
    这个时候已经很明显了,再进行阈值提取就可以得到相应的缺陷位置了

    min_max_gray (ImageResult, ImageResult, 0, Min, Max, Range)
    threshold (ImageResult, RegionDynThresh, max([5.55,Max * 0.8]), 255)
    阈值分割

    总结:本次主要讲解了傅里叶变换的一些应用,一是去除有规律的噪点污染,二是转到频域上提取缺陷。主要的算子有gen_gauss_filter、rft_generic、convol_fft、gray_range_rect、min_max_gray,其中前三个用于转到频域上,后两个用于图像预处理。

    展开全文
  • 傅里叶变换的科学应用

    万次阅读 多人点赞 2017-04-04 20:04:53
    前言最近一周一直在处理与傅里叶变换有关的事情,花了不少时间,稍微有些收获,以博文的形式记录下来希望能够自己及他人提供少许帮助。简介傅里叶变换可以将一个时间域信号变换到频率域。有些信号在时间域上很难看出...

    前言

    最近一周一直在处理与傅里叶变换有关的事情,花了不少时间,稍微有些收获,以博文的形式记录下来希望能够自己及他人提供少许帮助。

    简介

    傅里叶变换可以将一个时间域信号变换到频率域。有些信号在时间域上很难看出特征,但是当转换到频率域一些特征就会变的明显。

    想必当学习傅里叶变换时大家都已经知道一个例子:无限正弦波叠加就会产生一个标准的矩形波(方波或脉冲波)。如果这很难理解,就努力回忆一下大学本科高数教材中(高等数学,下册,第12章,第7节,同济版)关于傅里叶级数那一节内容。若是看到这个矩形波我们肯定想知道,组成这个矩形的那些正弦波有什么特征呢(频率、振幅、相位等)。那么傅里叶变换就可以帮我解决这个问题。

    这里可能依然觉得无限正弦波叠加产生矩形波的例子有些晦涩难懂,但还有一个例子可以说是恰到好处。你一定还记得棱镜能够将白光分为红、橙、黄、绿、青、蓝、紫的例子吧。这里就可以把白光比作无限正弦波叠加后的结果,棱镜好比傅里叶变换,那么七色光就是傅里叶变换的结果。是不是经过傅里叶变换我们能知道更多的信息呢。


    这里写图片描述

    从书本中我们看到的最多的应该是连续函数的傅里叶变换的公式,但连续函数的傅里叶变化在计算机世界中是难以实现的。离散傅里叶变换才是我们的目标,毕竟我们都是冲着实用傅里叶变换去的,只有离散的才是眼下我们解决问题需要的。

    提示:在学习过程中,有一点要注意,那就是信号的概念,切记不要狭隘的理解信号就是电磁波、声波等。一切具有波动性(非物理学中的波粒二象性)的都可以理解为信号,比如说:某条河流时间序列下的流量、某条测线一定采样间隔的高低起伏。

    FFT变换计算过程

    剩下时间直接进入干货阶段,本文的公式很好理解,也都是实用性公式。
    http://mathworld.wolfram.com/DiscreteFourierTransform.html

    离散傅里叶变换公式:

    Xk=N1n=1xnWnk

    傅里叶逆变换公式:

    xk=1NN1n=1XnWnk

    其中, Wn=e2πin
    欧拉公式:

    {eit=cos(t)+isin(t)eit=cos(t)isin(t)

    实例

    假设有一个序列 x(n)=[1213]n=0,1,2,3
    (1)由欧拉公式, N = 4 得到:

    W=e2π/4=cos(π2)isin(π2)=i

    (2) 正变换结果:
    X(0)X(1)X(2)X(3)=W0W0W0W0W0W1W2W3W0W2W4W6W0W3W5W9x(0)x(1)x(2)x(3)=11111i1i11111i1i1213=52+i52i

    (3)逆变换结果:
    x(0)x(1)x(2)x(3)=14W0W0W0W0W0W1W2W3W0W2W4W6W0W3W5W9X(0)X(1)X(2)X(3)=1411111i11111i1i1i52+i52i=1213
    (4)验证,与Matlab中计算结果对比验证。
    Matlab代码

    clc
    clear all
    x = [1 2 -1 3]
    y = fft(x)
    x = ifft(y)

    Matlab实验结果
    y=[5+0i2+1i5+0i21i]

    自己计算的结果与Matlab计算结果一致。

    傅里叶变换结果意义

    傅里叶变换的一个主要应用是信号分析,分析信号的基本计算包括:将双边功率谱转换为单边功率谱、调整频率精度并绘制频谱、使用 FFT ,以及将功率和振幅转换为对数单位。在继续讲解前,有必要理解几个重要概念:振幅谱、功率谱、双边、单边功率谱、直流分量(DC)、对数单位。

    振幅谱可由下式计算得到:

    Amplitudespectrum=2Magnitude[FFT(A)]Nfori=1toN21

    =Magnitude[FFT(A)]Nfori=0(DC)

    功率:可以通过平方该频率分量的幅度来获得由DFT或FFT表示的每个频率分量中的功率,既功率是振幅的平方。

    功率谱(功率谱密度):信号的功率谱密度 powerspectraldensity(PSD) 是描述信号中的每单位频率对应功率的函数,功率谱密度常用单位为 W/Hz 。功率谱可由下式计算:

    powerspectrumSAA=FFT(A)FFT(A)N2
    其中, FFT(A) 表示 FFT(A) 的共轭复数。

    双边、单边功率谱:傅里叶变换结果是关于直流分量对称的,既频率有正负之分,多数情况下无需再显示负极的频率信息。若使用Matlab做FFT变换,结果需要做fftshift后才是关于DC中心对称的。下文计算的功率谱是单边功率谱。

    对数单位:振幅或功率谱以对数单位分贝 (dB) 的形式显示。该测量单位有助于查看宽动态范围,即可在存在较大信号分量时方便地查看小信号分量。分贝是比例单位,其计算方式如下:

    dB=10log10P/Pr
    其中, P 是测量功率,Pr是参考功率。使用振幅值计算分贝值:

    dB=20log10A/Ar
    其中, A 是测量振幅,Ar是参考振幅。
    使用振幅或功率作为同一信号的振幅平方时,结果分贝水平是完全一致的。将分贝比乘以2,等同于将比例平方。因此,无论使用振幅或功率谱,都将得到相同的分贝水平和显示。

    在双边频谱中,一半的能量显示在正频率,另一半能量显示在负频率。因此,若需将双边频谱转换为单边频谱,只要舍弃数组的第二部分,并将除DC外的每个点乘以2。

    直流分量:direct current component or zero-frequency component,即信号在时间域的均值。(可验证加深理解)。

    原始信号有 N 个采样点,经过傅里叶变换后,得到N个点的傅里叶变换结果,即 N 个复数点,每一个点对应着一个频率点。
    假设采样频率为Fs=1Δ Δ 是采样间距。FFT之后某点 n 结果用复数a+bi表示。经过傅里叶变换,我们是要探求原始信号的一些特征(振幅、相位、功率谱等信息)。

    FFT 结果(除了第一个点)的振幅为其模值的 2N 倍。而第一个点就是直流分量,它的模值就是直流分量的 1N 倍。

    FFT之后某点 n 的模值:An=a2+b2
    频率: Fn=(n1)Fs/N
    振幅: 2An/N n1 ,且 n<=N/2 ,当 n=1 时, 振幅为 A1/N
    相位: Pn=atan2(b,a) atan2 为c/c++中求反正切的函数,其值在[-180,180]。
    功率谱:对原始信号做傅里叶变换后振幅的平方
    功率谱定义:对于给定的信号,功率谱给出了落在给定频率范围内的信号功率(单位时间能量)图。

    提示:功率谱,也叫做功率密度。有时候这两个概念貌似不同(不同领域),实质应该一致。出自《Numerical Recipes》数值方法(经典之作),第13.4节,第二段首句:
    “The power spectrum (also called a power spectral density or PSD) .”

    实例

    定义信号 S=0.3+0.7sin(2pi50t)+sin(2pi120t)
    从信号定义可知:直流分量为0.3(频率为0处),频率为50 Hz 处振幅为0.7,
    频率为120 Hz 处振幅为1。离散数据特征,采样频率 Fs =500,采样周期 T=1/Fs
    样本数 N=1000 ,时间向量: t=(0:N1)T

    Fs = 1000;            % 采样频率                   
    T = 1/Fs;             % 采样周期       
    L = 1500;             % 信号长度
    t = (0:L-1)*T;        % 时间向量
    
    S = 0.3 + 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
    X = S;
    plot(t,X)
    xlabel('t (seconds)')
    ylabel('X(t)')
    title('Signal')
    figure
    plot(t(1:100)*1000,X(1:100));
    xlabel('t (milliseconds)')
    ylabel('X(t)')
    
    Y = fft(X);
    P2 = abs(Y);
    P1 = P2/(L/2);
    P1(1) = P2(1)/L;
    f = Fs*(0:L-1)/L;
    f = f-Fs/2;
    P1 = fftshift(P1);
    
    figure
    plot(f,P1) 
    xlabel('f (Hz)')
    ylabel('|P1(f)|')

    图1为信号,图2为时间0至200 ms 的信号(原信号局部图),图3为经过傅里叶变换后的频谱,从频谱中可以看到,频率为0处( n=1 ,数据索引),直流分量为0.3,频率在50 Hz 处( n=101 )振幅为0.7,频率为 120Hz 处( n=241 )振幅为1。


    这里写图片描述

    这里写图片描述

    这里写图片描述

    频率滤波器——信号光滑处理

    傅立叶滤波器是基于对信号的特定频率的一种滤波函数。它通过采用信号的傅立叶变换,然后衰减或放大特定频率,最后逆变换结果。频率滤波器的过程就是将信号从时间域经傅里叶变换转换到频率域,乘以滤波器函数,再做逆傅里叶变换转换到[空间域]。有三种基础的滤波器:低通滤波器、高通滤波器和带通滤波器。低通滤波器衰减高频,保持低频不变。 空间域中的结果与平滑滤波器的结果相同。另一方面,高通滤波器在空间域中产生边缘增强或边缘检测,因为边缘包含许多高频。带通衰减极低和极高频率,保留了中频范围的频率。
    G(k,l)=F(k,l)H(k,l)
    其中 F(k,l) 输入数据的傅里叶变换, H(k,l) 是滤波器, G(k,l) 是滤波后的数据,要获得空间域的数据还需要对其做逆傅里叶变换。
    理想滤波器的反馈:


    这里写图片描述
    最简单的低通滤波器是理想的低通滤波器,下面滤波器看着是不是很眼熟,这就是方波的表达式。
    H(k,l)=1ifk2+l2<0
    滤波过程可以参考下图,右下角红色部分为滤除的高拼波。傅里叶变换后信号相比原始信号变得平滑。

    这里写图片描述

    [低通滤波实例]

    (http://stackoverflow.com/questions/28814547/matlab-low-pass-filter-using-fft)
    从下图可以看到,低通滤波器在信号边缘会具有明显的失真。

    clc
    clear all
    close all
    
    % make our noisy function
    t = linspace(1,10,1024);
    x = -(t-5).^2  + 2;
    y = awgn(x,0.5); 
    Y = fft(y,1024);
    
    r = 20; % range of frequencies we want to preserve
    
    rectangle = zeros(size(Y));
    rectangle(1:r+1) = 1;               % preserve low +ve frequencies
    y_half = ifft(Y.*rectangle,1024);   % +ve low-pass filtered signal
    rectangle(end-r+1:end) = 1;         % preserve low -ve frequencies
    y_rect = ifft(Y.*rectangle,1024);   % full low-pass filtered signal
    
    % hold on;
    % plot(t,y,'g--'); 
    % plot(t,x,'k','LineWidth',2); 
    % plot(t,y_half,'b','LineWidth',2); 
    % plot(t,y_rect,'r','LineWidth',2);
    % legend('noisy signal','true signal','+ve low-pass','full low-pass','Location','southwest')
    
    gauss = zeros(size(Y));
    sigma = 8;                           % just a guess for a range of ~20
    gauss(1:r+1) = exp(-(1:r+1).^ 2 / (2 * sigma ^ 2));  % +ve frequencies
    gauss(end-r+1:end) = fliplr(gauss(2:r+1));           % -ve frequencies
    y_gauss = ifft(Y.*gauss,1024);
    
    hold on;
    plot(t,x,'k','LineWidth',2); 
    plot(t,y_rect,'r','LineWidth',2); 
    plot(t,y_gauss,'c','LineWidth',2);
    legend('true signal','full low-pass','gaussian','Location','southwest')


    这里写图片描述

    这里写图片描述

    参考:
    http://cn.mathworks.com/help/matlab/ref/fft.html?searchHighlight=fft&s_tid=doc_srchtitle
    http://vtkvc.blog.51cto.com/1533592/314665
    http://blog.csdn.net/linmingan/article/details/51077437
    http://mathworld.wolfram.com/PowerSpectrum.html
    https://www.wavemetrics.com/products/igorpro/dataanalysis/signalprocessing/powerspectra.htm
    http://homepages.inf.ed.ac.uk/rbf/HIPR2/freqfilt.htm
    http://blog.csdn.net/samkieth/article/details/49561539
    http://195.134.76.37/applets/AppletFourAnal/Appl_FourAnal2.html

    展开全文
  • 本书可供通信、视频等信号处理领域的工程技术人员、研究人员参考使用,也适用于相关专业本科高年级学生和研究生,以及教师和自学者。
  • 时频分析:短时傅里叶变换应用

    千次阅读 2018-06-06 14:11:51
    之前讲了时频分析的原理,和matlab里面的相关实现,现在展示一下它的应用。 想要复习原理的同学,可以参照一下这篇:短时傅里叶分析(1) 想要熟悉函数语句的同学: 基础的可以参见前面的:短时傅里叶实现(1) ...
  •  为了减小匹配傅里叶变换分析的计算量,提出了一种基于快速傅里叶变换的快速算法。根据匹配傅里叶变换的分解将积分形式转化为离散...理论及计算机仿真结果表明了该算法的有效性和精确性,有良好的工程应用前景。
  • 为了满足煤矿变电站供电系统实时准确、综合动态补偿谐波的要求,提出了一种基于坐标变换的离散傅里叶变换滑窗迭代电力谐波检测算法。该算法能够有效准确地检测出谐波参考指令电流,提高了系统的实时性、抗干扰性及检测...
  • 图像处理论文,非常专业第29卷第5期运城学院学报JournalofYunchengUniversityVol.29No.52011年10月Oct.2011MATLAB在傅里叶变换中的应用周摘玲①(运城学院物理与电子工程系,山西运城044000)要:针对信号与系统中...
  • 快速傅里叶变换在信号处理中的应用

    万次阅读 多人点赞 2018-09-12 16:41:09
    傅里叶变换FT(Fourier Transform)是一种将信号从时域变换到频域的变换形式。它在声学、信号处理等领域有广泛的应用。计算机处理信号的要求是:在时域和频域都应该是离散的,而且都应该是有限长的。而傅里叶变换仅...
  • 《国际信息工程先进技术译丛·快速傅里叶变换:算法与应用》深入浅出地阐述了快速傅里叶变换(FFT)的原理,系统地总结了各类FFT算法,并广泛精辟地介绍了FFT在视频和音频信号处理中的各种应用。《国际信息工程先进...
  • 傅里叶变换的C++实现及应用实例(代码哦),内含傅里叶变换的C++实现及几十个应用,全部是代码,注释详细(中文注释),含有dsw工程文件(可用VC6.0及后续VC版本打开)。
  • 那绝对是一场噩梦,那是因为傅里叶变换的公式太复杂了,可能是课本给的推导过程过于官方和严谨,让你视乎看不到一丝理解的希望,本篇和下几篇文章将以高中的三角函数讲起,带去理解傅里叶变换应用,并验证所得到的...
  • 1.2 与短时傅里叶变换的比较 1.3 连续小波变换的一些性质 1.4 小波变换的反演及对基本小波的要求 1.5 连续小波变换的计算机实现与快速算法 1.6 几种常用的基本小波 1.7 应用举例 第二章 尺度及位移均离散化的...
  • 1.1傅里叶变换 函数f(t)为一元连续函数,其傅里叶变换定义为: F(w)的傅里叶变换定义为: 其中,i为虚数单位。由欧拉公式: 任意连续函数f(t),都可以用三角函数表示,由于三角函数是周期函数,由此可...
  • 傅里叶变化是频谱分析的数学基础,为了研究汽车在路面激励作用下的振动问题,需要构建出对应的路面不平度函数。 总的来说,傅里叶分析的基本思想就是 所有的函数都可以表示成 sin与cos 的叠加 Fourier ...
  • 简单介绍了短时傅里叶变换和小波变换,并将其应用到EEG信号的频段提取中。
  • 一、一些关键概念的引入1、离散傅里叶变换(DFT)离散傅里叶变换(discrete Fourier transform) 傅里叶分析方法是信号分析的最基本方法,傅里叶变换傅里叶分析的核心,通过它把信号从时间域变换到频率域,进而研究...
  • 提出将相移技术和数学插值方法应用到全光纤激光傅里叶变换光谱仪中,来消除压电陶瓷(PZT)光纤拉伸器的非线性误差,并进行理论模拟仿真,证明了该方法的有效性。由于直接利用简单的开环电路进行扫描,消除了复杂的闭环...
  • 傅里叶变换在物理学、数论、组合数学、信号处理、概率论、统计学、密码学、声学、光学、海洋学、结构动力学等领域都有着广泛的应用(例如在信号处理中,傅里叶变换的典型用途是将信号分解成幅值分量和频率分量)。...
  • 推导出分数傅里叶变换基于柱坐标系下的解析表达式,应用此解析表达式对空心高斯光束进行分析,得到其分数傅里叶变换的解析表达式。讨论其在分数傅里叶变换平面的光强分布与各种光束参数之间的变换关系,并进行数值...
  • 在数学中,傅里叶级数(Fourier series)是把类似波的函数表示成简单正弦波的方式。更正式地说法是,它能将任何周期性函数或周期信号分解成一个(可能由无穷个元素组成的)简单振荡函数的集合,即正弦函数和余弦函数...
  • 傅里叶变换是一种常用的数学工具,在数学、物理及工程技术领域都得到了十分广泛的应用。介绍了一种崭新的信号分析工具--分数阶傅里叶变换,并用经典的傅里叶变换的观点对分数阶傅里叶变换进行了解释。对于分数阶...
  • 2 如何求傅里叶变换 TODO2.1 傅里叶变换的分类2.2 欧拉公式2.3 离散傅里叶变换 DFT3.4 快速傅里叶变换 FFT3 傅里叶变换应用 TODO参考文献 1 不谈数学公式,说明傅里叶变换的前世今生 傅里叶变换需要面对大量数学...
  • 信号与系统 傅里叶变换 傅立叶变换是一种线性的积分变换,常在将信号在时域(或空域)和频域之间变换时使用,在物理学和工程学中有许多应用。因其基本思想首先由法国学者约瑟夫·傅里叶系统地提出,所以以其名字来...
  • 沈阳理工大学数字图像处理报告PAGE 10数字图像的傅里叶变换课程设计目的(1)了解图像变换的意义和手段(2)熟悉傅里叶变换的基本性质(3)热练掌握FFT的方法反应用(4)通过本实验掌握利用MATLAB编程实现数字图像的傅里叶...
  • 速傅立叶变换的原理与算法,并对其具体应用作了介绍,对 推厂‘这种计算方法的应用,将起到积极的推动作用。 邓贤照先生年逾八旬,在困苦的生活条件下,夜以继. 日,为我国科学普及工作,竭尽心力,不能不令人感佩...
  • 快速傅里叶变换

    千次阅读 2018-09-09 09:46:23
    它对傅氏变换的理论并没有新的发现,但是对于在计算机系统或者说数字系统中应用离散傅立叶变换,可以说是进了一大步。这是360百科中对于fft的一种概念解释。我们可以这么理解:FFT(Fast Fourier Transformation)...

空空如也

空空如也

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

傅里叶变换工程应用