一种基于fft的数据采样方法和装置的制造方法
【技术领域】
[0001] 本发明属于数据处理领域,尤其涉及一种基于FFT的数据采样方法和装置。
【背景技术】
[0002] 快速傅立叶变换(英文全称为Fast Fourier transform,英文简称为FFT)是一种 分析信号的方法,它可分析信号的成分,也可用这些信号成分来合成信号,常在将信号在时 域(或空域)和频域之间变换时使用,从而能够得到更加方便分析或显示的数据结果。
[0003] 对于快速傅立页变换FFT运算,都首先需要进行逆序变换运算,这是因为FFT原理 是建立在对输入x(n)按照标号η的不断分组之上的。如果N = 32,顺序标号η用二进制 数表示(5位对应N = 32),则其逆序标号m二进制数可表示为。
[0004] 在得到采样数据的数组后,从输入顺序到逆序,常规的变址运算方法包含循环、移 位、判断、交换等一系列过程。如果n = m,则逆序标号与顺序标号保持不变,如果n #m,则 进行数据交换:标号m处存放原标号η的值,标号η处存放原标号m的值。现有的逆序变换 方法由于需要繁琐的循环移位和判断操作,运算较为麻烦,不利于提高运算效率,比如信号 的变换效率等。
【发明内容】
[0005] 本发明的目的在于提供一种基于FFT的数据采样方法,以解决现有的逆序变换方 法由于需要繁琐的循环移位和判断操作,运算较为麻烦,不利于提高运算效率的问题。
[0006] 本发明是这样实现的,一种基于FFT的数据采样方法,所述方法包括:
[0007] 接收采样数据序列,获取采样数据的个数N ;
[0008] 根据所述采样数据序列中采样数据的个数N,将所述采样数据序列中采样数据的 个数N分解为因子N_1与因子N_2的乘积;
[0009] 根据N_1与N_2获取逆序标号数组inverse N_1 □和逆序标号数组inverse N_2[];
[0010] 根据公式 inverse N[i*N_l+j] = N_2*inverse N_1 [j]+inverse N_1 [i]计算 逆序标号数组,其中inverse N□为采样数据的个数N对应的逆序标号数组,OS i〈N_2, 0 彡 j〈N_l ;
[0011] 根据所述逆序标号数组中每个逆序标号指示的位置,将所采样的数据存储至对应 位置,以直接进行FFT运算。
[0012] 本发明的另一目的在于提供一种基于FFT的数据采样装置,所述装置包括:
[0013] 数据读取单元,用于接收采样数据序列,获取采样数据的个数N ;
[0014] 分解单元,用于根据所述采样数据序列中采样数据的个数N,将所述采样数据序列 中采样数据的个数N分解为因子N_1与因子N_2的乘积;
[0015] 逆序标号数组获取单元,用于根据N_1与N_2获取逆序标号数组inverse N_l[] 和逆序标号数组inverse N_2[];
[0016] 标号计算单元,用于根据公式inverse N[i*N_l+j] = N_2*inverse N_l[j]+inverse N_l[i]计算逆序标号数组,其中inverse N□为采样数据的个数N对应的 逆序标号数组,?彡i〈N_2,0彡j〈N_l ;
[0017] 存储单元,用于根据所述逆序标号数组中每个逆序标号指示的位置,将所采样的 数据存储至对应位置,以直接进行FFT运算。
[0018] 在本发明中,读取到采样数据后,对采样数据的个数进行分解为两个因子的乘积 的形式,并且根据本发明所述的逆序标号计算公式,由两个因子结合预先存储的简单的逆 序标号数组即可得到采样数据对应的逆序标号数组,整个计算过程简单、效率高,而且通过 将采样数据直接存储到逆序标号对应的位置,使得FFT运算效率更好,比如不同信号的转 换效率更高。
【附图说明】
[0019] 图1是本发明第一实施例提供的基于FFT的数据采样方法的实现流程图;
[0020] 图2是本发明第二实施例提供的根据分解因子获取对应的逆序标号数组的实现 流程图;
[0021] 图3是本发明第三实施例提供的基于FFT的数据采样装置的结构示意图。
【具体实施方式】
[0022] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对 本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并 不用于限定本发明。
[0023] 本发明的目的在于克服现有技术中进行FFT变换的数据采样时,需要先存储采样 的数据,在进行FFT变换步骤中,根据采样数据的个数进行循环移位、判断操作,从而完成 逆序变换,在完成逆序变换后将采样的数据生成逆序数组。如果采样的数据非常大,则需 要较大的存储空间存储采样的数据和逆序后的数据,并且根据循环移位操作得到逆序数据 时,计算较为麻烦,使得FFT变换的转换效率不高。
[0024] 为克服上述缺陷,本发明提出了一种转换效率更高的基于FFT的数据采样方法, 所述方法包括:接收采样数据序列,获取采样数据的个数N ;根据所述采样数据序列中采样 数据的个数N,将所述采样数据序列中采样数据的个数N分解为因子N_1与因子N_2的乘 积;根据N_1与N_2获取逆序标号数组inverse N_1 □和逆序标号数组inverse N_2[];根 据公式 inverse N[i*N_l+j] =N_2*inverse N_l[j]+inverse N_l[i]计算逆序标号数组, 其中inverse N□为采样数据的个数N对应的逆序标号数组,0 < i〈N_2,0 < j〈N_l ;根据 所述逆序标号数组中每个逆序标号指示的位置,将所采样的数据存储至对应位置,以直接 进行FFT运算。
[0025] 本发明通过读取到采样数据后,对采样数据的个数进行分解为两个因子的乘积的 形式,并且根据本发明所述的逆序标号计算公式,由两个因子结合预先存储的简单的逆序 标号数组即可得到采样数据对应的逆序标号数组,整个计算过程简单、效率高,而且通过将 采样数据直接存储到逆序标号对应的位置,使得FFT运算效率更好,比如不同信号的转换 效率更高。下面结合附图具体说明。
[0026] 图1示出了本发明实施例提供的基于FFT的数据采样方法的实现流程,详述如 下:
[0027] 在步骤SlOl中,接收采样数据序列,获取采样数据的个数N。
[0028] 具体的,所述采样数据序列,即需要进行FFT快速傅立页变换的数组。在本发明实 施例中,所述采样数据的个数N为2的η次幂,其中η为大于0的自然数。比如N可以为2、 4、8、16、32、64、128、256 等等。
[0029] 在接收采样数据序列前,可以通过其它方式或者接收设定的值的方式,获取采样 数据的个数。
[0030] 在步骤S102中,根据所述采样数据序列中采样数据的个数Ν,将所述采样数据序 列中采样数据的个数N分解为因子N_1与因子Ν_2的乘积。
[0031] 当然,对于N本身比较小时,也可能不用分解直接查找对应的逆序变换数组。
[0032] 对所述采样数据序列的中采样数据的个数N进行分解时,一般都会有多种分解方 式,比如N = 64就可以包括2*32、4*16、8*8等多种分解方式。数值越大,可能的分解方式 也会越多,比如1024可以分解为2*512、4*256、8*128、16*64、32*32等多种。
[0033] 为进一步提高本发明实施例中对采样数据进行逆序变换的效率,对N进行分解 时,一般优先采用分解为大小更为接近两个数值。比如上面提到的N = 64时,则可以优选 的将其分解为8*8,对于N= 1024时,优选的分解为32*32。其原因如下:
[0034] 本发明进行N分解的目的在于将需要进行复杂的循环移位的逆序标号直接分解 为可以简单的逆序标号数组,并且简单的逆序标号数组可以预先存储或者直接简单运算即 可获取。通过上述优选的分解方式,可以更快的使分解后的两个数组值对应的逆序标号数 组直接可以在预先存储的逆序标号数组查找到。
[0035] 另外,本发明实施例中预先存储的逆序标号数组为简单的逆序标号数组,其原因 是:逆序标号数组中的逆序标号的个数越多,在存储时占用的存储空间也越多。这样可以节 省存储空间,在进行采样运算时可以节省内存空间。
[0036] 优选的,本发明实施例中所述预存逆序标号数组,一般包括较小的逆序标号数组 inverse2 □、:inverse4 □、:inverse8 □等。进一步是否包括逆序标号个数更多数组,取决于 逆序标号数据占用的内存资源的比例。这样,在系统内存较小时,存储的逆序标号数组的个 数也相应较少,比如只存储inverse2□、:inverse4□、:inverse8□,而在内存较大时,则可以 存储 inverse2 []、inverse4 []、inverse8 []、inversel6 []、inverse32 []、inverse64 []等。 可以理解的是,这只是一种提高运算效率的方式,还可以包括如监测系统可用内存的大小 来调整预存的逆序标号数组的多少。
[0037] 在步骤S103中,根据N_1与N_2获取逆序标号数组inverse N_1 □和逆序标号数 组 inve