
循环次数的关系
stages = log2(PointNum)
i 从 0到stages – 1 !
j 从 0 到 其实就是
k 从0 到
旋转因子W的选择:
因为根据8点DIT-FFT图,从第一阶到最后一阶,可以总结出一个规律:
都是 N是每组蝶形数据个个数,比如第一阶每组有2个元素,N就是2,第二阶每组4个元素,N就是4等。然后x往往都是从0开始到N/2 –1;
根据旋转因子的性质,其实可以有每阶段每组都是:
蝶形运算设计:
根据信号流图,得出以下算式:
完成了蝶形运算!
全部的matlab程序有:
PointNum = 512;
PointBitNum = 9;
fs = 1024*2;
t = 0:1:PointNum - 1;
%for u = 1:1:PointNum;
sampletab = cos(2*pi*543*t/fs) + cos(2*pi*100*t/fs) + 0.2 +cos(2*pi*857*t/fs) + cos(2*pi*222*t/fs);
%end
zeros(1,PointNum);
sampletab1 = sampletab;
index = 0;
for i = 1:PointNum
k = i - 1
index = bitreverse(PointBitNum,i - 1)
sampletab(i) = sampletab1(index + 1);
end
%sampletab1

%sampletab
REX = sampletab;
IMX = zeros(1,PointNum);
i = 0; �T Loop for Log2N stages
j = 0; �T loop for leach sub-DFT
k = 0; �T Loop for each butterfly
stages = log2(PointNum);
for i = 0 : stages - 1
lenNum = 0;
for j = 0 : 2^(stages - (i + 1)) - 1
for k = 0 : 2^i - 1
R1 = REX(lenNum + 2^i + 1) * cos(2*pi*k*2^(stages - (i +1))/PointNum);
R2 = IMX(lenNum + 2^i + 1) * sin(2*pi*k*2^(stages - (i +1))/PointNum);
T1 = REX(lenNum + 2^i + 1) * sin(2*pi*k*2^(stages - (i +1))/PointNum);
T2 = IMX(lenNum + 2^i + 1) * cos(2*pi*k*2^(stages - (i +1))/PointNum);
REX(lenNum + 2^i + 1) = REX(lenNum + 1) - R1 - R2;
IMX(lenNum + 2^i + 1) = IMX(lenNum + 1) + T1 - T2;
REX(lenNum + 1) = REX(lenNum + 1) + R1 + R2;
IMX(lenNum + 1) = IMX(lenNum + 1) - T1 + T2 ;
lenNum = lenNum + 1;
endNum = lenNum + 2^i;
end
lenNum = endNum;
end
end
subplot(3,1,1);
fft(sampletab1, PointNum);
x1 = abs(fft(sampletab1, PointNum));
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-46064-1.html
发廊妹等国家严禁的行为
台湾问题已经超出了政治范畴