精华内容
下载资源
问答
  • matlab傅里叶变换与反变换

    热门讨论 2012-04-01 11:21:15
    基于matlab傅里叶变换与反变换的标准形式。
  • matlab 编写快速傅里叶反变换函数(ifft)(横向读取数据进行变换) %快速傅里叶逆变换,不够2的整数幂的个数,末尾自动补齐0

    原理参考:[https://wk.baidu.com/view/da8d58d776a20029bd642d14?pcf=2]
    (欢迎指正)
    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,对于遥感图像要进行二维变换,才能获得如图效果。
    具体调用函数代码:

    %快速傅里叶变换函数及逆变换函数测试程序
    tic
    filename='Landsat8_OLI_b1.dat';
    Re=IMG_Read(filename);
    img=cell2mat(Re(5));%获取图像矩阵参数
    t1=myfft(img);%一维横向变换
    f=myfft(t1.');%纵向变换
    [m,n]=size(f);
    [M,N]=size(img);
    f=myfftshift(f);      %使图像对称,中心化
    r=real(f);          %图像频域实部
    i=imag(f);          %图像频域虚部
    Margin=log(sqrt(r.^2+i.^2));      %图像幅度谱,加log便于显示
    phase=real(angle(f)*180/pi);     %图像相位谱
    figure(1)
    subplot(1,3,1),imshow(linear1(img)),title('源图像');%拉伸显示
    subplot(1,3,2),imshow(Margin,[]),title('图像幅度谱');
    subplot(1,3,3),imshow(phase,[]),title('图像相位谱');
    f=myfftshift(f);
    g=myifft(f);
    k=myifft(g.');
    k=k(1:M,1:N);
    figure(2)
    imshow(linear1(k)),%拉伸显示原图像
    title('逆变换结果')
    toc
    
    展开全文
  • 由输出信号频域,进行傅里叶反变换得到时域,应与输入信号相同,但结果并不是如此。感觉错误出现在 phi=N*T.^2/(2*pi*m); h=exp(0.5i*phi*w.^2); y2=y1.*h; x2 =ifftshift(ifft(y2)); 这几行里,求大神指导。 ...
  • 根据时域圆周移位特性 可得 即X1(k)={7,2+3j,-1-2j,-j} 5.2. 6 X(k)={7,2+3j,-1-2j,-j} 5.2.3 圆周卷积定理 假设x1(n)和x2(n)经过补零到两个长度一致的有限长序列长度为N且有 则 5.2. 8 式中[x1(n) x2(n)]表示序列x1...
  • MATLAB中想要画一个sin函数是很容易的。比如:首先定义t = 0:0.01:10,然后画出y = sin(2*pi*t)就可以了,最多再加相角啊之类的参数。但如果在C语言中应该如何自己制造一个sin函数呢?应该借鉴数字信号处理里的抽样...

    在MATLAB中想要画一个sin函数是很容易的。

    比如:首先定义t = 0:0.01:10,然后画出y = sin(2*pi*t)就可以了,最多再加相角啊之类的参数。

    但如果在C语言中应该如何自己制造一个sin函数呢?

    应该借鉴数字信号处理里的抽样思想:

    想生成函数x(t) = a*sin(2*pi*f0*t+ψ),就应该考虑到抽样定理:以等时间间隔进行抽样,即x[n] = x[n*Ts] 其中Ts = 1/fs(fs是抽样频率)。

    这时候想生成的函数x(t)就变成了x(t) = x(n*Ts) = x(n) = a*sin(2*pi*f0*n/fs+ψ) = a*sin(w*n+ψ),其中w是数字角频率,这就将模拟时间信号转化成了数字信号。

    举个例子,想生成函数y = sin(20*pi*t),用matlab直接生产的图形如下所示(取t=0:0.001:1)

    matlab程序为

    t = 0:0.001:1;

    y = sin(20*pi*t);

    plot(t,y);

    03bf961608016bedea856594299b13f3.png

    如果想用C语言来实现怎么办呢?

    从原函数y = sin(20*pi*t)可知:

    f0 = 10,设fs = 40,n = 0:10(这里的n都是整数)来看看,此时x(n) = sin(2*pi*f0*n/fs),matlab程序为

    clear all;

    f0=10;

    fs=40;

    N=10;

    n=0:N-1;

    y=sin(2*pi*n*f0/fs);

    画出来的图形如下图:

    2edc122f2e8dd2e5b499cefd9826bfa4.png

    现在函数式为x[n] = sin(n*pi/2),周期是4

    为什么看着不像以前的正弦函数了?因为这是对原函数抽样后得到的,而且它的横坐标已经变成了n而不是t。为了让抽样后的x[n]看起来更像x[t]那么方法只有一个,就是增加抽样率fs。当抽样率为80时x[n] = sin(n*pi/4),

    f0=10;

    fs=80;

    N=10;

    n=0:N-1;

    y=sin(2*pi*n*f0/fs);

    plot(n,y);

    047dfccfe7e160be6c2e8f43f8afb58d.png

    看着更像x(t)了!这是因为抽样点更密了。

    所以产生x(t)=a*sin(2*pi*f0*t+ψ)的正弦波步骤:

    对x(t)进行以fs为抽样频率的抽样后得到

    x(n)=a*sin(2*pi*f0*n/fs+ψ)=a*sin(w*n+ψ)

    画的时候指明a,f0,fs,ψ就可以对任意sin函数进行画图

    那么,如何知道现在画出来的x(n)就是以前的x(t)呢?以前是T = 0.1S,现在变成了T = 8,在这种情况下如何换算呢?就有FFT了!

    下一篇文章我们再继续。

    展开全文
  • 语音学习笔记3------matlab实现傅里叶反变换ifft()函数

    万次阅读 多人点赞 2016-12-22 14:59:54
    上一篇博客我们了解到,可以将一个...下面就讲讲如何实现傅里叶反变换傅里叶变换的函数是ifft();但是ifft()有很多引用的参数语法讲究。 y = ifft(X) y = ifft(X,n) y = ifft(X,[],dim) y = ifft(X,n,dim)


    上一篇博客我们了解到,可以将一个语音信号傅里叶变换,那么,我们能不能逆向推回去呢,用已经存在的数据进行傅里叶逆变换?答案是肯定的。下面就讲讲如何实现傅里叶的反变换。

    [y,Fs]=audioread('C:\Users\wxq\Desktop\66666.wav')
    Nsamps = length(y);
    t = (1/Fs)*(1:Nsamps)          %Prepare time data for plot
    %Do Fourier Transform
    y_fft = abs(fft(y));            %Retain Magnitude%y_fft = fft(y); 
    y1=ifft(y_fft);
    figure;
    plot(t ,y1);
    


    傅里叶变换的函数是ifft();但是ifft()有很多引用的参数语法讲究。

    y = ifft(X)


    y = ifft(X,n)


    y = ifft(X,[],dim)


    y = ifft(X,n,dim)


    y = ifft(..., 'symmetric')


    y = ifft(..., 'nonsymmetric')


    Y = IFFT(x)的逆离散傅里叶变换的回报(DFT)向量X,用快速傅里叶变换(FFT)算


    法计算。如果x是一个矩阵,IFFT返回每个列的矩阵的逆DFT。


    IFFT测试X是否沿活动尺寸X向量的共轭对称。如果是这样的话,计算速度快,输出是真


    实的。一个n元向


    量x是共轭对称如果x(i)=连词(x(MOD(n i + 1,n)+ 1))为X的每个元素


    如果x是一个多维数组,IFFT操作上的第一个非单维度。


    Y = IFFT(x,n)返回向量X的N点DFT逆


    Y = IFFT(x,[ ],DIM)和Y = IFFT(x,n,DIM)返回x在维暗淡的逆DFT。


    Y = IFFT(…,“对称”)导致治疗X共轭IFFT沿活动维对称。当X是不完全对称共轭的


    选项是有用的,只


    是由于舍入误差。


    Y = IFFT(…,“非对称”)是叫IFFT相同(…)没有参数“非对称”。


    对任意的x,IFFT变换(FFT(X))等于x的舍入误差。




    总结:


    IFFT算法(x)为FFT算法相同(X),除了改变符号,N =长度比例因子(X)。由于


    FFT、IFFT执行时间取决于变换长度。这是最快的两个权力。这是几乎一样快,只有小素


    数的长度。它通常是几倍的速度的长度是总理或具有大素数因子。


    注意:


    你可以增加使用效用函数FFTW IFFT的速度,它控制着®MATLAB软件优化计算一个特定的


    大小和尺寸的FFT算法。


    类似于ifft()用法的还有;fft2fftwifft2ifftnifftshift



    不懂的可以加我的QQ群:522869126(语音信号处理) 欢迎你的



    到来哦,看了博文给点脚印呗,谢谢啦~~



    展开全文
  • matlab 傅里叶变换

    2015-05-17 18:54:05
     %两幅图像傅立叶变换后相加 f1=imread('rice.tif');%读图一 f2=imread('circles.tif'); %读图二 F1=fft2(double(f1));%对图一进行傅里叶变换 ... %对图二进行傅里叶变换 ...%对F反傅里叶
    

    %两幅图像傅立叶变换后相加

    f1=imread('rice.tif');%读图一

    f2=imread('circles.tif'); %读图二

    F1=fft2(double(f1));%对图一进行傅里叶变换

    F2=fft2(double(f2)); %对图二进行傅里叶变换

    F=F1+F2;%两幅图在频率域融合

    f=ifft2(F);%F反傅里叶

    %%显示图像

    figure,subplot(3,2,1),imshow(f1);%显示原图一

    subplot(3,2,2),imshow(f2); %显示原图二

    subplot(3,2,3),imshow(log(abs(fftshift(F1))),[8,10]); %显示图一坐标平移后的傅里叶频谱图

    subplot(3,2,4),imshow(log(abs(fftshift(F2))),[8,10]); %显示图二坐标平移后的傅里叶频谱图

    subplot(3,2,5),imshow(log(abs(fftshift(F))),[8,10]);%显示两图频域融合平移后傅里叶频谱图

    subplot(3,2,6),imshow(real(ifft2(F)));%对融合后的图像反傅里叶

    subplot(3,2,6),imshow(ifft2(F),[]);

    展开全文
  • ==============功能描述:给定信号,对其进行傅里叶变换然后再进行反变换,绘制原始信号、傅里叶变换、傅里叶反变换的结果图像。给定信号,滤除其中某个频率范围的信号,绘制图像。参考代码:运行结果:温馨提示关注...
  • 用于车辆平顺性仿真的路面随机激励时域模型,单轮车辆模型
  • 继 1900 年普朗克提出量子概念以后,出现了爱因斯坦的光电效应解释、玻尔 - 索末菲原子定态轨道理论(圆满解释了氢光谱线,但此理论与加速电子的辐射理论相抵触)、泡利的不相容原理(每一量子态不可能存在多于一个的...
  • matlab 傅里叶变换 高斯高通滤波

    万次阅读 2017-03-29 20:37:23
    先对图像进行傅里叶变换,再中心化图像。通过高斯高通滤波器的处理后,通过反变换生成新的图像
  • 而被其他频率混淆(干扰)的函数是不能完全通过反傅里叶变换还原回原函数的。 广义上的混淆 如果我们认为我们完全遵守奎更斯特(香农)定理,就万事大吉了。雷神高速我们:Too Young Too Simple. 因为在绝大多数的...
  • 低通滤波器指去除图像中的高频成分,而低通滤波器指...由下面函数确定: 具体参见下图: Matlab函数介绍Fft2:二维快速傅里叶变换Fftshift:移动零频点到频谱中间Ifft2: 二维快速反傅里叶变换算法思路对图像进行傅里...
  • 可以使用 MATLAB傅里叶变换函数和反变换函数。 原理部分 低通滤波器指去除图像中的高频成分,而低通滤波器指去除图像中的高频成分。 考虑的有三种低通滤波器:理想滤波器、布特沃斯滤波器和高斯滤波器。 ...
  • 该程序为利用matlab进行图像处理的代码,主要针对傅里叶正反变换以及其频率域的呈现,以及理想(方形)低通滤波器、Butterworth滤波器的实现,代码费了不少心思,毕竟八百年没碰过matlab了,竟然写到一半开始拼...
  • clear;clc;...Func = matlabFunction(Q); X = Func(6);Q的值为δ(t-6),Func这一句相当于句柄化。对于Func(6)输出X= Inf,正确又如:clear;clc; syms w t F = 1 / (1 + 1j *w); Q = ifourier(...
  • matlab中对图像进行二维离散傅里叶...而命令Fftshift(ifft2(fftshift(·)))表示二维离散傅里叶反变换 以上两个命令中在执行fft2或者ifft2计算之前和计算后分别都执行了fftshift,这是因为图像的原点在坐标中心! ...
  • MATLAB实现图像的傅里叶变换解-数字图像处理3.1 二维离散傅里叶变换(DFT) 3.1.1 二维连续傅里叶变换 二维连续函数 f (x, y)的傅里叶变换定义如下: 设 是独立变量 的函数,...的付里叶变换,并定义 为 的反变换。 ...
  • %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Inverse Short-Time Fourier Transform %% with MATLAB Implementation %% ...
  • 第一,把频谱进行反变换可以得到原函数,由此可以证明很多积分公式(这些积分公式都包含在笔记中了,但是推导全都省略了)。第二,傅里叶变换可以被用来求解一些微分和积分方程。在方程两边同时取傅里叶变换,由于.....
  • Matlab卷积与反傅里叶变换的问题

    千次阅读 2014-10-08 20:38:20
    为什么两个二维的矩阵的卷积结果却不等于他们傅里叶变换后乘积的傅里叶变换呢?理论上是相等的,用一维矩阵验证是相等的啊困惑?望高手赐教!谢谢! 二维的用conv2,fft2和iff2来做,conv和fft的区别是需要设置维...
  • 文章目录前言一、傅里叶变换的离散性与周期性二、MATLAB 实现快速傅里叶变换 FFT (DFT) 的计算三,FFT 频谱的对称性四,FFT 频谱的频率刻度五,频谱图的绘制(半谱图&全谱图)六 练习 绘制cos信号的频谱图半谱图...
  • 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即为...
  • 图像傅里叶变换MATLAB实现

    千次阅读 2021-01-17 18:23:09
    文章目录图像傅里叶变换的MATLAB实现图像的二维离散傅里叶变换傅里叶变换后平移变亮后进行傅里叶变换旋转后进行傅里叶变换添加高斯噪声傅里叶反变换 图像的二维离散傅里叶变换 图像的二维离散傅立叶变换,代码如下 %...
  • MATLAB内的傅里叶变换

    2016-03-26 18:42:49
    反傅里叶变换:ifft2 将频谱转换到中心使得输出能够对称 fftshift 逆变换为ifftshift() 进行傅里叶变换的过程: (1)对图像进行fft,在变换时为了防止重叠错误(wrapping error),应该要pd
  • 本文采用MATLAB软件编写程序,利用一维或二维的傅里叶变换函数,实现了对二维图像信息的傅里叶变换,通过程序对其频谱结果进行处理,利用傅里叶反变换函数,实现了对二维图像信息的压缩,进而展示了傅里叶变换与反变换在...
  • dft2d函数为对灰度图进行离散傅里叶变换和反变换 filter2d_freq为对灰度图进行频率域滤波 修改Runner函数中的图片路径然后运行即可
  • 傅里叶变换Fourier transform 1 傅里叶变化基本知识1.1 一维连续Fourier变换对函数f(x)进行傅里叶变换得到F(u)逆变换:从F(u)到f(x)进行反傅里叶变换一维连续函数f(x)的傅立叶变换F(u) 一般是虚数,可用复数形式表示...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 134
精华内容 53
关键字:

matlab傅里叶反变换

matlab 订阅