200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > matlab 快速傅里叶反变换函数(ifft)编写

matlab 快速傅里叶反变换函数(ifft)编写

时间:2020-02-14 20:54:50

相关推荐

matlab 快速傅里叶反变换函数(ifft)编写

原理参考:百度文库PPT

(欢迎指正)

matlab 编写快速傅里叶反变换函数(ifft)(横向读取数据进行变换)

matlab代码:

%快速傅里叶逆变换,不够2的整数幂的个数,末尾自动补齐0function 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;endendendend%变址运算,逆推回原来位置for line=1:m%循环行数j1 = 0;for i = 1 : N%循环个数if i < j1 + 1tmp = vector(line,j1 + 1);vector(line,j1 + 1) = vector(line,i);vector(line,i) =tmp;endk = N / 2;while k <= j1j1 = j1 - k;k = k / 2;endj1 = j1 + k;endendret_val =vector;function val=W(L,x)%旋转因子当层数为L,索引值为xval=exp(1j*2*pi*x/2^(L+1));endend

输入傅里叶变换后的结果进行反变换*

反变换结果截图

右边图像右下黑框是fft变换过程中补零部分

当然也可以去除黑边框:

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。