IFFT 的实现

前些天给出了FFT的实现,如今给出IFFT(inverse FFT)的实现

基于IFFT 算法。对FFT的核心程序稍作改动就可以 : )

%%***************************************************************************************
% code writer : EOF
% code date : 2014.09.17
% e-mail : jasonleaster@gmail.com
% code file : IFFT_EOF.m
% Version : 1.0
%
% code purpose :
%
% It's time to finish my demo for DFT. I would like to share my code with
% someone who is interesting in DSP. If there is something wrong with my code,
% please touche me by e-mail. Thank you!
%
%%*************************************************************************************** clear all; %*************************************************
% The number of all the signal that our sensor got
%*************************************************
TotalSample = 8; % We assume that the preiod of the signal we generated is 'circle';
circle = TotalSample/2; %**************************************************************
% This varible is used for recording the signal which
% were processed by inverse-DFT in time domain
%**************************************************************
SignalInT = zeros(TotalSample,1); SignalInT_reversed = zeros(TotalSample,1);
%This varible is used for recording the signal which were processed by inverse-DFT in time domain OutPutSignal = zeros(TotalSample,1); OriginalSignal = zeros(TotalSample,1);
%This varible is used for recording the original signal that we got. %% initialize a square wave
for SampleNumber = -(TotalSample/2):(TotalSample/2)-1 if (mod(abs(SampleNumber),circle) < (circle/2))&&(SampleNumber>0) OriginalSignal((TotalSample/2)+1+SampleNumber) = 5; elseif (mod(abs(SampleNumber),circle) >= (circle/2))&&(SampleNumber>0) OriginalSignal((TotalSample/2)+1+SampleNumber) = 0; elseif (mod(abs(SampleNumber),circle) < (circle/2))&&(SampleNumber<0) OriginalSignal((TotalSample/2)+1+SampleNumber) = 0; elseif (mod(abs(SampleNumber),circle) >= (circle/2))&&(SampleNumber<0) OriginalSignal((TotalSample/2)+1+SampleNumber) = 5;
end
end InPutSignal = fft(OriginalSignal); % for testing TotalSample = size(InPutSignal,1); OutPutSignal_to_time = zeros(TotalSample,1); tmp = TotalSample - 1; %%***********************************************************************
% @Bits : describe how many bits should be used to make up the TotalSample
%%***********************************************************************
Bits = 0; while tmp > 0 %% floor (X) Return the largest integer not greater than X.
tmp = floor(tmp/2); Bits = Bits + 1;
end %*******************************************************************
% | | | |
% input X(n) | layer 3 |layer 2 |layer 1 | x(n) output
% | | | |
%
%
% @layyer : the number of layyer
% @SampleNumber: the start number of point which
% is going to do butter-fly operation.
% @pre_half : the pre_half point of current butter-fly
%***********************************************************************
for layyer = Bits:-1:1 for SampleNumber = 1 : 2^(layyer) : TotalSample for pre_half = SampleNumber:(SampleNumber+2^(layyer-1) -1) r = -get_r_in_Wn(pre_half-1,layyer,TotalSample,Bits); W_rN = exp(-2*pi*j*(r)/TotalSample) ; OutPutSignal_to_time(pre_half) = ...
0.5*(InPutSignal(pre_half) + ...
InPutSignal(pre_half + 2^(layyer-1))); OutPutSignal_to_time(pre_half + 2^(layyer-1)) = ...
0.5*W_rN *(InPutSignal(pre_half) - ...
InPutSignal(pre_half + 2^(layyer-1))); end
end InPutSignal = OutPutSignal_to_time;
end %******************************************
% Reverse the bits of output number
%******************************************
for SampleNumber = 1 : TotalSample ret = bit_reverse(SampleNumber - 1,Bits); OutPutSignal_to_time(SampleNumber) = InPutSignal(ret+1);
end

对照原始时间领域的输入信号和最后IFFT的输出信号,一致。于是IFFT实现成功

以后给出对应版本号的C 语言实现

wait for update : )

