精华内容
下载资源
问答
  • MATLAB傅里叶变换程序

    2010-12-27 19:33:40
    介绍了基于MATLAB的仿真的傅里叶变换程序
  • matlab傅里叶变换程序

    2021-02-19 15:35:51
    clc clear fs=10000; % 采样频率>2倍的信号频率 N=256000; % 采样点数目(=2的幂次) n=0:N-1; % 构造采样点序列 t=n/fs; % 得到采样时间序列,t=nT=n/fs A=1sin(2pi300t);%载波 B=0.1sin(2pi15t);... % FFT

    clc
    clear
    fs=10000; % 采样频率>2倍的信号频率
    N=256000; % 采样点数目(=2的幂次)
    n=0:N-1; % 构造采样点序列
    t=n/fs; % 得到采样时间序列,t=nT=n/fs
    A=1sin(2pi300t);%载波
    B=0.1sin(2pi15t);%调制信号
    x=A+B; % 产生时域信号的样本值,向量
    % x=A.*(1+B); % 产生时域信号的样本值,向量
    Y=fft(x,N); % N点的DFT计算
    mag=abs(Y); % FFT的振幅
    phase=unwrap(angle(Y)); % FFT的相位
    figure
    plot(t,x)
    xlim([0,0.1])
    figure
    % 1. 以下绘制物理频谱图(即正频部分)
    fn=(0:N/2)fs/N; % 频率轴上的离散频率点,起始于0频(对应直流成分),终
    %于Nyquist频率fs/2,共N/2+1个频率点
    % subplot(2,2,1)% 将图形窗口分割为2×2的子窗口,并指定第1个子窗口为绘图区
    plot(fn,mag(1:N/2+1),‘b’) % 取出前N/2+1个振幅作图,即正频率分量
    xlim([0,400])
    figure
    plot(fn,20
    log10(mag(1:N/2+1)),‘b’)%对数谱,以显示幅值较小的频率
    xlabel(‘频率/Hz’);ylabel(‘振 幅’);
    title(‘图1: 物理(正频)幅频图’);grid on % 加网格线
    xlim([0,400])
    % % 2. 以下绘制全频率的幅频图
    % fn1=(0:N-1)*fs/N;
    % subplot(2,2,2) %指定第2个子窗口为绘图区
    % plot(fn1,mag);
    % xlabel(‘频率/Hz’);ylabel(‘振 幅’);
    % title(‘图2: 全频率的幅频图’); grid on
    % %3. 以下绘制正频部分的相频图
    % subplot(2,2,3) %指定第3个子窗口为绘图区
    % plot(fn,phase(1:N/2+1));
    % xlabel(‘频率/Hz’);ylabel(‘相 位’);title(‘图3: 相 频 图’);grid
    % %4. 以下移动零频点
    % Y1=fftshift(Y); % fftshift移动频率零点,并将Y的左右两部分交换
    % mag1=abs(Y1); % 重新计算振幅
    % fn2=fn1-fs/2; % 零点移动到fs/2处,故需重新标记频率轴
    % subplot(2,2,4); %指定第4个子窗口为绘图区,最终4幅图绘制在一张图上了
    % plot(fn2,mag1);
    % xlabel(‘频率/Hz’);ylabel(‘振 幅’);
    % title(‘图4: fftshift后的幅频图’);grid

    展开全文
  • 用于MATLAB 快速傅里叶变换
  • 傅里叶变换程序

    2019-01-24 21:40:00
    本人自行编制的MATLAB傅里叶变换程序,应用于各场合,具有普遍性
  • Matlab快速傅里叶变换程序(FFT)编写

    万次阅读 多人点赞 2018-10-29 23:57:39
    Matlab快速傅里叶变换程序(FFT)编写 (不利用Matlab内置fft) 最近在学习数字信号处理,正好到快速傅里叶变换,写一个基于基2FFT算法的傅里叶变换。利用原理:DIT-FFT(时域抽取法基2FFT)。 DIT-FFT: 设序列x(n)...

    Matlab快速傅里叶变换程序(FFT)编写

    (不利用Matlab内置fft)

    最近在学习数字信号处理,正好到快速傅里叶变换,写一个基于基2FFT算法的傅里叶变换。利用原理:DIT-FFT(时域抽取法基2FFT)。
    DIT-FFT:
    设序列x(n)的长度为N,且满足N=2^M,M为自然数。
    ①按n的奇偶把x(n)分解为两个N/2的子序列。
    ②对x(n)做DFT,经过化简可以得到
    X(k)=X1(k)+W^k;
    X(k+N/2)=X1(k)+W^kX2(k);
    k=0,1,…,N/2-1;
    由此得到一个蝶形运算符号:
    在这里插入图片描述
    ③这是DIT-FFT基本原理,按照N值的大小,还可进一步进行分解运算,可分解M次,将N点DFT分解为N个1点DFT和M级蝶形运算,而1点DFT就是时域序列本身。
    DFT与FFT运算量比较:
    N点DFT:复数乘法CM=NN
    复数加法CA=N
    (N-1)
    N点FFT: 复数乘法CM=MN/2
    复数加法CA=M
    N
    N=2^M
    代码:

    function H=ditfft2(xn,M)
    %DIT-FFT快速傅里叶变换程序
    %程序名称:ditfft
    %程序作者:grace_fight 2018/10/29
    
    b=length(xn);                %调整补零
    if(b<2^M)
        xn=[xn,zeros(1,(2^M)-b)];
    end
    b=length(xn);                %补零后xn长度
    A=zeros(1,b);                %xn转换数组
    N=2^M;                       %计算点数
    nxd=bin2dec(fliplr(dec2bin([1:N]-1,M)))+1;%倒序排列序号
    xn=xn(nxd);                               %倒序xn         
    for i=1:N                                 %N个1点DFT,xn本身,赋值到数组A
       A(i)=xn(i);
    end
    for L = 1:M                               %DIT-FFT变换,M级蝶形变换
        B = 2^(L-1);                          %两个输入数据距离
        for J = 0:B-1;                        %旋转因子处理
            P=2^(M-L)*J;
            for k=(J+1):2^L:N;                %本次蝶形运算跨越时间
                W=exp(-j*2*pi*P/N);           %对应旋转因子
                T=A(k)+A(k+B)*W;              %进行蝶形运算
                A(k+B)=A(k)-A(k+B)*W;
                A(k)=T;
            end
        end
    end
    H=A;                                      %输出H为A
    

    测试代码:

    %测试程序
    clear;                      %清屏
    clc;
    xn=[1 1 1 1];               %要转换的序列
    M=5;                        %转换级数
    B=fft(xn,32);               %matlab内置fft变换,用于对比
    subplot(2,1,1);             %内置fft变换图像
    [a1,b1]=size(B);
    o1=1:b1;                    %内置fft变换坐标
    stem(o1,abs(B),'.');        %绘图
    H=ditfft2(xn,M);            %手工编写ditfft2函数
    subplot(2,1,2);             %绘制手工编写的fft图像
    [a1,b2]=size(H);
    o2=1:b2;                    %ditfft2变换坐标
    stem(o2,abs(H),'.')         %绘图
    

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

    参考:《数字信号处理第四版》高西全 丁玉美

    展开全文
  • 小巧的傅里叶变换程序matlab,可分析两路信号,支持数据输出形式设置。
  • 傅里叶变换matlab程序

    2011-03-02 15:44:17
    实现二维傅里叶变换matlab程序,显示原函数和傅里叶变换的三维彩色立体图,
  • 傅里叶梅林相位相关法进行图像处理的各种matlab程序
  • 两种一般的方法:根据傅里叶变换的定义: ​​典型程序:t=0:1000;xt=sin(t).*exp(-0.02*t); %随时间变化的信号 (时间空间)subplot(2,1,1);plot(t,xt); %时间图N=length(xt); %傅里叶变换公式中的n,N和kk=0:N-1;n...

    d2a61ad76080150d9def7eec428f3fb3.png
    两种一般的方法:
    • 根据傅里叶变换的定义:

    fd32540c094865eab76d5e2c47b670de.png

    ​典型程序:

    t=0:1000;
    xt=sin(t).*exp(-0.02*t); %随时间变化的信号 (时间空间)
    subplot(2,1,1);
    plot(t,xt); %时间图
    N=length(xt); %傅里叶变换公式中的n,N和k
    k=0:N-1;
    n=0:N-1;
    xk=xt*exp(-1j*2*pi/N).^(n'*k); %傅里叶变换公式
    subplot(2,1,2);
    plot(n,xk); %傅里叶变换后的信号(频率空间)
    title('x(k)');

    • FFT命令实现

    典型程序:

    clear all
    f0 = 100;
    fs = 500;
    Ts = 1/fs;
    n=1:1:1000;
    N = length(n);
    y = sin(2*pi*f0*n*Ts);
    plot(n,y)
    y_fft=fft(y);
    P2_y_fft =abs(y_fft/N);
    P1_y_fft = P2_y_fft(1:N/2+1);
    P1_y_fft(2:end-1) = 2*P1_y_fft(2:end-1)
    f = fs*(0:N/2)/N;
    figure
    plot(f,P1_y_fft)
    xlabel('f (Hz)')
    参考资料:
    matlab关于fft的应用(一) - 你好,我是洪大帅~ - CSDN博客blog.csdn.net
    0dca332e3ddcbe7a9701ad9e2e91822b.png
    展开全文
  • 根据Ozaktas1996年的文章《Digital Computation of the Fractional Fourier Transform》编写的分数阶傅里叶变换程序
  • 程序是短时傅里叶变换matlab程序,短时傅里叶变换是信号分析的重要手段,在视频,图像,音频信号中有着非常重要的作用。
  • 快速傅里叶变换程序,后面有滤波程序,每一步有注释
  • 一、 设计任务描述 1.1设计题目 分裂基快速傅里叶变换程序设计及实现。1.2 设计要求 能够掌握分裂基快速傅里叶变换的原理和方法。 熟悉matlab环境的操作。 能够利用fft对信号进行时域与频域分析。二、设计...

    一、 设计任务描述 

    1.1设计题目 

          分裂基快速傅里叶变换程序设计及实现。

    1.2 设计要求

      能够掌握分裂基快速傅里叶变换的原理和方法。

      熟悉matlab环境的操作。

      能够利用fft对信号进行时域与频域分析。

    二、设计思路

    2.1、方法简介

    序列z(n)的离散傅立叶变换为

         ,0≤k≤N-1

        将X(k)按序号k的奇偶分成两组。当k为偶数时,进行基2频率抽取分解,X(k)可表示为

         ,0≤k≤N/2-1

    当k为奇数时,进行基4频率抽取分解,X(k)可表示为

     

    0≤k≤N/4-1

    由此可见,一个N点的DFT可以分解为一个N/2点的DFT和两个N/4点的DFT。这种分解既有基2的部分,又有基4的部分,因此称为分裂基分解。上面的N/2点DFT又可分解为一个N/4点的DFT和两个N/8点的DFT,而两个N/4点的DFT也分别可以分解为一个N/8点的DFT和两个N/1 6点的DFT。依此类推,直至分解到最后一级为止。这就是按频率抽取的分裂基快速傅立叶变换算法。

    分裂基快速算法是将基2和基4分解组合而成。在基2m类快速算法中,分裂基算法具有最步的运算量,且仍保留结构规则、原位计算等优点。

    2.2、计算方法

    N=2^m点的FFT共进行M级运算,每级有N/2个蝶形运算。同一级中,每个蝶形的两个输入数据只对计算本蝶形有用,而且每个蝶形的输入、输出数据结点又同在一条水平线上,这就意味着计算完一个蝶形后,所得输出数据立即存入原输入数据所占用的存储单元。这样经过M级运算后,原来存放输入序列数据的N个存储单元中便依次存放X(k)的N个值。这种利用同一存储单元存储蝶形计算输入、输出数据的方法称为原位计算。原位计算可节省大量内存,从而设备成本降低。

    三、编程思想

    本课程设计采用matlab方法实现基2FFT的算法。先从输入端(第1级)开始,逐级进行,共进行M级运算。在进行第L级运算时,依次求出B个不同的旋转因子,每求出一个旋转因子,就计算完它对应的所有蝶形。这样,就可用三重循环程序实现运算,程序框图如下:

    四、编程实现

    Fft函数

    function [A] = myfft(A,M,B,B2,P,P2,f,f2)
    t = 0:.001:.25;
    m=B*cos(2*pi*f*t+P)+B2*sin(2*pi*f2*t+P2);
    subplot(411);plot(m); title('原始信号');
    y = m + 2*randn(size(t));
    subplot(412);plot(y(1:50))
    title('时域信号');
    Pyy = y.*conj(y)/256;
    f = 1000/256*(0:127);
    subplot(413);plot(f,Pyy(1:128));
    title('频域信号');
    xlabel('频率(Hz)');
    subplot(414);plot(f(1:50),Pyy(1:50));
    title('幅度');
    xlabel('频率(Hz)');
    N=2^M;
    LH=N/2;
    J=LH;
    N1=N-2;
    for I=1:1:N1
    if I<J
    T=A(I+1);
    A(I+1)=A(J+1);
    A(J+1)=T;
    end
    K=LH;
    while J>=K
    J=J-K;
    K=K/2;
    end
    J=J+K;
    end
    for L=1:1:M
    B=2^(L-1);
    for J=0:B-1
    p=J*2^(M-L);
    for k=J:2^L:N-1
    T=A(k+1)+A(k+B+1)*exp(-i*2*pi*p/N);
    A(k+B+1)=A(k+1)-A(k+B+1)*exp(-i*2*pi*p/N); A(k+1)=T;
    end
    end
    end
    end

    测试函数:

    A=[0,1,2,3,4,5,6,7];
    n=0:M-1;
    xn=[m];
    Xk=myfft(A,3,1,3,pi/2,pi/11,50,100);
    plot(Xk);stem(n,abs(Xk),'.');axis([0,20,0,20]);ylabel('|Xk|');
    %subplot(415);plot(Xk);stem(n,abs(Xk),'.');axis([0,20,0,20]);ylabel('|Xk|'); title('原始信号');
    title('8点fft变换');

    五、总结

    快速傅里叶变换大大简化了运算量,并且算法具有迭代和分治的特点,特别适合计算机实现,使得用计算机对离散时间信号进行快速处理成为现实。配合采样定理和信号采样及重构等方法,使得快速傅里叶变换可以进一步推广到连续时间信号处理,大大提高了信号处理的效率和速度。在语音处理领域,傅里叶变换可以用于语音识别,音频分离,降噪等应用。在图像应用领域,快速傅立叶变换的物理意义是将图像的灰度分布函数变换为图像的频率分布函数,傅立叶逆变换是将图像的频率分布函数变换为灰度分布函数。而灰度分布函数即为灰度图的表达。快速傅里叶变换使得对图像可以用频域处理的方法来处理,对基于计算机的图像处理应用的可行性和实时性具有重大意义,是数字信号处理的基石。

    展开全文
  • 加窗傅里叶变换的演示 matlab程序 分别对加方窗和海明窗的信号做傅里叶变换 函数可以改变窗口的大小 对理解傅里叶变换和频谱非常有帮助
  • matlab fft变换程序

    2009-03-19 14:26:55
    matlab 傅里叶变换程序,可以读取图片进行FFT变化
  • 此压缩包含有稀疏傅里叶变换MATLAB程序,包括频谱重排,滤波等等,程序正确,本人正在使用
  • 时频分析 短时傅里叶变换 Matlab程序 好用 地震信号处理
  • 短时傅里叶变换 matlab程序,供大家参考学习
  • 短时傅里叶变换matlab程序

    热门讨论 2012-06-18 11:41:34
    短时傅里叶变换三维时频matlab代码。
  • 参数可自由选择,可以根据自己需要选择步长、窗函数种类从而实现短时傅里叶变换。 参数可自由选择,可以根据自己需要选择步长、窗函数种类从而实现短时傅里叶变换
  • 图像处理论文,非常专业第29卷第5期运城学院学报JournalofYunchengUniversityVol.29No.52011年10月Oct.2011MATLAB在...利用MATLAB强大的信号处理功结合傅里叶变换、傅里叶级数、卷积定理的内容,通过MATLAB程序...
  • 离散傅里叶变化可以将一个序列展开成不同频率的正弦信号的和,matlab中采用fft函数即可实现...%%离散时间傅里叶变换-正弦信号 %%------------------------------------------------- clc;clear all;close all; %%-----
  • 短时傅里叶变换matlab程序 function [Spec,Freq]=STFT(Sig,nLevel,WinLen,SampFreq) %计算离散信号的短时傅里叶变换 % Sig 待分析信号 % nLevel 频率轴长度划分默认值512 % WinLen 汉宁窗长度默认值 64 % SampFreq ...
  • 没有调用matlab自带的fft函数,而是自己编写的二维快速傅里叶变换fft程序 matlab平台 没有调用matlab自带的fft函数,而是自己编写的二维快速傅里叶变换fft程序 matlab平台

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 362
精华内容 144
关键字:

matlab傅里叶变换程序

matlab 订阅