dit和dif码位倒读法matlab,DIT和DIF的基2FFT算法 | 学步园

本文探讨了如何通过DIT和DIF快速傅立叶变换算法的实现,涉及倒位序操作技巧,包括循环和非循环方法,并重点讲解了FFT中关键循环结构,以及如何处理复数转置问题。作者分享了针对不同输入排列的两种算法优化策略,旨在简化编程并降低硬件成本。
摘要由CSDN通过智能技术生成

根据课本上分析的DIT和DIF的步骤以及特点,写了两个DIF和DIT的基2fft

DIT和DIF,为了方便编程,对于前者将输入按倒位序重新排列,输出几位自然顺序排列;后者的话,输入为自然顺序,输出为倒位序。

难点就是倒位序的算法,以及FFT的循环算法。

下面是最简单的序列长度为2的整数幂

1.倒位序算法,两者都是通用的。

(1)折断一半再拼上,再折断一半再拼上,知道列向量变成行向量

1354957289_6026.png

这就反应了倒位序的实质。

我只能想到用循环:

x=[1:8]';

L=length(x);

for i=1:1:log2(L)

L=L/2;

y=mat2cell(x,[L,L]);

y=reshape(y,1,2);

x=cell2mat(y);

end

询问了大牛,不用循环,直接用matlab的函数有:

第一种方法:

N = 3;

a = (1:8)';

y = permute(reshape(a,2*ones(1,N)),N:-1:1);

y(:).'

第二种方法:

N=4;

p(1:2^N,N:-1:1)=dec2bin(0:(2^N-1));

re=bin2dec(char(p))+1;

re

第二种方法就是说,每一次折断一半再拼上,就想等于下标数循环右移

即000=>000,001=>100,010=>010,011=>101....类似这样。

(2)至于循环,就是利用相互之间的关系。

p与第几级与k之间的关系,书上说,考虑到硬件的设备成本问题,发现每一级每两个相互乘积求和的下标与其他两者无关,故不需要在引进其他的硬件设备。

x(k)=x(k)+x(k+b)e^(-j*2*π/N*p);

x(k+b)=x(k)-x(k+b)e^(-j*2*π/N*p);

在编程的时候注意x(k)需要重新赋给其他字母,不然会引起混淆错误,即

mid=x(k)

x(k)=mid+x(k+b)e^(-j*2*π/N*p);

x(k+b)=mid-x(k+b)e^(-j*2*π/N*p)

上述三句语句就是核心,其他的循环无非就是找各种k,p,n等等参数的关系!

(3)最后强调下,一直调了好久的问题,复数和实数的转置(复数转置不可用x‘,一定要用x.')切记!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值