IFFT 的实现的更多相关文章

  1. 用于ARM上的FFT与IFFT源代码(C语言,不依赖特定平台)(转)

    源:用于ARM上的FFT与IFFT源代码(C语言,不依赖特定平台) 代码在2011年全国电子大赛结束后(2011年9月3日)发布,多个版本,注释详细. /*********************** ...

  2. 基2时域抽取FFT、IFFT的C++实现代码,另附DFT与IDFT的原始实现--转1

    介绍网络上的原理介绍非常丰富,具体请自行搜索网络资源. 本算法依靠FFT流图进行布置. 算法 ##进行完所有的原理推导后,我们可以得到如下的16点FFT流图: 通过上图可以看出整个流图输入序列的顺序已 ...

  3. 实测—fft IP核使用(包括ifft的配置使用)

    Vivado xilinx fft9.0 使用笔记: ****注 仿真实测1024点的转换需要经过1148个时钟周期才能得到转换结果: 模块配置信号含义请参考pg109文档手册(写的贼烂会看晕),不详 ...

  4. 用于ARM上的FFT与IFFT源代码-C语言

    /********************************************************************************* 程序名称:快速傅里叶变换(FFT) ...

  5. 基于C++任意点数的FFT/IFFT(时域和频域)实现

    函数说明:更改主函数体中的N和length(=log2(N))既可以实现任意点数(2的幂次)的FFT/ IFFT的实现,fft函数中flag标志位控制是正变换还是逆变换. 1.复数操作类      定 ...

  6. 二维FFT,IFFT,c语言实现

    学习DIP第6天 完整内容迁移至http://www.face2ai.com/DIP-2-4-二维FFT-IFFT-c语言实现/ http://www.tony4ai.com/DIP-2-4-二维FF ...

  7. 《DSP using MATLAB》示例Example5.23

    代码: conv_time = zeros(1,150); fft_time = zeros(1, 150); % % Nmax = 2048; for L = 1:150 tc = 0; tf = ...

  8. 用MATLAB对信号做频谱分析

    1.首先学习下傅里叶变换的东西.学高数的时候老师只是将傅里叶变换简单的说了下,并没有深入的讲解.而现在看来,傅里叶变换似乎是信号处理的方面的重点只是呢,现在就先学习学习傅里叶变换吧. 上面这幅图在知乎 ...

  9. Code[VS] 3123 高精度练习之超大整数乘法

    FFT 做 高精度乘法 #include <bits/stdc++.h> ); struct complex { double a, b; inline complex( , ) { a ...

随机推荐

  1. vue基础---Class 与 Style 绑定

    [一]绑定HTML Class (1)对象语法 ①普通绑定class <div id="area" v-bind:class="className"> ...

  2. Java运算符法则

    JAVA运算符法则 运算符是一种特殊的符号,用于表示数据的运算,赋值和比较等: 算术运算符 正号+,负号-,加+,减-,乘*,除/,余或取模%,自增++,自减--,字符串相加+ 正号负号运算符代表运算 ...

  3. CentOS下安装微软雅黑字体

    CentOS下安装微软雅黑字体   微软雅黑下载地址:http://download.csdn.net/detail/u012547633/9796219 1.先从你本机 C:\Windows\Fon ...

  4. Flask项目中整合各组件

    一.介绍 主要介绍flask_sqlalchemy.flask_script.flask_migrate这三个组件该如何整合到flask项目中,以及如何使用. # 安装组件 pip3 install ...

  5. keep

    简介 什么是keepalived呢?keepalived是实现高可用的一种轻量级的技术手段,主要用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生.之所以说keepa ...

  6. docker-ce安装官翻

    参考http://www.cnblogs.com/maple42/p/5868846.htmlhttp://blog.csdn.net/lizehua123/article/details/50601 ...

  7. 1002 A+B for Polynomials (PAT (Advanced Level) Practice)

    This time, you are supposed to find A+B where A and B are two polynomials. Input Specification: Each ...

  8. linux tload-显示系统负载状况

    推荐:更多linux 性能监测与优化 关注:linux命令大全 tload命令以图形化的方式输出当前系统的平均负载到指定的终端.假设不给予终端机编号,则会在执行tload指令的终端机显示负载情形. 语 ...

  9. ubuntu下手动配置apache2.4.12

    (apache2也可以使用 sudo apt-get install apache2来安装,下面来讲解下如何手动安装配置apache2) 在安装apache2之前,先要安装apache2的依赖项,ap ...

  10. 【13】AngularJS 模块

    AngularJS 模块 模块定义了一个应用程序.(魔芋:也就是说一个ng-app代表一个应用程序,也就是一个模块,module) 模块是应用程序中不同部分的容器. 模块是应用控制器的容器. 控制器通 ...