精华内容
下载资源
问答
  • WORD格式 专业资料整理 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=...
  • MATLAB中傅里叶变换常用函数示例
  • Matlab 傅里叶变换函数

    2014-05-07 15:08:51
    自己写的傅里叶变换函数,带绘图,时域、频域对比。 输入参数data,时域信号。 Fs采样频率需根据实际修改。
  • 基于Matlab的二维快速傅里叶函数,将此程序放到同一文件夹内可直接调用!
  • matlab 快速傅里叶变换函数(fft)编写

    千次阅读 2020-12-03 22:25:49
    快速傅里叶变换函数(fft)matlab编写

    matlab 快速傅里叶变换函数(fft)编写(横向读取数据进行变换)
    (欢迎指正)
    参考资料百度文库PPT:百度文库PPT

    #matlab代码

    #%快速傅里叶变换,不够2的整数幂的个数,末尾自动补齐0
    function ret_val = myfft(Vector)
    %因为输入的数据可能不是2的整数次幂,变换使得计算更加方便
    [m,n]=size(Vector);%输入信号矩阵大小
    num=ceil(log2(n));%向上取整
    N=2^num;
    vector=zeros(m,N);%申请足够大小矩阵
    vector(:,1:n)=Vector(:,:);%将变换后的信号输入,不足补零
    %变址运算
    % temp=zeros(1,N);
    % for p=1:m
    %     for q=0:N-1
    %         t=bin2dec(fliplr(dec2bin(q,num)));%变址运算
    %         temp(1,q+1)=vector(p,t+1);
    %     end
    %     vector(p,:)=temp(1,:);
    % end
    %变址运算
    for line=1:m%循环行数
        j1 = 0;
        for i = 1 : N%循环个数
            if i < j1 + 1
                tmp = vector(line,j1 + 1);
                vector(line,j1 + 1) = vector(line,i);
                vector(line,i) =tmp;
            end
            k = N / 2;
            while k <= j1
                j1 = j1 - k;
                k = k / 2;
            end
            j1 = j1 + k;
        end
    end
    for lines=1:m%循环行数
        for L=0:num-1%L表示运算等级或者层数
            dis=2^L;%dis表示奇偶组之间的距离
            for id=1:2^(num-L-1) %循环当前层数组数
                %进行同址运算
               for idx=1:dis%循环组内个数
                   x1=(id-1)*2*dis+idx;%求得奇数数组的索引值
                   x2=(id-1)*2*dis+dis+idx;%对应偶数数组的索引值
                temp1=vector(lines,x1)+vector(lines,x2)*W(L,(x1-1));%中间变量保存相应奇偶数组数据
                temp2=vector(lines,x1)-vector(lines,x2)*W(L,(x1-1));
                vector(lines,x1)=temp1;%所谓存入之前地址
                vector(lines,x2)=temp2;
               end
            end
        end
    end
    ret_val =vector;
    function val=W(L,x)%旋转因子当层数为L,索引值为x
    val=exp(-1j*2*pi*x/2^(L+1));
    end
    end
    

    输入遥感影像数据进行测试结果截图*
    在这里插入图片描述

    输入矩阵或者数组进行测试并和matlab自带函数比较截图
    在这里插入图片描述
    需要注意的是自己编写的myfft的横向读取数据自动补零的操作方式和matlab自带fft函数有区别,不完全相同。

    展开全文
  • 中国科技论文在线 基于 MATLAB GUI 的傅里叶变换分析的仿 真设计 高恒伟宋余君何辉* 中国矿业大学信电学院江苏徐州 221008 摘要本文简要阐述了傅里叶变换的基本原理傅里叶变换的性质傅里叶变换的尺度变换 性频移特性...
  • matlab傅里叶变换

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

    更多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

    展开全文
  • 本程序是根据矩阵的形式实现了一维向量的快速傅里叶变换,程序输入为向量f,输出为其傅里叶变换所得序列F
  • matlab 编写快速傅里叶变换函数(ifft)(横向读取数据进行变换) %快速傅里叶逆变换,不够2的整数幂的个数,末尾自动补齐0

    原理参考:百度文库PPT
    (欢迎指正)
    matlab 编写快速傅里叶反变换函数(ifft)(横向读取数据进行变换)

    matlab代码:

    %快速傅里叶逆变换,不够2的整数幂的个数,末尾自动补齐0
    function ret_val = myifft(Vector)
    %因为输入的数据可能不是2的整数次幂,补零使得计算更加方便
    [m,n]=size(Vector);%输入信号矩阵大小
    num=ceil(log2(n));%向上取整
    N=2^num;
    vector=zeros(m,N);%申请足够大小矩阵
    vector(:,1:n)=Vector(:,:);%将变换后的信号输入,不足补零
    
    for lines=1:m%循环行数
        for L=num-1:-1:0%L表示运算等级或者层数
            dis=2^L;%dis表示奇偶组之间的距离
            for id=1:2^(num-L-1) %循环当前层数组数
                %进行同址运算
               for idx=1:dis%循环组内个数
                   x1=(id-1)*2*dis+idx;%求得奇数数组的索引值
                   x2=(id-1)*2*dis+dis+idx;%对应偶数数组的索引值
                temp1=(vector(lines,x1)+vector(lines,x2))/2;%中间变量保存相应奇偶数组数据
                temp2=(vector(lines,x1)-vector(lines,x2))/2*W(L,(x1-1));
                vector(lines,x1)=temp1;%存入之前地址
                vector(lines,x2)=temp2;
               end
            end
        end
    end
    %变址运算,逆推回原来位置
    for line=1:m%循环行数
        j1 = 0;
        for i = 1 : N%循环个数
            if i < j1 + 1
                tmp = vector(line,j1 + 1);
                vector(line,j1 + 1) = vector(line,i);
                vector(line,i) =tmp;
            end
            k = N / 2;
            while k <= j1
                j1 = j1 - k;
                k = k / 2;
            end
            j1 = j1 + k;
        end
    end
    ret_val =vector;
    function val=W(L,x)%旋转因子当层数为L,索引值为x
    val=exp(1j*2*pi*x/2^(L+1));
    end
    end
    

    输入傅里叶变换后的结果进行反变换*
    在这里插入图片描述
    反变换结果截图
    右边图像右下黑框是fft变换过程中补零部分
    在这里插入图片描述
    当然也可以去除黑边框:
    在这里插入图片描述

    说明:函数是对输入数据进行一维横向fft,对于遥感图像要进行二维变换,才能获得如图效果。

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

    千次阅读 2019-08-27 15:15:25
    很多朋友在做傅里叶级数变换时,会发自己的matlab中并不带有傅里叶级数变换函数,这就需要我们自己编一个级数变换函数。在大学高数我们学过傅里叶级数的变换原理,就是下面的公式了,方便大家理解后面的代码。 具体...

    一个MATLAB中傅里叶级数变换的函数

    很多朋友在做傅里叶级数变换时,会发自己的matlab中并不带有傅里叶级数变换函数,这就需要我们自己编一个级数变换函数。在大学高数我们学过傅里叶级数的变换原理,就是下面的公式了,方便大家理解后面的代码。

    在这里插入图片描述

    具体的代码就是下面的了,大家要记得保存为fseries.m格式,今后用时直接调用就可以啦。

    
    function [an,bn,f]=fseries(fx,x,n,a,b)
    %傅里叶级数展开
    %an为fourier余弦项系数
    %bn为fourier正弦项系数
    %f为展开表达式
    %f为给定函数
    %x为自变量
    %n为展开系数
    %a,b为x的区间,默认为[-pi,pi]
     
    if nargin==3
        a=-pi;
        b=pi;
    end
    l=(b-a)/2;
    if a+b
        fx=subs(fx,x,x+l+a);
    end
    an=int(fx,x,-l,l)/l;
    bn=[];
    f=an/2;
    for ii=1:n
        ann=int(fx*cos(ii*pi*x/l),x,-l,l)/l;
        bnn=int(fx*sin(ii*pi*x/l),x,-l,l)/l;
        an=[an,ann];
        bn=[bn,bnn];
        f=f+ann*cos(ii*pi*x/l)+bnn*sin(ii*pi*x/l);
    end
    if a+b
        f=subs(f,x,x-l-a);
    end
    
    
    
    展开全文
  • MATLAB快速傅里叶变换(fft)函数详解

    万次阅读 多人点赞 2016-12-16 09:35:35
    原文 定义: MATLAB帮助文件原文  ...​​1....式,y是序列,Y是序列的快速傅里叶变换。y可以是一向量或矩阵,若y为向量,则Y是y的FFT,并且与y具有相同的长度。若y为一矩阵,则Y是
  • matlab实现傅里叶变换

    2021-04-23 17:02:05
    在此基础上进行推广,从而可以对一个非周期函数进行时频变换。从分析的角度看,他是用简单的函数去逼近(或代替)复杂函数,从几何的角度看,它是以一族正交函数为基向量,将函数空间进行正交分解,相应的系数即为坐标...
  • 一种积分变换,它来源于函数傅里叶积分表示。...傅里叶变换在物理学、电子类学科、数论、组合数学、信号处理、概率论、统计学、密码学、声学、光学、海洋学、结构动力学等领域都有着广泛的应用(例如在信号处理,...
  • T2F函数,在matlab中傅里叶变换时调用,时间域信号转化为频率域
  • 傅里叶变换是我们最早开始接触的时频域变换方法,虽然经常使用,知道怎么用纸笔计算,但是还从来没有在电脑模拟过,正好现在开始学习数字信号处理,借着这个机会再学习如何在电脑上模拟傅里叶变换。以下大部分内容...
  • MATLAB傅里叶变换中的应用.pdf
  • 它给出了 Rect 函数的傅立叶变换
  • 加窗傅里叶变换的演示 matlab程序 分别对加方窗和海明窗的信号做傅里叶变换 函数可以改变窗口的大小 对理解傅里叶变换和频谱非常有帮助
  • matlab 傅里叶变换 t2f

    2014-04-27 23:10:12
    matlab 仿真 傅里叶变换 t2f函数
  • 矩形函数的定义: 矩形函数 rect(t); 如果绝对值 |t| > 0.5 rect(t) = 0; 如果绝对值 |t| = 0.5 rect(t) = 0.5; 如果绝对值 |t| < 0.5 rect(t) = 1.0;也可以用单位阶跃函数 u(t) 来定义: rect(t/T) = u(t + T/...
  • 不用循环实现的离散时间傅立叶变换 适用于MATLAB学习需要用到DTFT而不是FFT的场合
  • 话题:用MATLAB如何实现傅里叶变换问题详情:任意输入一个函数,然后,输出函数的傅里叶变换函数,然后回答:x=sin(2*pi*t);%任意输入一个函数 y=fft(x);%傅里叶变换函数 plot(abs(y));%振幅频率话题:matlab编程实现傅...
  • 1的对称方波的前十项傅里叶级数的系数(三角函数形式),并分别用前三项、前五项和前十项恢复原信号,时域采样点数N=1000,所有图时间坐标从-0.5到0.5。 ...
  • 傅里叶变换及其实现(MATLAB

    万次阅读 多人点赞 2018-01-09 17:44:16
    傅立叶变换是一种常见的分析方法,傅立叶变换将满足一定条件的函数表示为一些函数的加权和(或者积分)。可以分为四个类别: 1. 非周期连续性信号 对应于傅里叶变换,频域连续非周期 2. 周期性连续性信号 对应...
  • Fw=fourier(y):连续傅里叶变换函数 ft=ifourier(Fw,t):连续傅里叶变换函数 傅里叶变换举例如下: syms t; figure; y = (sin(2pi(t-1)))/(pi*(t-1)); ezplot(y);%创建了函数y并画图现实 Fw=fourier(y);%Fw即为...
  • 本程序主要实现了二维傅里叶变换,其中先对图像矩阵进行预处理(即图像中心化),然后进行行傅里叶变换,再对其进行列变换,进行行列变换是调用自己写的一维傅里叶变换函数ImFFT实现的。程序输入为图像矩阵A,输出为...
  • 离散傅里叶变换(DFS)、逆离散傅里叶变换(IDFS)的实现 代码如下,其中xn为时序序列 clc;clear; xn=[7,6,5,4,3,2]; Xk=dfs(xn,6); x=idfs(Xk,6); subplot(2,2,1);stem(0:5,abs(Xk),'filled'); axis([0,5,0,1.1...
  • 14. 会将定义在闭区间[-l, l)上的黎曼可积函数延拓成周期为2l的函数并展开其傅里叶级数, 会将定义在[0, l) 上的函数展开为正弦级数与余弦级数, 会写出傅里叶级数的和函数的表达式.。2 . 3 周期信号的傅利叶级数分析 ...
  • 优秀完整的傅里叶变换对应的matlab函数
  • 解析MATLAB短时傅里叶变换函数spectrogram()

    万次阅读 多人点赞 2020-03-15 15:13:28
    BB: 最近做脑电信号的时频分析,考虑采用该函数,但在参数设置和输出结果上有些疑惑,参考了众多资料,现对出现的困惑进行一些总结。 如何理解spectrogram()函数的输入输出参数? Abstract: 我想这篇博文可以帮你弄...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,295
精华内容 3,718
关键字:

matlab中傅里叶变换函数

matlab 订阅