精华内容
下载资源
问答
  • 差点被下标搞晕了,matlab下标从1开始,而X(k)和r下标从0开始。 http://www.ilovematlab.cn/forum.php?mod=viewthread&tid=545743&page=1&extra=#pid3399877 理论基础: 实现代码: clear; clc...

    差点被下标搞晕了,matlab下标从1开始,而X(k)和r下标从0开始。

    http://www.ilovematlab.cn/forum.php?mod=viewthread&tid=545743&page=1&extra=#pid3399877

    理论基础:

    实现代码:

    clear;
    clc;
    close all;
    N = 8;
    xn = [ 4 3 2 6 7 8 9 0 ];
    
    G = zeros(1,N/2);
    H = zeros(1,N/2);
    
    for i = 0: N/2 - 1
        k = i+1;
        for r = 0 : N/2 - 1
            G(k) = G(k) + xn(2*r+1)*w_nk( N / 2 ,r*i);
            H(k) = H(k) + xn(2*r+2)*w_nk( N / 2 ,r*i);
        end
    end
    
    X = zeros(1,N);
    for i = 0:N/2 -1
        k = i+1;
        X(k)     = G(k) + w_nk(N,i)*H(k);
        X(k+N/2) = G(k) - w_nk(N,i)*H(k);
    end
    
    Xk = fft(xn,8);
    
    f = 0:7;
    figure(1);
    subplot(2,2,1);
    stem(f,abs(X));
    title('自编FFT-幅度谱');
    subplot(2,2,2);
    stem(f,abs(Xk));
    title('库FFT-幅度谱');
    subplot(2,2,3);
    stem(f,angle(X));
    title('自编FFT-相位谱');
    subplot(2,2,4);
    stem(f,angle(Xk));
    title('库FFT-相位谱');
    

    验证结果:

    转载于:https://www.cnblogs.com/alimy/p/9052368.html

    展开全文
  • 自编FFT、IFFT函数---基于MATLAB

    千次阅读 2019-10-11 15:17:38
    FFT函数,纯属个人学习兴趣,存在的问题,希望广大学者指正。 function Y = myfft(X,N) %输入参数 X:输入信号 % N: FFT的采样点数 %输出参数 Y:FFT结果,即频域信息 %判断信号的长度 if X<N %若小于FFT的采样...

    FFT函数,纯属个人学习兴趣,存在的问题,希望广大学者指正。

    function Y = myfft(X,N)
    %输入参数  X:输入信号
    %          N: FFT的采样点数
    %输出参数  Y:FFT结果,即频域信息
    
    %判断信号的长度
    if X<N   %若小于FFT的采样点数,则在末尾补0
        X = [X,zeros(1,N-length(X))];
    else     %否则,截取前N个数作为FFT的输入
        X = X(1:N);
    end
    
    Y = zeros(1,N);  %初始化FFT结果的存储变量
    for k = 1:N
        for n = 1:N
            y = X(n)*exp(-1i*2*pi*(k-1)*(n-1)/N);  %进行FFT转换
            Y(k) = Y(k)+y;    %将每次结果累加,得到最终的结果
        end
    end
    

    对应于上述FFT函数的IFFT函数

    function X = myifft(Y,N)
    %输入参数  Y:FFT结果,即频域信息
    %          N: FFT的采样点数
    %输出参数  X:IFFT后对应的时域信息
    
    X = zeros(1,N);  %初始化IFFT结果的存储变量
    for n = 1:N
        for k = 1:N
            x = real(1/N*Y(n)*exp(1i*2*pi*(k-1)*(n-1)/N));  %进行IFFT转换
            X(k) = X(k)+x;    %将每次结果累加,得到最终的结果
        end
    end
    

    验证:

    clc
    clear 
    
    % 导入信号
    load('EEG_signal_test.mat');  
    signal = EEG_signal_test;  %原始信号
    Fs = 160;    %采样频率
    N = 256;  %FFT的采样点数
    
    % 信号预处理
    signal = signal(1:N)';
    signal_nodc = signal-mean(signal);% 通过减去平均值来消除直流分量
    
    %FFT变换
    EEG_FFT = fft(signal_nodc,N);
    EEG_FFT_Abs = abs(EEG_FFT);
    EEG_myFFT = myfft(signal_nodc,N);
    EEG_myFFT_Abs = abs(EEG_myFFT);
    EEG_myFFT_Abs = EEG_myFFT_Abs';
    
    %IFFT变换
    EEG_IFFT = ifft(EEG_FFT,N);
    EEG_myIFFT = myifft(EEG_myFFT,N);
    EEG_myIFFT = EEG_myIFFT';
    
    plot(signal);  hold on;  plot(EEG_IFFT)
    

    验证结果截图
    在这里插入图片描述
    在这里插入图片描述![在这里插入图片描述](https://img-blog.csdnimg.cn/2019101115365246.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hxXzUyMA==,size_16,color_FFFFFF,t_7在这里插入图片描述

    展开全文
  • % fft function; % % function y=fft_new(x; M=length(x; n=log2(M; K=M/2; even_no=zeros(1,K; odd_no=zeros(1,K; f_valve=zeros(1,M; for i=0:K-1 for x1=0:K-1 even_no(i+1)=even_no(i+1)+( x(2*x1+1*exp(-j*2*p
  • % fft function; % % function y=fft_new(x; M=length(x; n=log2(M; K=M/2; even_no=zeros(1,K; odd_no=zeros(1,K; f_valve=zeros(1,M; for i=0:K-1 for x1=0:K-1 even_no(i+1)=even_no(i+1)+( x(2*x1+1*exp(-j*2*pi
  • 这是某所学校数字信号处理的大作业,主要是要求自编FFTmatlab程序去实现二维的FFT,亲测可用
  • 欢迎加入技术交流QQ群(2000人):电力电子技术与新能源905724684高可靠新能源行业顶尖媒体在这里有电力电子、新能源干货、行业发展趋势分析、最新产品介绍、众多技术达人与您分享经验,欢迎关注我们,搜索微信...

    29d05735b215fac507e9458383aadd66.gif

    欢迎加入技术交流QQ群(2000人):电力电子技术与新能源 905724684

    高可靠新能源行业顶尖自媒体

    在这里有电力电子、新能源干货、行业发展趋势分析、最新产品介绍、众多技术达人与您分享经验,欢迎关注我们,搜索微信公众号:电力电子技术与新能源(Micro_Grid),与中国新能源行业共成长!

    ed710b845ca3b0400a5f294023d3db48.png

    电力电子技术与新能源论坛

    www.21micro-grid.com

    小编推荐值得一看的书单

    #ifndef ZX_FFT_H_

    #define ZX_FFT_H_

    typedef float FFT_TYPE;

    #ifndef PI

    #define PI (3.14159265f)

    #endif

    typedef struct complex_st {

    FFT_TYPE real;

    FFT_TYPE img;

    } complex;

    int fft(complex *x, int N);

    int ifft(complex *x, int N);

    void zx_fft(void);

    #endif /* ZX_FFT_H_ */

    /*

    * zx_fft.c

    *

    * Implementation of Fast Fourier Transform(FFT)

    * and reversal Fast Fourier Transform(IFFT)

    *

    * Created on: 2013-8-5

    * Author: monkeyzx

    */

    #include "zx_fft.h"

    #include

    #include

    /*

    * Bit Reverse

    * === Input ===

    * x : complex numbers

    * n : nodes of FFT. @N should be power of 2, that is 2^(*)

    * l : count by bit of binary format, @l=CEIL{log2(n)}

    * === Output ===

    * r : results after reversed.

    * Note: I use a local variable @temp that result @r can be set

    * to @x and won't overlap.

    */

    static void BitReverse(complex *x, complex *r, int n, int l)

    {

    int i = 0;

    int j = 0;

    short stk = 0;

    static complex *temp = 0;

    temp = (complex *)malloc(sizeof(complex) * n);

    if (!temp) {

    return;

    }

    for(i=0; i

    stk = 0;

    j = 0;

    do {

    stk |= (i>>(j++)) & 0x01;

    if(j

    {

    stk <<= 1;

    }

    }while(j

    if(stk < n) { /* 满足倒位序输出 */

    temp[stk] = x[i];

    }

    }

    /* copy @temp to @r */

    for (i=0; i

    r[i] = temp[i];

    }

    free(temp);

    }

    /*

    * FFT Algorithm

    * === Inputs ===

    * x : complex numbers

    * N : nodes of FFT. @N should be power of 2, that is 2^(*)

    * === Output ===

    * the @x contains the result of FFT algorithm, so the original data

    * in @x is destroyed, please store them before using FFT.

    */

    int fft(complex *x, int N)

    {

    int i,j,l,ip;

    static int M = 0;

    static int le,le2;

    static FFT_TYPE sR,sI,tR,tI,uR,uI;

    M = (int)(log(N) / log(2));

    /*

    * bit reversal sorting

    */

    BitReverse(x,x,N,M);

    /*

    * For Loops

    */

    for (l=1; l<=M; l++) { /* loop for ceil{log2(N)} */

    le = (int)pow(2,l);

    le2 = (int)(le / 2);

    uR = 1;

    uI = 0;

    sR = cos(PI / le2);

    sI = -sin(PI / le2);

    for (j=1; j<=le2; j++) { /* loop for each sub DFT */

    //jm1 = j - 1;

    for (i=j-1; i<=N-1; i+=le) { /* loop for each butterfly */

    ip = i + le2;

    tR = x[ip].real * uR - x[ip].img * uI;

    tI = x[ip].real * uI + x[ip].img * uR;

    x[ip].real = x[i].real - tR;

    x[ip].img = x[i].img - tI;

    x[i].real += tR;

    x[i].img += tI;

    } /* Next i */

    tR = uR;

    uR = tR * sR - uI * sI;

    uI = tR * sI + uI *sR;

    } /* Next j */

    } /* Next l */

    return 0;

    }

    /*

    * Inverse FFT Algorithm

    * === Inputs ===

    * x : complex numbers

    * N : nodes of FFT. @N should be power of 2, that is 2^(*)

    * === Output ===

    * the @x contains the result of FFT algorithm, so the original data

    * in @x is destroyed, please store them before using FFT.

    */

    int ifft(complex *x, int N)

    {

    int k = 0;

    for (k=0; k<=N-1; k++) {

    x[k].img = -x[k].img;

    }

    fft(x, N); /* using FFT */

    for (k=0; k<=N-1; k++) {

    x[k].real = x[k].real / N;

    x[k].img = -x[k].img / N;

    }

    return 0;

    }

    /*

    * Code below is an example of using FFT and IFFT.

    */

    #define SAMPLE_NODES (128)

    complex x[SAMPLE_NODES];

    int INPUT[SAMPLE_NODES];

    int OUTPUT[SAMPLE_NODES];

    static void MakeInput()

    {

    int i;

    for ( i=0;i

    {

    x[i].real = sin(PI*2*i/SAMPLE_NODES);

    x[i].img = 0.0f;

    INPUT[i]=sin(PI*2*i/SAMPLE_NODES)*1024;

    }

    }

    static void MakeOutput()

    {

    int i;

    for ( i=0;i

    {

    OUTPUT[i] = sqrt(x[i].real*x[i].real + x[i].img*x[i].img)*1024;

    }

    }

    void zx_fft(void)

    {

    MakeInput();

    fft(x,128);

    MakeOutput();

    ifft(x,128);

    MakeOutput();

    }

    程序在TMS320C6713上实验,主函数中调用zx_fft()函数即可。

    FFT的采样点数为128,输入信号的实数域为正弦信号,虚数域为0,数据精度定义FFT_TYPE为float类型,MakeInput和MakeOutput函数分别用于产生输入数据INPUT和输出数据OUTPUT的函数,便于使用CCS 的Graph功能绘制波形图。这里调试时使用CCS v5中的Tools -> Graph功能得到下面的波形图(怎么用自己琢磨,不会的使用CCS 的Help)。

    输入波形

    9aa0f56c90fd0a4341561dab5b1685cf.png

    输入信号的频域幅值表示

    193d1d34d79e4743c2413b65a928240e.png

    FFT运算结果

    9823ed62f86461566e02a36f44744d2b.png

    对FFT运算结果逆变换(IFFT)

    f8b51be1ed5796e240766442ab548aec.png

    如何检验运算结果是否正确呢?有几种方法:

    (1)使用matlab验证,下面为相同情况的matlab图形验证代码

    SAMPLE_NODES = 128;

    i = 1:SAMPLE_NODES;

    x = sin(pi*2*i / SAMPLE_NODES);

    subplot(2,2,1); plot(x);title('Inputs');

    axis([0 128 -1 1]);

    y = fft(x, SAMPLE_NODES);

    subplot(2,2,2); plot(abs(y));title('FFT');

    axis([0 128 0 80]);

    z = ifft(y, SAMPLE_NODES);

    subplot(2,2,3); plot(abs(z));title('IFFT');

    axis([0 128 0 1]);

    说明:本文来源网络电力电子变流器中观点仅供分享交流,不代表本公众号立场,转载请注明出处,如涉及版权等问题,请您告知,我们将及时处理。

    - END -

    合作请联系

    微信号(QQ号)1768359031

    推荐阅读点击标题阅读

    太阳能微型逆变器

    LLC的原理与应用

    半桥LLC论述—0N

    中兴电路基础培训

    艾默生器件应力降额总规范

    中兴设计规范与指南-PCB接地设计

    原理图设计规范126条checklist

    原理图设计规范checklist(2)

    PCB设计Checklist

    如何控制漏电流危害-光伏逆变器黑科技

     多图拆机评测-打开机箱,看红色固德威“芯”

    看完有收获?请分享给更多人

    限于篇幅,已做删减,获取原文,加小编微信号(QQ号)1768359031,文章收集整理于网络,如有侵权,请联系小编删除

    公告:

    小编对电力电子技术与新能源及微电网的市场发展很看好,对其关键技术很感兴趣,如有技术问题,欢迎加小编微信号(QQ号)1768359031,共同讨论。另,本公众号也有微信群,需要邀请进群,如有需要,可加小编微信号,谢谢!

    欢迎大家加入技术交流QQ群:电力电子技术与新能源 905724684

    电力电子技术:光伏并网逆变器(PV建模,MPPT,并网控制,LCL滤波,孤岛效应),光伏离网,光伏储能,风电变流器(双馈、直驱),双向变流器PCS,新能源汽车,充电桩,车载电源,数字电源,双向DCDC(LLC,移相全桥,DAB),储能(锂电池、超级电容),低电压穿越(LVRT),高电压穿越,虚拟同步发电机,多智能体,电解水,燃料电池,能量管理系统(直流微网、交流微网)以及APF,SVG ,DVR,UPQC等谐波治理和无功补偿装置等。

    PSCAD/MATLABsimulink/Saber/PSPICE/PSIM——软件仿真+DSP+(TI)TMS320F2812,F28335,F28377,(Microchip)dsPIC30F3011,FPGA,ARM,STM32F334——硬件实物。

    欢迎技术人员加入,多多交流,共同进步!打广告可以,要么有创意,要么有红包,谢谢。。。。。

    更多精彩点下方“阅读原文”!

            快来“在看”一下吧!4f603c85da77d927e017615927998460.gif

    展开全文
  • FFTMATLAB实现

    千次阅读 2018-11-30 20:10:09
    很荣幸能够加入到CSDN的大...在学习了数字信号处理的课程后,想自己试着编一编FFT的程序。 代码实现及注释 function y = testfft(x) %FFT算法 %自己按照FFT定义编写,输入行向量x m = nextpow2(length(x));%求x长度...

    很荣幸能够加入到CSDN的大家庭,在之前做项目中在CSDN中学习到了很多,之后自己也要去试着把自己做的项目心得或代码放在这里作为记录,如果能帮助到大家就更好啦!
    在学习了数字信号处理的课程后,想自己试着编一编FFT的程序。

    代码实现及注释

    function y = testfft(x)
    %FFT算法
    %自己按照FFT定义编写,输入行向量x
    m = nextpow2(length(x));%求x长度对应的2的最低次幂
    N = 2^m;
    if(length(x) < N)
    x = [x,zeros(1,length(x))];%FFT算法补零
    end
    change = bin2dec(fliplr(dec2bin([1:N]-1,m))) + 1;%求1:2^m数列的倒序
    y = x(change);
    for s = 1:m %m次基2分解,对每次分解做DFT运算
    Nr = 2^s; %每个蝶形中的行号差
    u = 1; %旋转因子,初始为WN^0等于1
    WN = exp(-(1i)2pi/Nr);%分解的基本DFT因子
    for j = 1:Nr/2
    for k = j:Nr:N
    kp = k + Nr/2;
    g = y(kp) * u;
    y(kp) = y(k) - g;
    y(k) = y(k) + g;
    end
    u = u * WN;
    end
    end
    end

    比较

    在matlab中测试原有fft()函数和自己编写的testfft()函数对相同向量的运行时间,可以看出,原有的用机器语言编写的FFT程序运行速度快。
    k = 1:2^10;
    x = 0.998.^k;
    tic,X = fft(x);toc
    tic,X = testfft(x);toc
    1024点向量运行时间比较

    应用

    在matlab中,有已经完成的FFT函数,并且运算速度最快,但是可以把程序改为C/C++语言,可能会在以后的项目中用到。

    展开全文
  • 该函数不考虑FFT的采样点数小于信号的采样频率的情况,即N<Fs。 function [Time_domain, Freq_domain] = EEG_decoding(signal, Fs, N) % % 输入 signal:待解码原始信号 % % Fs: 信号的采样频率 % % ...
  • 这是一个我自己用matlab编的二维傅里叶变换程序,和fft2结果几乎一样,希望对大家有用
  • 2、语音信号的频谱分析在Matlab中,可以利用函数fft对信号进行快速傅立叶变换,得到信号的频谱特性,要求学生首先画出语音信号的时域波形,然后对语音信号进行频谱分析。 3、设计数字滤波器和画出其频率响应给出各...
  • 二维傅里叶变换的矩阵表示

    千次阅读 2020-03-30 23:25:29
    二维傅里叶变换的矩阵表示二维傅里叶变换公式二维傅里叶矩阵公式表达1....说明: 做完了图像处理的实验报告,老师要求自己二维傅里叶变换的算法,故不能用 Matlab 内置的 fft2 函数。循环求解会...
  • 自己FFT速度太慢,不会优化。MATLAB吧上的大神说有开源的fftw可以用,而且MATLAB也是用的这个,下载地址:http://www.fftw.org/install/windows.html 目前最新是fftw-3.3.4-dll32 之前网上很多方法编译,...
  • 帧化信号加窗后逐帧进行FFT。这几乎是语音信号处理的“必须流程”。以前都需要循环实现。近日发现一个MATLAB函数,一句话就能实现,惊叹不已。这里推荐buffer语句。细致说明可用帮助命令调出研究。这里介绍几种...
  • a) 自编并调试实验程序,并且,给实验程序加注释; b) 按照实验内容完成笔算结果; c) 验证计算程序的正确性,记录实验结果。 d) 至少要求一个除参考实例以外的实验结果,在实验报告中,要描述清楚实验结果对应的...
  • a) 自编并调试实验程序,并且,给实验程序加注释; b) 按照实验内容完成笔算结果; c) 验证计算程序的正确性,记录实验结果。 d) 至少要求一个除参考实例以外的实验结果,在实验报告中,要描述清楚实验结果对应的...
  • a) 自编并调试实验程序,并且,给实验程序加注释; b) 按照实验内容完成笔算结果; c) 验证计算程序的正确性,记录实验结果。 d) 至少要求一个除参考实例以外的实验结果,在实验报告中,要描述清楚实验结果对应的...
  • a) 自编并调试实验程序,并且,给实验程序加注释; b) 按照实验内容完成笔算结果; c) 验证计算程序的正确性,记录实验结果。 d) 至少要求一个除参考实例以外的实验结果,在实验报告中,要描述清楚实验结果对应的...
  • a) 自编并调试实验程序,并且,给实验程序加注释; b) 按照实验内容完成笔算结果; c) 验证计算程序的正确性,记录实验结果。 d) 至少要求一个除参考实例以外的实验结果,在实验报告中,要描述清楚实验结果对应的...
  • 若干源程序资料12.rar

    热门讨论 2012-06-11 22:11:26
    2012-06-11 21:44 2,279 C语言一个程序完成64位数据(无符号)的加法,减法运算.txt 2012-06-11 21:43 1,480,155 Direct3D加载3d文件.rar 2012-06-11 21:29 22,102 DSP编程一周通.rar 2012-06-11 21:04 837,926 ...
  • LSHBOX:局部敏感算法(LSH)的C++工具箱,提供了好几种普遍的LSH算法,也可以支持Python和MATLAB。 PGM-index:能够快速查找、前导、范围搜索和更新数以亿计项数组的数据结构,其跟传统索引相比,使用梯度的顺序而...

空空如也

空空如也

1
收藏数 20
精华内容 8
关键字:

matlab自编fft

matlab 订阅