精华内容
下载资源
问答
  • 傅里叶变换如何计算
    千次阅读
    2022-03-08 19:12:23





    一、求 e j ω 0 n e^{j \omega_0 n} ejω0n 傅里叶变换



    e j ω 0 n e^{j \omega_0 n} ejω0n 的傅里叶变换 S F T [ e j ω 0 n ] SFT[e^{j \omega_0 n}] SFT[ejω0n] ?



    1、傅里叶变换与反变换公式介绍


    傅里叶变换 : 时域 " 离散非周期 " 信号 , 其频域就是 " 连续周期 " 的 , 其频域 可以 展开成一个 " 正交函数的无穷级数加权和 " , 如下公式

    X ( e j ω ) = ∑ n = − ∞ + ∞ x ( n ) e − j ω n X(e^{j\omega}) = \sum_{n=-\infty}^{+\infty} x(n) e^{-j \omega n} X(ejω)=n=+x(n)ejωn


    傅里叶反变换 : 利用 " 正交函数 " 可以推导出 " 傅里叶反变换 " , 即 根据 傅里叶变换 推导 序列 ;

    x ( n ) = 1 2 π ∫ − π π X ( e j ω ) e j ω k d ω x(n) = \cfrac{1}{2\pi} \int_{-\pi} ^\pi X( e^{j \omega } )e^{j \omega k} d \omega x(n)=2π1ππX(ejω)ejωkdω


    2、带入 傅里叶变换 公式


    e j ω 0 n e^{j \omega_0 n} ejω0n

    序列函数 , 带入到 傅里叶变换 公式

    X ( e j ω ) = ∑ n = − ∞ + ∞ x ( n ) e − j ω n X(e^{j\omega}) = \sum_{n=-\infty}^{+\infty} x(n) e^{-j \omega n} X(ejω)=n=+x(n)ejωn

    中 ;


    可以得到 :

    S F T [ e j ω 0 n ] = ∑ n = − ∞ + ∞ e j ω 0 n e − j ω n SFT[e^{j \omega_0 n}] = \sum_{n=-\infty}^{+\infty} e^{j \omega_0 n} e^{-j \omega n} SFT[ejω0n]=n=+ejω0nejωn

    根据指数运算法则 , 可以得到如下式子 :

    S F T [ e j ω 0 n ] = ∑ n = − ∞ + ∞ e − j ( ω − ω 0 )      ① SFT[e^{j \omega_0 n}] = \sum_{n=-\infty}^{+\infty} e^{ -j ( \omega - \omega_0 ) } \ \ \ \ ① SFT[ejω0n]=n=+ej(ωω0)    

    在上一篇博客 【数字信号处理】序列傅里叶变换 ( 基本序列的傅里叶变换 | 求 1 的傅里叶变换 ) 中 , 求 1 1 1 的傅里叶变换得到如下公式 :

    X ( e j ω ) = ∑ n = − ∞ + ∞ e − j ω n = 2 π δ ~ ( ω )      ② X(e^{j\omega}) = \sum_{n=-\infty}^{+\infty} e^{-j \omega n} = 2 \pi \widetilde{\delta} ( \omega ) \ \ \ \ ② X(ejω)=n=+ejωn=2πδ (ω)    

    将 ② 带入到 ① 中 ,

    S F T [ e j ω 0 n ] = ∑ n = − ∞ + ∞ e − j ( ω − ω 0 ) = 2 π δ ~ ( ω − ω 0 ) SFT[e^{j \omega_0 n}] = \sum_{n=-\infty}^{+\infty} e^{ -j ( \omega - \omega_0 ) } =2 \pi \widetilde{\delta} ( \omega - \omega_0 ) SFT[ejω0n]=n=+ej(ωω0)=2πδ (ωω0)



    其中 δ ~ ( ω ) \widetilde{\delta} ( \omega ) δ (ω) 序列如下 , 这是以 2 π 2\pi 2π 为周期的单位脉冲序列 , 在 2 π 2\pi 2π 整数倍的位置上值为 1 1 1 ;

    在这里插入图片描述
    δ ~ ( ω ) \widetilde{\delta} ( \omega ) δ (ω) 可以写成如下式子 :

    δ ~ ( ω ) = ∑ m = − ∞ ∞ δ ( ω − 2 π m ) \widetilde{\delta} ( \omega ) = \sum_{m = -\infty}^{\infty} \delta( \omega - 2\pi m ) δ (ω)=m=δ(ω2πm)

    m m m 取值 ( − ∞ , + ∞ ) (-\infty , +\infty) (,+) ;

    更多相关内容
  • 用MATLAB制作二元傅里叶变换计算全息图.pdf
  • 提出了双重分数傅里叶变换计算全息。在这种方法中,将两个图像的信息分别经不同阶的分数傅里叶变换后,记录在同一张分数傅里叶变换计算全息图上。它需要两个特定的分数傅里叶变换系统才能再现出所记录的图像信息,利用...
  • 提出了分数傅里叶变换计算全息图(FRTCGH).采用分数傅里叶变换的快速算法和罗曼Ⅲ型迂回位相编码方法设计并制作了一个物体不同分数阶的分数傅里叶变换计算全息图,用罗曼Ⅰ型分数傅里叶变换光学系统再现原物体,得到了...
  • 512点的fft变换, 440.pcm是16位单声道的pcm数据,采样率是44100hz,声音是一个低频正弦波 main函数读入512个short形采样点(方括号),然后进行快速fft变换变换后的结果是各个频率下面的幅值,可以用于显示柱状...
  • MATLAB中二元傅里叶变换计算全息图的算法.pdf.pdf
  • 从取样定理出发,对角谱衍射公式及逆运算的快速傅里叶变换(FFT)进行了研究。基于研究结果,讨论数字全息研究中物光通过一个光学系统到达CCD探测器的波面重建问题,提出物光场的逆运算追迹重建及像空间波面重建两种方法...
  • C语言快速红丝线傅里叶变换的方法,仅供参考
  • 以下内容参考《复变函数与积分变换》,如果对积分变换有所了解,完全可以跳过忽略 复数的三角表达式如下 Z=r(cosθ+isinθ) Z=r(cos\theta+isin\theta) Z=r(cosθ+isinθ) 欧拉公式如下 eiθ=cosθ+isinθ e^{i\...
  • 计算傅里叶变换 傅里叶变换 鉴于这种想法,任何信号,当然任何周期性信号,都可以由一系列正弦曲线组成,我们将开始从级数(Series)的概念转向连续信号的概念。我们将要讨论一些东西,这些东西可以让我们知道图像...

    目录

    傅里叶变换

    计算傅里叶变换


    傅里叶变换

    鉴于这种想法,任何信号,当然任何周期性信号,都可以由一系列正弦曲线组成,我们将开始从级数(Series)的概念转向连续信号的概念。我们将要讨论一些东西,这些东西可以让我们知道图像中任意给定频率的功率有多大。也就是说,我们想把图像从某样东西上变换过来,该东西是时间的函数,或者仅仅是空间的函数,从而知道它的频率是多少。这种变换被称为什么?它叫做傅里叶变换(Fourier Transform)

    现在我们做了傅里叶级数(Fourier series),然后我们进入傅里叶变换(Fourier Transform),再然后我们将进行离散傅里叶变换(Discrete Fourier Transform, DFT),这将使我们得到那个图像的东西。

    所以我们想了解频率,频率通常被写成\omega(Omega),我们的信号。我们想要参数化,我们想要变换信号,而不是x,在空间中是通过\omega(Omega)。我们通过所谓的傅里叶变换(Fourier Transform)来实现这一点,傅里叶变换会拿一些空间信号,

    并且它将为我们提供一些特性,这些特性可以给每个给定\omega(Omega)的相位\varphi 和 幅度A进行编码。

    好的,所以我们需要给定每个 \omega (Omega)的相位\varphi 和 幅度A。特别是每个\omega (Omega)从0到无穷大,实际上它是 从负无穷大到无穷大(-\infty+\infty)。这个想法是f(\omega)保存了正弦曲线相应的幅度A 和 相位\varphi。因此,这个f 必须拥有幅度A 和 相位\varphi

    f 如何保留振幅和相位?复数的把戏(Complex number trick!)。注意,我没有说过一个单独的数字。因为请记住,f(x)只是F的值,所以它是一个数字,f(\omega)将是幅度和相位,我们该怎么做?非常好,实际上,大写字母F实际上是一个复数。现在,希望您能记住关于复数的一些知识。如果没有,我会给你一个非常简短的回顾。所以基本上, f(\omega)由两部分组成:一个实部(Real Part),另一个是虚部(Imaginary Part)

    所以请记住:A+Bi ,在这种情况下,  f(\omega)的实部加上虚部,也许你还记得复数的大小就是两个元素之和的平方根。通常是\sqrt{A^2+B^2},这里是 \sqrt{R^2+I^2}

    R代表实部,I是虚部,相位之间的关系将以这种方式编写,相位\varphi是 虚部 比 实部 的反正切。

    这里遗漏的点是:实部归因于 偶函数(Even),虚部归因于 奇函数(Odd),

    所有这意味着:如果我在这里有一个函数,是我的cosign函数,这是关于原点对称的。

    正弦曲线,我要把它们拧紧,因为它必须到这里,

    然后在那里,

    再然后,所以它必须是0(zero),在这里,这是我的正弦曲线,因为当那个东西高时,它必须降到0,奇怪的是,Sin (- x) 等于 -Sin (x) ,而 Cos (- x) 等于 Cos (x)。

    所以最后的这个部分(如图),

    实部是余弦部分(Cosin),

    虚部是正弦部分(Sine)。

    计算傅里叶变换

    当我们进行傅里叶变换时,我们所做的只是计算基集。我会告诉你我的意思。看到这个丑陋,丑陋的整体吗?

    好吧,我得到的是,我已经得到了一个函数的正弦值,另一个函数的正弦值。,

    两个不同的频率,a 和 b

    我将这一点从负无穷大加到正无穷大,

    我声称如果 a 不等于 b,它等于0。

    为什么这是正确的呢?有猜测吗? 让我们直观地思考一下,如果有一个正弦曲线,

    现在我必须做一个不同的频率,这很容易,

    天啊,真漂亮!哈哈? 在本质上,在某个点上,当这个是正的这个是相同的正值,我会试着找到,希望有一些是正的,

    我必须补上一个点。对,让我们假装红色的东西在这里下来就像那样 一点点。

    当红色的点是正数时,黄色的点是负数,

    所以这两个数的乘积会相互抵消,这是一种波浪的方式表示整个积分是0,只要 a \neq b

    但是你可能会问当a=b时会发生什么?

    我们先假设它们处于相同的相位,完全相同的相位。好吧,它就是Sin²。Sin²是正的,在无穷远处求和,得到什么?你得到无穷大。所以,如果你有两个频率相同的正弦波,你会得到一个无穷大的值。除非它们完全不相合,在这种情况下是0。换句话说,Sin乘以Cos继续下去。但最基本的思路是,如果我整合一个函数,如果它是由一个与\omega不同的正弦曲线组成的,当我采用\omega的正弦并且我完全间隔时,我什么也得不到。但是如果它是等于那个正弦,我会得到无穷大。而且这将是这样写的。

    所以让我们做一个简单的例子。假设有一个简单的函数:f(x)=cos(2 \pi \omega x)

    然后我们选一些频率,我们把它叫做u,简单点。

    如果我取这个积分,Okay。那么如果 u 等于那个相同的 \omega 那将是无穷的,否则它将是零。

    所以看起来像这样, Okay。我们只有这两个成员脉冲。这里只有这两个无穷大的尖峰。

    这被称为与余弦对应的脉冲。你可以看到它们是正的,这是因为它是余弦。

    如果我们有一个正弦,因为sin (- x) = - sin (x),它看起来就像在这里的向上,

    和另一个将会在这里向下。

    这就是正弦,Okay。这就是虚部部分。两个公式如下:

    我们只是在计算一个基集来说明这个正弦曲线有多少。我们可以为所有频率做到这一点。但是你可能会问,我们不是也必须为所有相位做到这一点吗?

    答案是否定的。最酷的事情之一是,如果我有cos(\omega x) 和 sin(\omega x)。所以1是90度 或 两相相变的功率。我可以通过它们的线性组合得到任意相位。你可以证明,这是真的,我们可以做一个小演示。但基本上,如果我有一个任意相位的正弦曲线,如果你告诉我它对余弦的积分是多少、它对正弦的积分是多少,我就能告诉你这个正弦曲线的相位是多少。


    复数的基础:

    https://blog.csdn.net/sw3300255/article/details/83149483


    ——学会编写自己的代码,才能练出真功夫。

    展开全文
  • 快速傅立叶变换(FFT)作为时域和频域转换的基本运算,是数字谱分析的必要前提。传统的FFT使用软件或DSP实现,高速处理时实时性较难满足。FPGA是直接由硬件实现的,其内部结构规则简单,通常可以容纳很多相同的运算...
  • 所属栏目:
  • 时间域文件做FFT变换。使用的是MIT的FFTW库。 图形展示用的是Qwt控件 用户可以自定义FFT窗口宽度等 Qwt显示设置可以自定义。 278397935@qq.com
  • C#代码,FFT计算过程,傅里叶变换,虚拟示波器产品项目实测结果可靠。
  • 离散傅里叶变换与相关性计算

    千次阅读 2019-11-03 11:41:37
    文章目录离散傅里叶变换(DFT)与相关性计算基本定义时域的卷积对应频域的相乘循环平移的傅里叶变换相关与卷积通过傅里叶变换计算相关 本文主要介绍通过离散傅里叶变换的方法计算两个时间序列的相关性,不仅给出...

    离散傅里叶变换(DFT)与相关性计算


    本文主要介绍通过离散傅里叶变换的方法计算两个时间序列的相关性,不仅给出数学公式的推导,同时给出对应的 Matlab程序的验证。文中涉及到相关,卷积等基本概念,本文假设读者已经具备相关的数学基础。

    更改说明:由于CSDN的MD语法在解析部分公式时出现错误,所以讲部分公式改为图片。
    补充:关于循环卷积与频域的相乘关系

    基本定义

    首先,我们给出离散傅里叶变换,卷积与相关的定义:

    离散傅里叶变换

    长度为N的离散时间序列 x ( n ) x(n) x(n)的离散傅里叶变换的定义为:
    X ( k ) = ∑ n = 0 N − 1 x ( n ) e − j 2 π n k / N X(k) = \sum_{n=0}^{N-1}x(n)e^{-j2\pi nk/N} X(k)=n=0N1x(n)ej2πnk/N
    对应的Matlab函数为fft(x)

    卷积

    长度为N的离散时间序列 x ( n ) x(n) x(n) y ( n ) y(n) y(n)的卷积定义为:
    z ( n ) = ∑ m = 0 N − 1 x ( m ) y ( n − m ) z(n) = \sum^{N-1}_{m=0} x(m)y(n-m) z(n)=m=0N1x(m)y(nm)
    得到的卷积 z ( n ) z(n) z(n)的长度为 2 N − 1 2N-1 2N1,n的取值范围是0到2N-2,卷积对应的Matlab函数为conv(x, y)。举个简单的例子:

    x = [1, 2, 3]
    y = [1, -1]
    z = conv(x, y) %  [1, 1, 1, -3]
    

    相关

    长度为N的离散时间序列 x ( n ) x(n) x(n)的相关定义为:
    z ( n ) = ∑ m = 0 N − 1 x ( m ) y ( m − n ) z(n) = \sum^{N-1}_{m=0} x(m)y(m-n) z(n)=m=0N1x(m)y(mn)
    同样,得到的相关 z ( n ) z(n) z(n)的长度为 2 N − 1 2N-1 2N1,卷积对应的Matlab函数为xcorr(x, y), 注意n的范围是 − ( N − 1 ) -(N-1) (N1) ( N − 1 ) (N-1) (N1)。举个简单的例子:

    x = [1, 2, 3]
    y = [1, -1, 1]
    z = xcorr(x, y) %  [1, 1, 2, -1, 3],对应的n是[-2, -1, 0, 1, 2]
    

    注意xcorr中要求两个时间序列长度相等,如果不相等,会自动将较短的时间序列补0。

    时域的卷积对应频域的相乘

    z ( n ) z(n) z(n)是时间序列 x ( n ) x(n) x(n) y ( n ) y(n) y(n)的卷积,长度为 2 N − 1 2N-1 2N1,则对应的离散傅里叶变换为:

    Z ( k ) = ∑ n = 0 2 N − 2 z ( n ) e − j 2 π n k / 2 N − 1 = ∑ n = 0 2 N − 2 ∑ m = 0 N − 1 x ( m ) y ( n − m ) e − j 2 π n k / 2 N − 1 \begin{aligned} Z(k) & = \sum^{2N-2}_{n=0} z(n)e^{-j2\pi nk/{2N-1}} \\ & = \sum^{2N-2}_{n=0} \sum^{N-1}_{m=0} x(m)y(n-m)e^{-j2\pi nk/{2N-1}} \end{aligned} Z(k)=n=02N2z(n)ej2πnk/2N1=n=02N2m=0N1x(m)y(nm)ej2πnk/2N1
    交换求和顺序得
    Z ( k ) = ∑ m = 0 N − 1 x ( m ) ∑ n = 0 2 N − 2 y ( n − m ) e − j 2 π n k / 2 N − 1 = ∑ m = 0 N − 1 x ( m ) e − j 2 π m k / 2 N − 1 ∑ n = 0 2 N − 2 y ( n − m ) e − j 2 π ( n − m ) k / 2 N − 1 = ∑ m = 0 N − 1 x ( m ) e − j 2 π m k / 2 N − 1 ∑ n = 0 N − 1 y ( n ) e − j 2 π n k / 2 N − 1 \begin{aligned} Z(k) & = \sum^{N-1}_{m=0} x(m) \sum^{2N-2}_{n=0} y(n-m)e^{-j2\pi nk/{2N-1}} \\ & = \sum^{N-1}_{m=0} x(m)e^{-j2\pi mk/{2N-1}} \sum^{2N-2}_{n=0} y(n-m)e^{-j2\pi (n-m)k/{2N-1}} \\ & = \sum^{N-1}_{m=0} x(m)e^{-j2\pi mk/{2N-1}} \sum^{N-1}_{n=0} y(n)e^{-j2\pi nk/{2N-1}} \end{aligned} Z(k)=m=0N1x(m)n=02N2y(nm)ej2πnk/2N1=m=0N1x(m)ej2πmk/2N1n=02N2y(nm)ej2π(nm)k/2N1=m=0N1x(m)ej2πmk/2N1n=0N1y(n)ej2πnk/2N1
    注意等式(7)中第二项的变量替换。由于 Z ( k ) Z(k) Z(k)序列的长度为 2 N − 1 2N-1 2N1,而 X ( k ) X(k) X(k) Y ( k ) Y(k) Y(k)的长度都为 N N N,为了长度上一致,我们将 x ( n ) x(n) x(n) y ( n ) y(n) y(n)分别补0,使得最终的序列长度为 2 N − 1 2N -1 2N1,分别记作 x p ( n ) x_p(n) xp(n) y p ( n ) y_p(n) yp(n),以 x p ( n ) x_p(n) xp(n)为例对应的数学描述为:

    x p ( n ) = { x ( n ) n ≤ N − 1 0 n > N − 1 x_p(n) = \left\{ \begin{array}{rl} x(n) & n \leq N-1\\ 0 & n>N-1 \end{array} \right. xp(n)={x(n)0nN1n>N1
    则其对应的傅里叶变换为:
    X p ( k ) = ∑ n = 0 N − 1 x p ( n ) e − j 2 π n k / 2 N − 1 X_p(k) = \sum_{n=0}^{N-1}x_p(n)e^{-j2\pi nk/2N-1} Xp(k)=n=0N1xp(n)ej2πnk/2N1
    联系等式(8)可以得到
    Z ( k ) = X p ( k ) Y p ( k ) Z(k) = X_p(k)Y_p(k) Z(k)=Xp(k)Yp(k)
    我们使用一个简单的Matlab程序进行验证。

    N = 20;
    x = randn(1, N);
    y = randn(1, N);
    
    z = conv(x, y);
    
    xp = [x, zeros(1, N-1)]; %补0
    yp = [y, zeros(1, N-1)]; %补0
    
    zk = fft(z);
    
    xpk = fft(xp);
    ypk = fft(yp);
    zke = xpk.*ypk;%频域相乘
    
    real_err = max(abs(real(zk)-real(zke)));
    imag_err = max(abs(imag(zk) - imag(zke)));
    
    fprintf('实补误差 %e\n虚部误差 %e\n',real_err, imag_err);
    
    %% 程序输出结果
    % 实部误差 1.421085e-14
    % 虚部误差 8.881784e-15
    

    其他的文献补0的个数都选择N而非N-1,背后的道理是一样的。选择N的好处是 X p ( k ) X_p(k) Xp(k) X ( k ) X(k) X(k)有一个一致的对应关系,即 X p ( 2 k ) = X ( k ) X_p(2k) = X(k) Xp(2k)=X(k)

    上面的定理可以简单描述为时域的卷积对应频域的乘积,一个典型应用加速卷积的计算。我们知道,如果直接套用卷积的定义,那么时间复杂度是 O ( n 2 ) O(n^2) O(n2),而快速傅里叶变换的时间复杂度是 O ( n log ⁡ n ) O(n\log n) O(nlogn),一个直接的思路就是利用傅里叶变换计算卷积,即首先根据 X p ( k ) X_p(k) Xp(k) Y p ( k ) Y_p(k) Yp(k)得到时间 Z ( k ) Z(k) Z(k),然后进行傅里叶反变换得到卷积 z ( n ) z(n) z(n)

    循环卷积与相乘的关系

    在图像处理中,图像与卷积核的运算通常需要保持图像大小不变,这种情况下时域的卷积与频域的乘积的对应关系是否仍然保持呢?
    Matlab对应的卷积函数为imfilter(u, v,'circular', 'conv'),给出简单的Matlab函数进行验证。

    a=[1,2,3,4,5,6,7];
    b = [1,2,3];
    d = imfilter(a,b,'circular','conv');
    % 结果 d => [ 11     8    12    16    20    24    21]
    

    了解了循环卷积的运算过程,我们进行公式的推导。首先,对循环卷积进行表示。对于长度为N的序列 x ( n ) x(n) x(n)其中,n=0, 1, 2, …N-1。以及长度为M的序列 h ( n ) h(n) h(n),这里对于 h ( n ) h(n) h(n),如果长度为奇数2M+1,则对应的n的取值范围为-M, -(M-1), … 0, …, (M-1), M。如果长度为偶数2M,则对应的n的范围表示为-M, …M-1。则循环卷积y(n)可以表示为:
    y ( n ) = ∑ m = 0 N − 1 x ( m ) h ) ( n − m ) , n = 0 , 1 , 2 , . . . N − 1 y(n) = \sum_{m=0}^{N-1}x(m)h)(n-m), n=0,1,2,...N-1 y(n)=m=0N1x(m)h)(nm),n=0,1,2,...N1
    根据上述公式,进行形同推导,则可以得到:
    Y ( k ) = ∑ m = 0 N − 1 x ( m ) ∑ n = 0 N − 1 h ( n − m ) e − j 2 π n k / N = ∑ m = 0 N − 1 x ( m ) e − j 2 π m k / N ∑ n = 0 N − 1 h ( n − m ) e − j 2 π ( n − m ) k / N \begin{aligned} Y(k) & = \sum^{N-1}_{m=0} x(m) \sum^{N-1}_{n=0} h(n-m)e^{-j2\pi nk/N} \\ & = \sum^{N-1}_{m=0} x(m)e^{-j2\pi mk/N} \sum^{N-1}_{n=0} h(n-m)e^{-j2\pi (n-m)k/N} \\ \end{aligned} Y(k)=m=0N1x(m)n=0N1h(nm)ej2πnk/N=m=0N1x(m)ej2πmk/Nn=0N1h(nm)ej2π(nm)k/N
    定义 h p ( n ) h_p(n) hp(n)为将 h ( n ) h(n) h(n)补0到长度为N,然后将向左循环平移M位。即:
    h p ( n ) = { h ( n ) 0 ≤ n ≤ M − 1 x ( n − m + N ) n ≥ n − M 0 o t h e r w i s e h_p(n) = \left\{ \begin{array}{rl} h(n) & 0\leq n \leq M-1\\ x(n-m+N) & n \geq n-M\\ 0 & otherwise \end{array} \right. hp(n)=h(n)x(nm+N)00nM1nnMotherwise
    Y ( k ) = X ( k ) H p ( k ) Y(k)=X(k)H_p(k) Y(k)=X(k)Hp(k),我们通过一个Matlab程序进行验证。

    clc
    clear
    x=[1,2,3,4,5,6,7];
    h = [1,2,-1];
    
    y = imfilter(x, h, 'circular', 'conv'); %-3     6     8    10    12    14     9
    
    
    hp = [h, zeros(1, length(x)-length(h))]; %补0
    m = floor(length(h)/2);
    hp = circshift(hp, -m); %向左循环平移
    Yk = fft(x).*fft(hp);
    
    ye = ifft(Yk);  %  -3.0000    6.0000    8.0000   10.0000   12.0000   14.0000    9.0000
    % 计算结果可知,y与ye的结果一致(忽略舍入误差)
    

    循环平移的傅里叶变换

    循环平移的本质是将序列 x ( n ) x(n) x(n)看做周期为N的周期序列,也就是N到2N-1的取值与0到N-1的取值有一一对应的关系。这里我们给出证明:

    将序列 x ( n ) x(n) x(n)向右做循环平移m位,得到y(n),则:
    y ( n ) = { x ( n − m ) n ≥ m x ( n − m + N ) n < m y(n) = \left\{ \begin{array}{rl} x(n-m) & n \geq m\\ x(n-m+N) & n < m \end{array} \right. y(n)={x(nm)x(nm+N)nmn<m
    则对应的傅里叶变换为:
    Y ( k ) = ∑ n = 0 N − 1 y ( n ) e − j 2 π n k / N = ∑ n = m N − 1 x ( n − m ) e − j 2 π n k / N + ∑ n = 0 m − 1 x ( n − m + N ) e − j 2 π n k / N = ∑ n = m N − 1 x ( n − m ) e − j 2 π ( n − m ) k / N e − j 2 π m k / N + ∑ n = 0 m − 1 x ( n − m + N ) e − j 2 π ( n − m + N ) k / N e − j 2 π ( m − N ) k / N = ∑ n = 0 N − 1 x ( n ) e − j 2 π n k / N e − j 2 π m k / N = X ( k ) e − j 2 π m k / N \begin{aligned} Y(k) &= \sum_{n=0}^{N-1} y(n)e^{-j2\pi nk/N} \\ &= \sum_{n=m}^{N-1} x(n-m)e^{-j2\pi nk/N} + \sum_{n=0}^{m-1} x(n-m+N)e^{-j2\pi nk/N} \\ &= \sum_{n=m}^{N-1} x(n-m)e^{-j2\pi (n-m)k/N}e^{-j2\pi mk/N} + \sum_{n=0}^{m-1} x(n-m+N)e^{-j2\pi (n-m+N)k/N}e^{-j2\pi (m-N)k/N} \\ &= \sum_{n=0}^{N-1}x(n)e^{-j2\pi nk/N}e^{-j2\pi mk/N} \\ &= X(k)e^{-j2\pi mk/N} \end{aligned} Y(k)=n=0N1y(n)ej2πnk/N=n=mN1x(nm)ej2πnk/N+n=0m1x(nm+N)ej2πnk/N=n=mN1x(nm)ej2π(nm)k/Nej2πmk/N+n=0m1x(nm+N)ej2π(nm+N)k/Nej2π(mN)k/N=n=0N1x(n)ej2πnk/Nej2πmk/N=X(k)ej2πmk/N

    相关与卷积

    熟悉卷积的读者应该知道卷积的计算过程分为两步:翻转和平移,与相关的计算相比,只是多了一步翻转操作。如果直接序列进行翻转,是否能用卷积代替相关操作呢?答案是是显然的,我们用一个Matlab程序做证明。

    x = [1,2,1];
    y = [1,2,3];
    
    z1 = xcorr(x, y); %相关
    z2 = conv(x, flip(y)); %先翻转,然后卷积
    
    z1 % => [3, 8, 8, 4, 1]
    z2 % => [3, 8, 8, 4, 1]
    

    这里不做数学的证明,有兴趣的读者可以自己证明。证明的过程中注意相关计算结果的第一项对应的n是 − ( N − 1 ) -(N-1) (N1),而卷积操作的第一项对应的n是0。

    通过傅里叶变换计算相关

    如果直接利用相关的公式,时间复杂度是 O ( n 2 ) O(n^2) O(n2),而快速傅里叶变换的时间复杂度是 O ( n log ⁡ n ) O(n\log n) O(nlogn),那么能否使用fft方法来计算相关,从而提高运算速度呢?上一节我们已经知道相关与翻转后做卷积是等价的,那么一个直接的思路是:

    1. 将序列 y ( n ) y(n) y(n)翻转,得到 u ( n ) u(n) u(n),然后补0,得到 u p ( n ) u_p(n) up(n),进行傅里叶变换得到 U p ( k ) U_p(k) Up(k)
    2. 将序列 x ( n ) x(n) x(n)补0,得到 x p ( n ) x_p(n) xp(n),进行傅里叶变换得到 X p ( k ) X_p(k) Xp(k)
    3. 计算 Z ( k ) = X ( p ) U p ( k ) Z(k) = X_(p)U_p(k) Z(k)=X(p)Up(k),通过傅里叶反变换得到 z ( n ) z(n) z(n)

    上述计算的缺点是多了一个中间变量 u ( n ) u(n) u(n),那么能否用 Y p ( k ) Y_p(k) Yp(k) 来计算 U p ( k ) U_p(k) Up(k)呢?我们进行一个简单的推导。
    U p ( k ) = ∑ n = 0 N − 1 u ( n ) e − j 2 π n k / 2 N − 1 = ∑ n = 0 N − 1 y ( N − 1 − n ) e − j 2 π n k / 2 N − 1 = ∑ n = 0 N − 1 y ( N − 1 − n ) e − j 2 π ( n + 1 − N ) k / 2 N − 1 e − j 2 π ( N − 1 ) k / 2 N − 1 = { ∑ n = 0 N − 1 y ( N − 1 − n ) e − j 2 π ( N − 1 − n ) k / 2 N − 1 } ∗ e − j 2 π ( N − 1 ) k / 2 N − 1 = Y p ∗ ( k ) e − j 2 π ( N − 1 ) k / 2 N − 1 \begin{aligned} U_p(k) & = \sum_{n=0}^{N-1}u(n)e^{-j2\pi nk/2N-1} \\ & = \sum_{n=0}^{N-1}y(N-1-n)e^{-j2\pi nk/2N-1} \\ & = \sum_{n=0}^{N-1}y(N-1-n)e^{-j2\pi (n+1-N)k/2N-1}e^{-j2\pi (N-1)k/2N-1} \\ & = \left\{\sum_{n=0}^{N-1}y(N-1-n)e^{-j2\pi (N-1-n)k/2N-1}\right\}^*e^{-j2\pi (N-1)k/2N-1} \\ & = Y^*_p(k)e^{-j2\pi (N-1)k/2N-1} \end{aligned} Up(k)=n=0N1u(n)ej2πnk/2N1=n=0N1y(N1n)ej2πnk/2N1=n=0N1y(N1n)ej2π(n+1N)k/2N1ej2π(N1)k/2N1={n=0N1y(N1n)ej2π(N1n)k/2N1}ej2π(N1)k/2N1=Yp(k)ej2π(N1)k/2N1
    其中 ∗ * 表示共轭运算,对应的matlab函数为conj(X)

    也就是说如果令 Z 1 ( k ) = X p ( k ) Y p ∗ ( k ) Z_1(k) = X_p(k)Y_p^*(k) Z1(k)=Xp(k)Yp(k),对应的傅里叶反变换为 z 1 ( n ) z_1(n) z1(n),则 Z ( k ) = Z 1 ( k ) e − j 2 π ( N − 1 ) k / 2 N − 1 Z(k) = Z_1(k)e^{-j2\pi (N-1)k/2N-1} Z(k)=Z1(k)ej2π(N1)k/2N1,根据循环平移的傅里叶变换易知 z ( n ) = z 1 ( n − ( N − 1 ) ) z(n) = z1(n-(N-1)) z(n)=z1(n(N1))

    因此,通过傅里叶变换计算相关运算的思路为:

    1. x ( n ) x(n) x(n) y ( n ) y(n) y(n)分别补N-1个0,得到 x p ( n ) x_p(n) xp(n) y p ( n ) y_p(n) yp(n),进行快速傅里叶变换得到 X p ( k ) X_p(k) Xp(k) Y p ( k ) Y_p(k) Yp(k)
    2. 计算 Z 1 ( k ) = X ( k ) Y ∗ ( k ) Z_1(k) = X(k)Y^*(k) Z1(k)=X(k)Y(k),并进行傅里叶反变换得到 z 1 ( n ) z_1(n) z1(n)
    3. 进行循环平移得到 z ( n ) z(n) z(n)

    同之前讨论过的一样,补0的个数只要大于等于N-1不影响计算结果,很多资料中都补N个0.

    最后我们通过一个Matlab程序对比一下4种计算相关性的方法。

    % 通过4种方式计算相关
    %% 数据生成
    N = 30;
    x = randn(1, N);
    y = [randn(1, 4), x(1:N-4)];
    %y = randn(1, N);
    
    %% 方法1, 通过Matlab自带函数xcorr进行计算
    
    z1 = xcorr(x, y);
    
    %% 方法2,通过翻转,求卷积
    
    z2 = conv(x, flip(y));
    
    %% 方法3,通过翻转,傅里叶变换计算
    u = flip(y);
    xp = [x, zeros(1, N-1)];
    up = [u, zeros(1, N-1)];
    
    zk = fft(xp).*fft(up);
    z3 = ifft(zk);
    
    %% 方法4,傅里叶变换方法
    xp = [x, zeros(1, N-1)];
    
    yp = [y, zeros(1, N-1)];
    
    z1k = fft(xp).*conj(fft(yp));
    z1n =  ifft(z1k);
    z4 = circshift(z1n, N-1); %需要平移操作
    
    %% 计算结果的可视化
    lags = -(N-1):N-1;
    
    
    scalediff = 5;
    plot(lags, z1);
    hold on;
    plot(lags, z2 + scalediff*1);
    plot(lags, z3 + scalediff*2);
    plot(lags, z4 + scalediff*3);
    
    plot([-4, -4], ylim, 'r:','LineWidth', 1.5); % 平移量
    hold off
    legend('方法一','方法二','方法三', '方法四');
    
    

    结果:
    在这里插入图片描述

    展开全文
  • 含噪脉冲信号进行相关检测,最终的权值矩阵就是滤波器的系数,分数阶傅里叶变换计算方面 The final weight matrix is the coefficient of the filter, and the calculation of fractional Fourier transform
  • 二维傅立叶变换的Matlab实现,是利用图像处理软件对给出的图像进行傅立叶变换处理。在Matlab中,函数fft2表示二维傅立叶变换,函数ifft2则表示二维傅立叶反变换
  • 加窗傅里叶变换的演示 matlab程序 分别对加方窗和海明窗的信号做傅里叶变换 函数可以改变窗口的大小 对理解傅里叶变换和频谱非常有帮助
  • 采用坐标扩展变换,突破了快速傅里叶变换计算过程中输入屏和衍射屏空间尺度必须相同、抽样格点必须等间隔的限制,使上述问题得到解决,可以得到更加详细的聚焦光束光场分布。同时,采用分两步计算的思想,避免了计算...
  • 分数阶傅里叶变换的matlab代码,返回的是其幅值
  • 实验二 离散时间傅里叶变换和离散傅里叶变换 一 实验目的 深刻理解离散时间信号傅里叶变换的定义与连续傅里叶变换之间的关系 深刻理解序列频谱的性质连续的周期的等 能用 MATLAB 编程实现序列的 DTFT 并能显示频谱...
  • 7非周期信号傅里叶变换
  • 快速傅里叶变换 (fast Fourier transform), 即利用计算机计算离散傅里叶变换(DFT)的高效、快速计算方法的统称,简称FFT。快速傅里叶变换是1965年由J.W.库利和T.W.图基提出的。采用这种算法能使计算机计算离散傅里叶...
  • 快速傅立叶算法,采用时域抽取法...调试中经测试,对一个2^19=52万左右个数据点的输入数组,算法在5秒时间可给出结果,输出结果是所有频率值的模值,而不是单独的实部与虚部(当然也可以单独给出实部虚部计算其相位)。
  • 对于高频信号和高频噪声干扰相混叠的信号,采用小波变换去除噪声可以避免用傅里叶变换去噪带来的信号折损。对于噪声频率固定的平稳信号,在对信号进行傅里叶变换后使用滤波器滤除噪声。对高频含噪信号则采用正交小波...
  • 频域处理图像变换频域与频域变换傅立叶的两个最主要的贡献傅立叶变换(一种正交变换)连续函数的傅立叶变换例子离散傅立叶变换一维离散傅立叶变换计算举例1-D傅里叶变换矩阵格式2-D傅里叶变换矩阵表示例子离散傅立叶...


    学习目标:
    图像傅立叶变换意义、原理、性质
    快速傅立叶变换实现
    图像频域处理方法、步骤

    图像变换

    在这里插入图片描述
    在这里插入图片描述
    图像的变换域分析的数学基础:
    将空域中的信号(图像)变换到另外一个域(频域),即使用该域中的一组单位正交基函数的线性组合来表示任意函数
    使用这组基函数的线性组合得到任意函数f,每个基函数的系数就是f与该基函数的内积

    图像变换的目的
    使图像处理问题简化;
    有利于图像特征提取;
    有助于从概念上增强对图像信息的理解;

    图像变换通常是一种二维正交变换
    一般要求:

    1. 正交变换必须是可逆的;
    2. 正变换和反变换的算法不能太复杂;
    3. 正交变换的特点是在变换域中图像能量将集中分布在低频率
      成分上,边缘、线状信息反映在高频率成分上,有利于图像处理

    因此正交变换广泛应用在图像增强、图像恢复、特征提取、图像压缩编码和形状分析等方面

    频域与频域变换

    傅立叶的两个最主要的贡献

    (1)“周期信号都可表示为谐波关系的正弦信号的加权和”
    在这里插入图片描述
    (2)“非周期信号都可用正弦信号的加权积分表示
    在这里插入图片描述
    在这里插入图片描述
    在工程计算中, 无论是电学、力学、光学, 经常要和随时间而变的周期函数fT(t)打交道.
    例如工程中使用的周期函数都可以用一系列的三角函数的线性组合来逼近
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    傅立叶变换(一种正交变换)

    从纯粹的数学意义上看,傅立叶变换是将一个函数转换为一系列周期函数(正、余弦函数)来处理的。从物理效果看,傅立叶变换是将图像从空间域转换到频率域

    为什么要在频率域研究图像?
    可以利用频率成分和图像外表之间的对应关系。一些在空间域表述困难的增强任务,在频率域中变得非常普通
    滤波在频率域更为直观,易于设计特定问题的滤波器,但通常在空间域用硬件实现

    图像的频率指什么?
    图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度。灰度变化缓慢的区域,对应的频率值很低;灰度变化剧烈的区域,对应的频率值较高。

    连续函数的傅立叶变换

    一维傅立叶变换对定义为
    在这里插入图片描述
    二维连续傅立叶变换
    在这里插入图片描述
    在这里插入图片描述

    例子

    如图所示的简单函数,求它的傅立叶谱
    在这里插入图片描述
    在这里插入图片描述

    离散傅立叶变换

    在这里插入图片描述

    一维离散傅立叶变换的计算举例

    在这里插入图片描述
    在这里插入图片描述
    M=N的情形
    在这里插入图片描述

    1-D傅里叶变换矩阵格式

    在这里插入图片描述

    2-D傅里叶变换矩阵表示

    在这里插入图片描述
    在这里插入图片描述

    例子

    在这里插入图片描述

    离散傅立叶变换的显示

    在这里插入图片描述

    展开全文
  • 离散傅里叶变换的应用,用傅里叶变换对图像去噪的matlab实现
  • 用python实现傅里叶的快速变换,实现与传统傅里叶变换不同的快速傅里叶变换,也使用了一些图形界面设计
  • 计算方波信号的傅里叶变换,方波宽度自定义(提示:可用单位阶跃信号表示方波信号)
  • 实验3 离散序列的傅里叶变换的MATLAB实现 实验目的 熟悉离散序列的傅里叶变换理论及其MATLAB实现 2. 实例分析 2.1离散序列傅里叶变换的MATLAB实现 例2.1 已知求其离散时间傅里叶变换并讨论其共轭对称性 根据离散序列...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 52,908
精华内容 21,163
关键字:

傅里叶变换如何计算