- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基4fft原理及matlab实现,matlabfft原理,fft基4matlab,fft算法的matlab实现,fft的matlab实现,matlab实现fft,matlabfft,matlabfft函数,matlabfft频谱分析,matlabfft2
基4FFT原理及MATLAB实现
一.时域抽取法基4FFT基本原理:
有限长序列的N点DFT为:
k=0,1,2…,N-1
设序列长度为N,且满足,M为自然数,可把按下列方法分解为4个长为N/4的子序列:
r=0,1,…,N/4-1
r=0,1,…,N/4-1
r=0,1,…,N/4-1
r=0,1,…,N/4-1
则的DFT为X(k)=+
=
=
因为:
所以:原式可表示为:
X(k)=
= k=0,1,…,N/1
其中:分别为的N/4点DFT,即:
=
=
=
=
由于均以N/4为周期,且有:
,,,
所以:
X(k)= k=0,1,…,N/4-1
X(k+ N/4)= k=0,1,…,N/4-1
X(k+ 2N/4)= k=0,1,…,N/4-1
X(k+ 3N/4)= k=0,1,…,N/4-1
二.运算规律及编程思想:
1.按照上述分解法,再对进行反复分解,直到每个序列的长度等于4为止,这个4点的DFT的数学表达式为:
2.旋转因子与运算级数的关系(参考《数字信号处理(第三版)》西安电子科技大学出版社第115页)如下:
其中,L表示运算级数(L=1,2,…,M)(M=)(J=0,1,2,…,)
,(0,1,2…,)
3.序列的倒序:
与基2FFT的倒序相似(参考《数字信号处理(第三版)》西安电子科技大学出版社第116页)
由于,因此顺序数可用M位4进制数()表示。M次时域抽取如下:
第一次按最低位的0,1,2,3将x(n)分解为4组,第二次又按次低位的0,1,2,3值分别对上面所得的4组分组;以此类推,第M次按位分解,最后得到4进制倒序数。最终可以得到这样的规律:只要将顺序数()的4进制数倒置,就能得到对应的4进制倒序数()。
4.运算流程图:
clc;
clear;
a=0:255;
x=sin(2*pi/3*a)+sin(2*pi/4*a)+sin(2*pi/5*a)+sin(2*pi/6*a); %测试信号
subplot(2,1,1),plot(x);
axis([0 256 -3 3]),title( 时域信号波形);
subplot(2,2,3),plot(abs(fft(x)));
axis([0 256 0 200]),title(系统FFT 计算出的频谱);
N=256;
L=log(N)/log(4); %4点DFT 分解级数
Wn=exp(-2j*pi/N); %旋转因子
temp=zeros(1,N); % 定义中间临时数组
n=0:N-1;
screen=ones(1,N);
n=bitor(bitand(n,screen*hex2dec(cccc))/4,bitand(n,screen*hex2dec(3333))*4);
n=bitor(bitand(n,screen*hex2dec(f0f0))/16,bitand(n,screen*hex2dec(0f0f))*16);
n=bitor(bitand(n,screen*hex2dec(ff00))/256,bitand(n,screen*hex2dec(00ff))*256);
n=n/4^(8-L)+1;
for n1=1:N
temp(n(n1))=x(n1);
end
x=temp;
for l=1:L % 运算级循环
group_cont_2=4^(L-l); % 第l 级数据分组数
group_cont_1=4^(L-l+1); %第l-1 级数据分组数
group_interval_2=4^l; % 第l 级组间数据间隔个数,也是组内数据个数
group_interval_1=4^(l-1); %第l-1 级组间数据间隔个数,也是组内数据个数
G=group_cont_2-1; %分组上限
K=group_interval_1-1; % 组内数据上限
for g=0:G %每一级中包含的组循环,遍历每一组,计算各组中的数据
for k0=0:K %遍历每一组中的所有数
文档评论(0)