流水线fft架构和方法

文档序号:6455031阅读:751来源:国知局

专利名称::流水线fft架构和方法
技术领域
:本文公开的实施例一般涉及信号处理,更具体地,涉及用于高效计算快速傅立叶变换(FFT)的装置和方法。
背景技术
:傅立叶变换可以用来将时域信号映射成其对应的频域信号。相反,逆傅立叶变换可以用来将频域信号映射成其对应的时域信号。傅立叶变换对于时域信号的频谱分析特别有用。此外,比如实现正交频分复用(OFDM)的通信系统这样的通信系统可以使用傅立叶变换的性质来根据线性间隔音调(tone)生成多个时域符号并且根据该符号恢复频率。采样数据系统可以实现离散傅立叶变换(DFT),以允许处理器对预定数量的采样执行变换。然而,DFT是计算密集的并且需要巨量处理能力来执行。执行N点DFT所需要的计算数量是i^的阶次,表示为OOV2)。在许多系统中,专用于执行DFT的处理能力数量可以减少可用于其它系统操作的处理数量。此外,配置用于作为实时系统的系统可能没有足够的处理能力来在为计算分配的时间内执行所需规模的DFT。快速傅立叶变换(FFT)是傅立叶变换的离散实现,与DFT实现相比,FFT允许以尤为较少的运算来执行傅立叶变换。根据特定的实现,执行基-rFFT所需要的计算数量通常是7Vx/0^(iV)的阶数,表示为O(7Wo&(AO)。电信中的一种典型FFT是基-8FFT(radix-8FFT)。由于FFT计算常常涉及到蝶形核(butterflycore)的使用,所以可以使用基-8FFT的基本计算来导出多点FFT。从而,如果可以更高效地计算基-8FFT计算,则该益处ii会延续到应用基-8FFT蝶形核的其它FFT。之前,实现FFT的系统可能已经使用通用处理器或者独立数字信号处理器(DSP)来执行FFT。然而,系统正在逐渐地包含如下的专用集成电路(ASIC),这些ASIC被专门设计用以实现设备所需的大部分功能。在ASIC内实现系统功能使得为多个集成电路进行接口连接所需要的芯片数和胶合逻辑最小化。减少的芯片数通常使得设备具有更小的占用面积,而不会牺牲任何功能。ASIC管芯中的面积数量是有限的,需要对在ASIC内实现的功能块进行尺寸、速度和功率优化,以改进整个ASIC设计的功能。专用于FFT的资源数量可以被最小化,以限制专用于FFT的可用资源比率。然而,需要将充足的资源专用于FFT以保证可以用足以支持系统需求的速度来执行变换。此外,FFT模块所消耗的功率数量需要被最小化,以使电源需求和相关联的热耗散最小化。另外,FFT计算速度需要得以优化,这是因为一般电信应用需要实时地完成计算。因此,在本领域中需要用于对在如ASIC的集成电路内实现的FFT架构进行优化的技术。
发明内容这里描述了用于高效地计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)的技术。在一些方面中,利用一种装置实现I/FFT的计算,该装置包括存储器;以及具有一个或多个寄存器以及无延迟流水线的快速傅立叶变换引擎(FFTe),所述FFTe被配置用以从主存储器接收多点输入,在所述一个或多个寄存器中的至少一个寄存器内存储所接收的输入,以及使用所述无延迟流水线对所述输入计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者。对输入计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者可以使用无缝流水线。所述FFTe可以具有基-8蝶形核。所述FFTe可以具有基-4蝶形核。所述FFTe可以具有至少64个寄存器。所述FFTe还可以具有复数乘法器,其中所述至少64个寄存器中的56个寄存器从所述复数乘法器接收输入。所述至少64个寄存器中的32个寄存器从所述主存储器接收输入。所述FFTe可以被配置用以接收z点多点输入,其中z是512的倍数。所述FFTe还可以被配置用以输出所计算的变换。所述FFTe可以被配置用以在读取第一输入之后的x个循环开始写入所述输出,其中x是8加上流水线延迟。所述FFTe可以被配置用以在读取第一输入之后的y个循环完成写入所述输出,其中y是16加上流水线延迟。所述FFTe可以包括被配置用以读取第一组输入的第一组加法器,并且所述第一组输入在由所述第一组加法器读取之前进行位反转。在其它方面中,利用一种快速傅立叶变换引擎(FFTe)实现I/FFT的计算,所述FFTe配置用以从主存储器接收多点输入;在一个或多个寄存器中的至少一个寄存器内存储所接收的输入;以及使用无延迟流水线对所述输入计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者。所述FFTe还可以被配置用以使用无缝流水线对所述输入计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者。所述FFTe还可以被配置用以使用基-8蝶形核来计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者。所述FFTe还可以被配置用以使用基-4蝶形核来计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者。所述FFTe还可以被配置用以在至少64个寄存器内存储所接收的输入。所述FFTe还可以被配置用以存储来自复数乘法器的所接收的输入,其中所述至少64个寄存器中的56个寄存器从所述复数乘法器接收输入。所述FFTe还可以被配置用以在所述至少64个寄存器中的32个寄存器内存储来自所述主存储器的所接收的输入。所述FFTe还可以被配置用以接收z点多点输入,其中z是512的倍数。所述FFTe还可以被配置用以输出所计算的变换。所述FFTe还可以被配置用以在读取第一输入之后的x个循环开始写入所述输出,其中x是8加上流水线延迟。所述FFTe还可以被配置用以在读取第一输入之后的y个循环完成写入所述输出,其中y是16加上流水线延迟。所述FFTe可以包括被配置用以读取第一组输入的第一组加法器,并且所述第一组输入在由所述第一组加法器读取之前进行位反转。在其它方面中,利用一种方法实现I/FFT的计算,该方法包括提供存储器;提供具有一个或多个寄存器以及无延迟流水线的快速傅立叶变换引擎(FFTe);配置所述FFTe以从主存储器接收多点输入;在所述一个或多个寄存器中的至少一个寄存器内存储所接收的输入;以及使用所述无延迟流水线对所述输入计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者。所述FFTe还可以包括提供无缝流水线。所述FFTe可以包括提供基-8蝶形核。所述FFTe可以包括提供基-4蝶形核。所述FFTe可以包括提供至少64个寄存器。所述FFTe还可以包括提供复数乘法器,其中所述至少64个寄存器中的56个寄存器从所述复数乘法器接收输入。所述FFTe可以包括提供所述至少64个寄存器中的32个寄存器以从所述主存储器接收输入。所述FFT可以被配置为接收多点输入包括配置所述FFTe以接收z点多点输入,其中z是512的倍数。所述FFTe可以被配置为还包括输出所计算的变换。所述FFTe可以包括在读取第一输入之后的x个循环开始写入所述输出,其中x是8加上流水线延迟。所述FFTe可以包括在读取第一输入之后的y个循环完成写入所述输出,其中y是16加上流水线延迟。所述FFTe还可以包括被配置用以读取第一组输入的第一组加法器,并且所述第一组输入在由所述第一组加法器读取之前进行位反转。在一些方面中,利用一种处理系统实现I/FFT的计算,该处理系统具有用于存储第一数据的模块;用于存储第二数据的一个或多个模块,其比所述用于存储所述第一数据的模块更快;用于从所述用于存储所述第一数据的模块接收多点输入的模块;用于在所述用于存储第二数据的一个或多个模块中的至少一个模块内存储所接收的输入的模块;以及用于使用无延迟流水线对所述输入计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者的模块。所述处理系统还可以包括用于使用无缝流水线对所述输入计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者的模块。所述处理系统还可以包括用于使用基-8蝶形核来处理所述数据的模块。所述处理系统还可以包括用于使用基-4蝶形核来处理所述数据的模块。所述处理系统还可以包括用于在至少64个所述用于存储第二数据的模块内存储所接收的输入的模块。所述处理系统还可以包括用于计算复数乘法的模块,其中所述至少64个所述用于存储第二数据的模块中的56个模块从所述用于计算复数乘法的模块接收输入。所述处理系统还可以包括用于从所述用于存储第一数据的模块接收输入的模块,其中32个所述模块在所述用于存储第二数据的一个或多个模块中的至少一14个模块内存储所接收的输入。所述处理系统还可以包括用于从所述用于存储所述第一数据的模块接收512点输入的模块。所述处理系统还可以包括用于输出所计算的变换的模块。所述处理系统还可以包括用于使用无延迟流水线对所述输入计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者的模块,所述FFTe被配置用以在读取第一输入之后的x个循环开始写入所述输出,其中x是8加上流水线延迟。所述处理系统还可以包括用于使用无延迟流水线对所述输入计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者的模块,所述FFTe被配置用以在读取第一输入之后的y个循环完成写入所述输出,其中y是16加上流水线延迟。所述处理系统还可以包括用于使用无延迟流水线对所述输入计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者的模块,所述FFTe被配置为包括第一组加法器,所述第一组加法器被配置用以读取第一组输入,并且所述第一组输入在由所述第一组加法器读取之前进行位反转。在其它方面中,利用一种计算机可读介质实现I/FFT的计算,该计算机可读介质包含由I/FFT处理器用于执行I/FFT计算方法的指令集,所述指令包括用以从主存储器接收多点输入的例程;用以在一个或多个寄存器中的至少一个寄存器内存储所接收的输入的例程;以及用以使用无延迟流水线对所述输入计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者的例程。所述FFTe还可以被配置用以使用无缝流水线对所述输入计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者。所述FFTe还可以被配置用以使用基-8蝶形核来计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者。所述FFTe还可以被配置用以使用基-4蝶形核来计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者。所述FFTe还可以被配置用以在至少64个寄存器内存储所接收的输入。所述FFTe还可以被配置用以存储来自复数乘法器的所接收的输入,其中所述至少64个寄存器中的56个寄存器从所述复数乘法器接收输入。所述FFTe还可以被配置用以在所述至少64个寄存器中的32个寄存器内存储来自所述主存储器的所接收的输入。所述FFTe还可以被配置用以接收z点多点输入,其中z是512的倍数。所述FFTe还可以被配置用以输出所计算的变换。所述FFTe还可以被配置用以在读取第一输入之后的x个循环开始写入所述输出,其中x是8加上流水线延迟。所述FFTe还可以被配置用以在读取第一输入之后的y个循环完成写入所述输出,其中y是16加上流水线延迟。所述FFTe可以包括被配置用以读取第一组输入的第一组加法器,并且所述第一组输入在由所述第一组加法器读取之前进行位反转。下文更具体地描述本发明的各个方面和实施例。图l是无线通信系统的框图2是OFDM接收机的框图3是FFT处理器的框图4是与其它信号处理块相关的FFT处理器的框图5是FFT模块500的框图6是基-8FFT模块600的框图7是基-8FFT模块中的寄存器的框图8是512点基-8FFT的转置(transpose)存储器乘法顺序的视图;图9是基-8FFT计算时间线的视图;以及图10是I/FFT引擎的框图。具体实施例方式词语"示例性的"在这里用来表示"作为实例、例子或者示例的"。不应将这里描述为"示例性"的任何实施例或者设计理解为优选于或优于其它实施例或者设计。这里描述的FFT技术可以用于各种应用,例如通信系统、信号滤波和放大、信号处理、光学处理、地震反映、图像处理等。这里描述的FFT技术也可以用于诸如蜂窝系统、广播系统、无线局域网(WLAN)系统等无线通信系统。蜂窝系统可以是码分多址(CDMA)系统、时分多址(TDMA)系统、频分多址(FDMA)系统、正交频分多址(OFDMA)系统、单载波FDMA(SC-FDMA)系统等。广播系统可以是媒体FLO系统、手持数字视16频广播(DVB-H)系统、综合业务数字广播-地面电视广播(ISDB-T)系统等。WLAN系统可以是正EE802.11系统、Wi-Fi系统、WiMax系统等。这些不同的系统在本领域中是已知的。这里描述的FFT技术可以用于具有单个子载波的系统以及具有多个子载波的系统。可以利用OFDM、SC-FDMA或者一些其它调制技术来获得多个子载波。OFDM和SC-FDMA将频带(例如系统带宽)分割成多个正交子载波,也称为音调、频段(bin)等。各个子载波可以调制有数据。一般而言,在频域中利用OFDM在子载波上发送调制符号,以及在时域中利用SC-FDMA在子载波上发送调制符号。OFDM使用于各种系统,如媒体FLO、DVB-H和ISDB-T广播系统、正EE802.11a/gWLAN系统以及一些蜂窝系统中。下文针对使用OFDM的广播系统(如媒体FLO系统)来描述AGC技术的某些方面和实施例。可以使用用于实现计算逻辑的任何已知方法来实现这里描述的框图。用于实现计算逻辑的方法实例包括现场可编程门阵列(FPGA)、专用集成电路(ASIC)、复杂可编程逻辑器件(CPLD)、集成光学电路(IOC)、微处理器等。公开了适用于FFT或者逆FFT(IFFT)的硬件架构、包含FFT模块的设备以及执行FFT或者IFFT的方法。FFT架构可以概括为允许通过使用基-8FFT模块来实现8"点FFT("是自然数)。例如,FFT架构可以概括为允许实现512点FFT(83)。FFT架构允许用来执行基-8FFT的循环数量被最小化,同时维持较小的芯片面积。具体而言,FFT架构配置存储器和寄存器空间,以使得在就位(inplace)FFT过程中执行的存储器访问次数最优化。在本公开范围内的该FFT架构的概括可以包含其它级的阶次和组合。例如,FFT架构的一些实施例可以通过绕过第三级I/FFT处理来提供基-4FFT。这允许FFTe执行2048点FFT(8x8x8x4)。在其它实施例中,FFTI架构也可以通过绕过第二级和第三级I/FFT处理来提供基-2结果。在使用少于为基-8的结果并且将执行后续FFT运算的情况下,旋转系数将包含不同组合。例如,用以产生2048点FFT的一种组合是基-8、然后为基-8、然后为另一基-8、然后为基-4。如果以不同的顺序执行运算,例如基-8、然后为基-8、然后为基-4、然后为基-8,则同样会获得2048点FFT,但是在第三级和第四级运算中,旋转系数对于基-4和基-8运算而言将是不同的。图1是无线通信系统100的一些实施例的简化功能框图,并且示出了FFT流水线的一些实施例。该系统包括可以与用户终端110通信的一个或者多个固定单元。用户终端110可以是例如配置用以根据一个或者多个通信标准来操作的无线电话。例如,用户终端110可以被配置用以从第一通信网络接收无线电话信号,并且可以被配置用以从第二通信网络接收数据和信息。用户终端110可以是便携式单元、移动单元或者固定单元。用户终端110也可以称为移动单元、移动终端、移动站、用户设备、便携式电话等。虽然仅在图1中示出了单个用户终端110,但是应当理解,典型无线通信系统100具有与多个用户终端110通信的能力。用户终端110通常与这里描绘为扇区化蜂窝塔的一个或者多个基站120a或者120b通信。通常,用户终端110将与在用户终端110的接收机处提供最强信号强度的基站(如120b)通信。基站120a和120b可以分别耦合到基站控制器(BSC)130,BSC130对去往和来自适当基站120a和120b的通信信号进行路由。BSC130耦合到移动交换中心(MSC)140,MSC140可以被配置用以作为用户终端110与公共交换电话网(PSTN)150之间的接口。网络160可以例如是局域网(LAN)或者广域网(WAN)。在一些实施例中,网络160包括因特网。因此,MSC140耦合到PSTN150和网络160。MSC140也可以耦合到一个或者多个媒体源170。媒体源170可以是例如用户终端100可访问的系统提供商所提供的媒体库。例如,系统提供商可以提供用户终端110可按需访问的视频或者其它形式的媒体。MSC140也可以被配置用以协调与其它通信系统(未示出)的系统间切换。无线通信系统100也可以包括配置用以将信号发送到用户终端110的广播发射机180。在一些实施例中,广播发射机180可以与基站120a和120b关联。在其它实施例中,广播发射机180可以不同于且独立于包含基站120a和120b的无线电话系统。广播发射机180可以是但不限于音频发射机、视频发射机、无线电发射机、电视发射机等或者发射机的某些组合。虽然仅18在无线通信系统100中示出了一个广播发射机180,但是无线通信系统100可以被配置用以支持多个广播发射机180。多个广播发射机180可以在重叠的覆盖区中发送信号。用户终端110可以从多个广播发射机180并行接收信号。多个广播发射机180可以被配置用以广播相同、不同或者相似的广播信号。例如,覆盖区与第一广播发射机的覆盖区重叠的第二广播发射机也可以广播由第一广播发射机广播的信息子集。广播发射机180可以被配置用以从广播媒体源182接收数据,对数据编码,基于所编码的数据来调制信号,并且将所调制的数据广播到可以由用户终端110接收的服务区。在一些实施例中,基站120a和120b中的一个或者两者以及广播发射机180发送正交频分复用(OFDM)信号。OFDM信号可以包括在预定工作频带调制到一个或者多个载波的多个OFDM符号。OFDM通信系统将OFDM用于数据和导频传输。OFDM是将整个系统带宽分割成多个(K个)正交频率子带的多载波调制技术。这些子带也称为音调、载波、子载波、频段和频道。通过OFDM,各个子带与可调制有数据的相应子载波关联。在OFDM系统中的发射机,如广播发射机180,可以将多个数据流同时发送到无线设备。这些数据流在性质上可以是连续的或者突发性的,可以具有固定或者可变的数据速率,并且可以使用相同或者不同的编码和调制方案。发射机也可以发送导频,以辅助无线设备执行诸如时间同步、频率跟踪、信道估计等多种功能。导频是发射机和接收机预先已知的传输。广旙发射机180可以根据交织子带结构来发送OFDM符号。OFDM交织结构包括全部K个子带,其中!Ol。可以将U个子带用于数据和导频传输,其被称为可用子带,其中l^K。其余G个子带未被使用,其被称为防护子带,其中G《-U。作为一个实例,系统可以利用具有全部&=4096个子带、U-4000个可用子带和G-96个防护子带的OFDM结构。为了简化,以下描述假设所有全部K个子带可用,并且分配以索引0至K-l,从而U=K且G-0。全部K个子带可以被设置成M个交织或者非重叠子带集。M个交织是非重叠或者不相交的,因为全部K个子带中的每个子带属于一个交织。各交织包含P个子带,其中P-K/M。在各交织中的P个子带可以均匀地分布于全部K个子带,从而该交织中的连续子带间隔开M个子带。例如,交织O可以包含子带O、M、2M等,交织l可以包含子带l、M+l、2M+1等,交织M-1可以包含子带M-1、2M-1、3M-1等。对于K-4096的上述示例性OFDM结构,可以形成M-8个交织,各交织可以包含均匀地间隔开八个子带的P-512个子带。因此,各交织中的P个子带与其它M-1个交织内各交织中的P个子带交织。一般而言,广播发射机180可以实现具有任何数量的全部子带、可用子带和防护子带的任何OFDM结构。也可以形成任何数量的交织。各交织可以包含任何数量的子带和全部K个子带中的任一子带。交织可以包含相同或者不同数量的子带。为了简化,以下大部分描述针对具有M^8个交织且各交织包含P=512个均匀分布子带的交织子带结构。这一子带结构提供若干优点。首先,由于各交织包含取自整个系统带宽的子带,所以实现了频率分集。其次,无线设备可以通过执行部分P点快速傅立叶变换(FFT)而不是完全K点FFT来恢复在给定交织上发送的数据或者导频,这可以简化在无线设备处的处理。广播发射机180可以在一个或者多个交织上发送频分复用(FDM)导频,以允许无线设备执行诸如信道估计、频率跟踪、时间跟踪等各种功能。导频由基站和无线设备预先己知的调制符号组成,所述调制符号也称为导频符号。用户终端110可以基于所接收的导频符号和已知的所发送导频符号来估计无线信道的频率响应。用户终端110能够在用于导频传输的各个子带处对无线信道的频谱进行采样。系统100可以在OFDM系统中限定M个时隙,以有助于数据流到交织的映射。各时隙可被视为用于发送数据或者导频的发送单元或者手段。用于数据的时隙称为数据时隙,而用于导频的时隙称为导频时隙。M个时隙可被分配索引0至M-1。时隙0可以用于导频,而时隙1至M-1可以用于数据。数据流可以在时隙1至M-1上发送。通过使用具有固定索引的时隙可以简化对数据流的时隙分配。各个时隙可以映射到在一个时间间隔中的一个交织。可以基于可实现频率分集以及良好信道估计和检测性能的任何时隙到交织的映射方案,将M个时隙映射到不同时间间隔中的M个交织中的不同交织。一般而言,时间间隔可以跨越一个或者多个符号周期。以下描述假设时间间隔跨越一个符号周期。图2是可以例如在图1的用户终端中实现的OFDM接收机200的简化功能框图。接收机200可以被配置用以实现如这里描述的FFT处理块,以执行对所接收OFDM符号的处理。接收机200包括接收RF处理器210,接收RF处理器210被配置用以通过RF信道接收所发送的RFOFDM符号、处理这些符号并且将其频率转换成基带OFDM符号或者实质上的基带信号。如果相对于基带信号的频率偏移是信道带宽的一小部分或者如果信号处于足够低的中间频率以致允许对信号进行直接处理而无需进一步频率转换,则该信号可以称为实质上的基带信号。来自接收RF处理器210的OFDM符号被耦合到帧同步器220。帧同步器220可以被配置用以将接收机200与符号时序同步。在一些实施例中,帧同步器可以被配置用以将接收机同步到超帧时序以及同步到超帧内的符号时序。帧同步器220可以被配置用以基于为了重复时隙到交织的映射所需要的符号数量来确定交织。在一些实施例中,时隙到交织的映射可以在每14个符号之后重复。帧同步器220可以根据符号计数来确定模-14的符号索引。接收机200可以使用模-14的符号索引来确定导频交织以及与所分配数据时隙对应的一个或者多个交织。帧同步器220可以基于多个因素并且使用多种技术中的任何技术来同步接收机时序。例如,帧同步器220可以解调OFDM符号并且可以根据所解调的符号来确定超帧时序。在其它实施例中,帧同步器220可以基于在一个或者多个符号内、例如在开销信道中接收的信息来确定超帧时序。在其它实施例中,帧同步器220可以通过接收不同信道上的信息,比如通过解调所接收的与OFDM符号不同的开销信道,来同步接收机200。当然,帧同步器220可以使用任何实现同步的方式,而实现同步的方式并不必限制为确定模符号计数的方式。帧同步器220的输出被耦合到采样映射230,采样映射230可以被配置用以解调OFDM符号并且将符号采样或者码片从串行数据路径映射到多个21并行数据路径中的任一数据路径。例如,采样映射220可以被配置用以将各个OFDM码片映射到与OFDM系统中子带或者子载波的数量对应的多个并行数据路径之一。采样映射230的输出被耦合到FFT模块240,FFT模块240被配置用以将OFDM符号变换成对应的频域子带。FFT模块240可以被配置用以基于模-14符号计数来确定与导频时隙对应的交织。FFT模块240可以被配置用以将一个或者多个子带,如预定导频子带,耦合到信道估计器250。导频子带可以是例如跨越OFDM符号宽度的一个或者多个等间距的OFDM子带集。信道估计器250被配置用以使用导频子带来估计对所接收OFDM符号具有影响的各种信道。在一些实施例中,信道估计器250可以被配置用以确定与各数据子带对应的信道估计。来自FFT模块240的子带和信道估计被耦合到子载波符号去交织器260。符号去交织器260可以被配置用以基于对一个或者多个所分配数据时隙和与所分配数据时隙对应的交织子带的了解来确定交织。符号去交织器260可以被配置用以例如解调与所分配数据交织对应的各个子载波,并且根据所解调的数据来生成串行数据流。在其它实施例中,符号去交织器260可以被配置用以解调与所分配数据交织对应的各个子载波,并且生成并行数据流。在其它实施例中,符号去交织器260可以被配置用以生成与所分配时隙对应的数据交织的并行数据流。符号去交织器260的输出被耦合到配置用以进一步处理所接收数据的基带处理器270。例如,基带处理器270可以被配置用以将所接收数据处理成具有音频和视频的多媒体数据流。基带处理器270可以将所处理的信号发送到一个或者多个输出设备(未示出)。图3是在OFDM系统中工作的接收机的FFT处理器300的一些实施例的简化功能框图。FFT处理器300可以例如使用于图1的无线通信系统中或者图2的接收机中。在一些实施例中,FFT处理器300可以被配置用以执行图2的接收机实施例的帧同步器、FFT模块和信道估计器的部分或者所有功能。FFT处理器300可以实现于单个IC衬底上的集成电路(IC)中,以提供用于OFDM接收机设计的处理部分的单芯片解决方案。可选地,FFT处理器300可以实现于多个IC或者衬底上,并且封装为一个或者多个芯片或者模块。例如,FFT处理器300可以具有在第一IC上执行的处理部分,该处理部分可以与不同于第一IC的一个或者多个存储设备上的存储器进行接口连接。FFT处理器300包括解调块310,解调块310耦合到将FFT计算块360和信道估计器380互连的存储器架构320。可选地,对符号进行映射的符号映射块350可以被包括作为FFT处理器300的一部分,或者可以实现在不同的块内,该块可以实现在或者可以不实现在与FFT处理器300相同的衬底或者IC上。在符号映射块350中也进行符号去交织。符号映射块的一个示例性实例为对数似然比。解调模块、FFT模块、信道估计模块和符号映射模块对采样值执行运算。存储器架构320允许这些模块中的任何模块在给定时间访问任何块。通过临时划分存储器组(bank)来简化切换逻辑。一个存储器组由解调块310重复使用。FFT计算块320访问正在活动地处理的组。信道估计块380访问当前正在处理的组的导频信息。符号映射块350访问包含最早采样的组。解调块310包括耦合到系数ROM314的解调器312。解调块310处理时间同步的OFDM符号以恢复导频和数据交织。在上述实例中,OFDM符号包括划分成8个不同交织的4096个子带,其中各交织具有在整个4096个子带上均匀间距的子带。解调器312将所引入的40%个采样组织成八个交织。解调器将各引入采样旋转w(n)=e-j27m/512,其中n代表交织0至7。旋转前512个值并且存储在各个交织中。对于随后的各组512个采样,解调器312进行旋转,然后添加值。各个交织中的各个存储器位置将累积八个旋转采样。交织0中的值不被旋转而仅被累积。解调器312可以用更大数量的位来表示所旋转和累积的值,所述更大数量的位用于表示输入采样以适应因累积和旋转而引起的增长。系数ROM314用来存储复数旋转系数。各个引入采样需要七个系数,因为交织O无需任何旋转。系数ROM314可以由上升沿触发,这可能造成23相对于解调块310接收到采样时刻的1个循环的延迟。解调块310可以被配置用以寄存从系数ROM314提取的各个系数值。寄存系数值的操作增加了在可以使用系数值本身之前的另一个循环的延迟。对于各个引入采样,使用分别具有不同地址的七个不同系数。将七个计数器用来查找不同系数。各计数器按照其交织号来递增;对于每个新采样,例如,交织l递增l,而交织7递增7。创建ROM镜像以便保持单行中所需全部七个系数或者以便使用七个不同ROM通常并不实际。因此,在新采样到来时,解调流水线从提取系数值开始。为了减少系数存储器的大小,存储0与兀/4之间的COS和SIN值。未被发送到存储器的系数地址的三个最高有效位(MSB)可以用来将值引向适当象限。因此,从系数ROM314读取的值未被立即寄存。存储器架构320包括耦合到多个存储器组324a-324c的输入复用器322。存储器组324a-324c耦合到存储器控制块326,该存储器控制块326包括能够将值从各存储器组324a-324c路由到不同模块的复用器。存储器架构320还包括用于导频观测处理的存储器和控制。存储器架构320包括将导频观测耦合到多个导频观测存储器332a-332c中任一导频观测存储器的输入导频选择复用器330。多个导频观测存储器332a-332c耦合到输出导频选择复用器334,以允许选择任一存储器的内容进行处理。存储器架构320还可以包括多个存储器部分342a-342b,用以存储根据导频观测所确定的所处理的信道估计。可以使用傅立叶变换(如FFT)来方便地处理用来生成OFDM符号的正交频率。FFT计算块360可以包括多个单元,这些单元被配置用以执行一个或者多个预定维度的高效的FFT和逆FFT(IFFT)运算。通常,所述维度为二的幂,但是FFT或者IFFT运算不限于大小为二的幂的维度。FFT计算块360包括蝶形核370,蝶形核370可以对从存储器架构320或者转置寄存器364提取的复数数据进行运算。FFT计算块360包括配置用以在存储器架构320与转置寄存器354之间进行选择的蝶形输入复用器362。蝶形核370与复数乘法器366和旋转存储器368结合操作以执行蝶形运算。信道估计器380可以包括与PN定序器384结合操作以对导频采样去扰的导频去扰器382。相位斜坡(mmp)模块386操作用以将导频观测从导频交织旋转到各种数据交织中的任何数据交织。相位斜坡系数存储器388用来存储在可能的交织之间旋转采样所需要的相位斜坡信息。时间滤波器392可以被配置用以针对多个符号上的多个导频观测进行时间滤波。来自时间滤波器392的滤波输出可以存储于存储器架构320中,并且在被返回到存储器架构320中之前由阈值器394做出进一步处理,以便在执行对底层子带数据的解码的符号映射块350中使用。信道估计器380可以包括信道估计输出复用器390,信道估计输出复用器390用以将包括中间和最终输出值的各种信道估计器输出值通过接口连接到存储器架构320。图4是与OFDM接收机中的其它信号处理块有关的FFT处理器440的一些实施例的简化功能框图。TDM导频获取模块402为FFT处理器400生成初始符号同步和时序。引入的同相(I)和正交(Q)采样被耦合到AGC模块404,该AGC模块用以实现将信号维持于预期幅度和频率误差内的增益和频率控制回路。在一些实施例中,可以取代术语TDM导频获取模块而使用帧同步器。在帧同步器块中执行AFC功能,而在帧同步器之前可以执行AGC功能(图2的接收RF处理)。控制处理器408执行对FFT处理器400的高级控制。控制处理器408可以是例如专用处理器或者精简指令集计算机(RISC)处理器,比如由ARMTM设计的处理器。控制处理器408可以例如通过控制符号同步、将FFT处理器400的状态有选择地控制为活动或睡眠状态或者控制FFT处理器400的操作来控制FFT处理器408的操作。在FFT处理器400内的控制逻辑410可以用来对FFT处理器400的各个内部模块实现接口连接。控制逻辑410也可以包括用于与FFT处理器400外部的其它模块实现接口连接的逻辑。I和Q采样被耦合到FFT处理器400,更具体地,耦合到FFT处理器400的解调块310。解调块310用以将采样分离到预定数量的交织。解调块310与存储器架构320进行接口连接,以存储采样以便进行处理和提供到符号映射块350,从而对底层数据解码。25存储器架构320可以包括存储器控制器412,存储器控制器412用于控制对存储器架构320内的各个存储器组的访问。例如,存储器控制器412可以被配置用以允许向各个存储器组内的位置的行写入。存储器架构320可以包括用于存储FFT数据的多个FFTRAM420a-420c。此外,可以将多个时间滤波存储器430a-430c用来存储时间滤波数据,比如用来生成信道估计的导频观测。分离的信道估计存储器440a-440b可以用来存储来自信道估计器380的中间信道估计结果。信道估计器380可以在确定信道估计时使用信道估计存储器440a-440b。FFT处理器400包括用来执行至少部分FFT运算的FFT计算块。在图4的实施例中,FFT计算块是8点FFT引擎460。8点FFT引擎460对于处理上述OFDM符号结构的示例性实例可能是有利的。如前文所述,各OFDM符号包括被划分成分别具有512个子带的8个交织的4096个子带。各个交织中子带的数量512是8的立方(83=512)。因此,可以使用基-8FFT按照三级来执行512点FFT。事实上,由于4096是8的四次幂,所以对于全部四级,可以利用仅一个附加FFT级来执行4096点FFT。8点FFT引擎460可以包括适于执行基-8FFT的蝶形核370和转置寄存器364。归一化块462用来对由蝶形核370生成的乘积进行归一化。归一化块462可以操作用以限制表示在FFT的各级之后从蝶形核输出的值所需要的存储器位置的位增长。图5是FFT模块500的一些实施例的功能框图。由于在正向变换与逆向变化之间的对称性,FFT模块500可以被配置为具有较小变化的1/FFT模块。FFT模块500可以实现于单个IC管芯上,其作为ASIC的一部分、作为FPGA或者作为任何逻辑实现方式。可选地,FFT模块500可以实现为相互通信的多个单元。此外,FFT模块500不限于特定FFT结构。例如,FFT模块500可以被配置用以执行时间抽选FFT或者频率抽选FFT(在以下方程l中进一步详述)。图5描述了基-rFFT的一般情况,而图6描述了基-8FFT的具体情况。回到图5,FFT模块500包括配置用以存储将要变换的采样的存储器510。此外,由于FFT模块500被配置用以执行该变换的就位计算,所以存储器510用来存储FFT的各级的结果和FFT模块500的输出。可以部分地基于FFT的规模和FFT的基数来设定存储器510的大小。对于N点基-rFFT,其中!SNr11,存储器510的大小可以被设定用以存储rn-l行中的N个采样,其中每行r个采样。存储器510可以被配置为具有与每一采样的位数和每行的采样数量的乘积相等的宽度。存储器510通常被配置用以将采样存储为实分量和虚分量。因此,对于基-2FFT,存储器510被配置用以每行存储两个采样,并且可以将采样存储为第一采样的实部、第一采样的虚部、第二采样的实部和第二采样的虚部。如果采样的各分量被配置为10位,则存储器510每行使用40位。存储器510可以是具有足以支持模块运算的速度的随机存取存储器(RAM)。存储器510耦合到配置用以执行r点FFT的FFT引擎520。FFT模块500可以被配置用以执行在部分FFT之后进行旋转因子加权的FFT,也称为FFT蝶形。这样的配置允许使用最少数量的乘法器来配置FFT引擎520,由此使FFT引擎520的大小和复杂度最小。FFT引擎520可以被配置用以从存储器510提取行并且对该行中的采样执行FFT。因此,FFT引擎520可以在单个循环中为r点FFT提取所有采样。FFT引擎520可以是例如流水线FFT引擎,并且能够在时钟的不同相位上控制行中的值。FFT引擎520的输出被耦合到寄存器组530。寄存器组530被配置用以基于FFT的基数来存储多个值。在一些实施例中,寄存器组530可以被配置用以存储一个值。与针对采样的情况一样,在寄存器组中存储的值通常是具有实分量和虚分量的复数值。寄存器组530用作暂时存储,但是其被配置用于快速访问并且为无需通过地址总线来访问的存储提供专用位置。例如,寄存器组530中寄存器的各个位可以用触发器来实现。因而,与相当大小的存储器位置相比,寄存器使用更多的管芯面积。由于访问寄存器空间实际上无循环成本,所以特定FFT模块500的实现可以通过控制寄存器组530和存储器510的大小来进行速度向管芯面积的折衷。可以将寄存器组530的大小有利地设定为存储^个值,从而,例如可以通过逐行写入值并逐列读取值或者相反来直接执行值的换位(transpositions值换位用来针对FFT的所有级维持存储器510中FFT值27的行对准。第二存储器540被配置用以存储用来对FFT引擎520的输出加权的旋转因子。在一些实施例中,FFT引擎520可以被配置用以在部分FFT输出(FFT蝶形)的计算过程中直接使用旋转因子。旋转因子对于任何FFT而言可以是预定的。因此,第二存储器540可以实现为只读存储器(ROM)、非易失性存储器、非易失性RAM或者闪速可编程存储器,不过第二存储器540也可以被配置为RAM或者其它类型的存储器。第二存储器540的大小可以被设定用以存储用于N点FFT的Nx(n-l)个复数旋转因子,其中N=rn。一些旋转因子,如l、-1、j或者-j,可以从第二存储器540中省略。此外,同一值的重复也可以从第二存储器540中省略。因此,第二存储器540中旋转因子的数量可以小于Nx(n-l)。一种高效的实现可以利用以下事实根据FFT是实现频率抽选算法还是实现时间抽选算法,用于FFT所有级的旋转因子为在FFT的第一级或者最后一级中使用的旋转因子的子集。复数乘法器550a-550b耦合到寄存器组和第二存储器540。复数乘法器550a-550b被配置用以利用来自第二存储器540的适当旋转因子对存储于寄存器组530中的FFT引擎520的输出加权。图5中所示实施例包括两个复数乘法器550a和550b。然而,可以基于速度与管芯面积的折衷来选择在FFT模块200中包括的如250a的复数乘法器的数量。可以在管芯上实现数量更大的复数乘法器,以便加速FFT的执行。然而,增加的速度是以管芯面积为代价的。当管芯面积至关重要时,可以减少复数乘法器的数量。通常,当实现r点FFT引擎520时,设计不会包括多于r-l个复数乘法器,因为r-l个复数乘法器足以向FFT引擎520的输出并行地应用所有非平凡旋转因子。作为一个实例,配置用以执行8点基-2FFT的FFT模块500可以实现2个复数乘法器,但是也可以实现1个复数乘法器。各个复数乘法器,如550a,在每次乘法运算过程中对来自寄存器组530的单个值和存储于第二存储器540中的对应旋转因子进行运算。如果存在比将要执行的复数乘法更少的复数乘法器,则复数乘法器将对来自寄存器组530的多个FFT值执行运算。如550a的复数乘法器的输出被写入到寄存器组530,通常写入到向复数乘法器提供过输入的同一位置。因此,在复数乘法之后,无论复数乘法器实现于FFT引擎520内还是如图5中所示与寄存器组530关联,寄存器组的内容都表示相同的FFT级输出。耦合到寄存器组530的换位模块542对寄存器组530的内容执行换位。换位模块532可以通过重排寄存器值来转置寄存器内容。可选地,换位模块532可以在从寄存器块530读取内容时转置寄存器组530的内容。在被写回到存储器510中曾向FFT引擎520提供过输入的行处之前,寄存器组530的内容被转置。在FFT的所有级上,对寄存器组530的值的转置维持FFT输入的行结构。与指令存储器564组合的处理器562可以被配置用以执行模块之间的数据流,并且可以被配置用以执行图5的一个或者多个块中的一些或者所有块。例如,指令存储器564可以将一个或者多个处理器可用指令存储为引导处理器562控制FFT模块500中数据的软件。处理器562和指令存储器564可以实现为FFT模块500的一部分,或者可以在FFT模块500外部。可选地,处理器562可以在FFT模块500外部,但是指令存储器564可以在FFT模块500内部,并且可以例如与用于采样的存储器510或者其中存储旋转因子的第二存储器540共用。图5中所示实施例的特征在于随着算法基数的改变而在速度与面积之间的折衷。为了实现N^v点FFT,所需循环的数量可以估计如下其中-^v=r的数量,将要计算的基-rFFTrNFFT^x对于包含r个元素的矢量执行一次读取、FFT、旋转乘法和写入所需的时间。假设NFFT独立于基数且为恒定的。循环计数以1/r的阶次(O(1/r))减少。随着转置所需要的寄存器的数量按—增加,实现所需要的面积按O(r2)增加。对于较大的N,在寄存器的数量和为了实现寄存器所需要的面积中以面积为主导。可以选择提供所需速度的最小基数来针对不同的关注情况实现FFT。假定模块的速度足够快,则通过使基数最小化能够使用来实现模块的管芯面积最小化。在一些实施例中,使用频率抽选方式来实现512点FFT(参见方程1)。这一方式将三个基-8FFT进行级联以实现512点FFT。1「7「7f7人AA2、a=o、4=o、a=oJ^,十^M,^:》^《q其中,a',a2,a3,b,,b2,b3e(0…7)2^FFT的比例因子方程l频率抽选与时间抽选之差是旋转存储器系数。由于我们在使用基-8FFT单元来实现512点FFT运算,所以存在三级处理。图6是基-8FFT模块600的一些实施例的功能框图。类似于图5中的遗传FFT模块500,由于在正向变换与逆向变换之间的对称性,基-8FFT模块600可以被配置为具有较小变化的IFFT模块。FFT模块600可以实现于单个IC管芯上,其作为ASIC的一部分、作为FPGA或者作为任何逻辑实现方式。可选地,FFT模块600可以实现为相互通信的多个单元。此外,基-8FFT模块600不限于特定FFT结构。基-8FFT架构600包括配置为具有足以每行存储8个采样的存储器行宽度的采样存储器610。因此,采样存储器被配置为具有每行8个釆样的64行。FFT读取块620被配置用以从存储器提取行并且对各行中的采样执行8点FFT。基-8FFT模块600可以包括配置用以存储将要变换的采样的分立处理器存储器(未示出)。此外,基-8FFT模块600可以包括用于实现采样变换的分立处理器(未示出)。由于FFT模块600被配置用以执行该变换的就位计算,所以存储器用来存储FFT的各级的结果和FFT模块600的输出。读取块620耦合到配置用以执行8点FFT计算的8点流水线FFT块630。在一些实施例中,8点流水线FFT块630是计算一个基-8的蝶形核。另外,8点流水线FFT块630就FFT或者IFFT计算而言是可编程的。从存储器30610读取的值被立即寄存。来自8点流水线FFT块630的输出值被逐列写入8x8转置存储器650中。转置存储器650还耦合到四个复数乘法器660a、660b、660c、660d(统称为660)和旋转ROM640。复数乘法器660从转置存储器650读取旋转系数,基于来自旋转ROM640的指令来执行计算,并且将输出写回到转置存储器650。输出被写入到与输入相同的位置(即取代输入数据),从而允许转置存储器维持恒定的存储器覆盖区。与复数乘法器660所执行的读取和写入的顺序和位置有关的指令存储于旋转ROM640中。旋转ROM640包含每行4个旋转因子的122行。来自转置存储器650的输出也逐行写回到采样存储器610。可以用任何可写入数据存储来实现8x8转置存储器。存储器模块的实例包括诸如RAM、寄存器、闪存、磁盘、光盘等集成电路。在一些优选实施例中,基于与其它数据存储相比的成本/性能折衷来使用RAMFFT块使用基-8蝶形核的三次经过来执行单次512点FFT。来自前两次经过的结果将它们的一些值与旋转值相乘并且归一化。由于将八个值存储于存储器的单个行中,所以值的读取顺序不同于值的写回顺序。如果执行2k1/FFT,则存储器值在被发送到蝶形核之前被转置。基-8FFT需要8x8个寄存器。所有64个寄存器从蝶形核接收输入。在这些寄存器之中,56个寄存器从复数乘法器接收输入,而32个寄存器从主存储器接收输入。来自主存储器的输入被写入到寄存器行。来自蝶形核的输入被写入到寄存器列。以组的形式执行来自复数乘法器的输入。所有64个寄存器通过归一化计算和寄存器将输出发送到主存储器。归一化的顺序对于I/FFT的各个类型和各级而言是不同的。具体而言,56个寄存器需要旋转乘法。32个寄存器将它们的值发送到蝶形核。当值被发送到蝶形核时,逐列发送这些值。当值被发送到复数乘法器时,以组的形式执行。图7是在针对512点FFT在基-8模式下操作蝶形核700时使用的蝶形核700的一些实施例的功能框图。示出了FFT蝶形计算的信号流和旋转乘法。512点FFT使用具有64行(八个8点FFT各一行)和8歹i」(8个采样/行)的采样存储器610。寄存器块被配置为8x8矩阵(转置存储器650)。在FFT处理期间存在2次"旋转"乘法。图7中的旋转乘法是指与I/FFT蝶形的单次经过关联的乘法。采样存储器610的初始内容分别有八列的八行来排列。从采样存储器提取行并且对行中存储的值执行FFT。利用适当旋转因子对结果加权,并且将结果写入到寄存器组中。然后,寄存器组的值在被写回到采样存储器之前被转置。复写先前的寄存器值,从而使计算的执行顺序变得很重要。然而,这种使用相同寄存器并且仔细排序的方式允许FFT的更快计算和较低的存储器要求。这一点在图8a和8b中进一步加以描述。回到图7,当在核700中执行基-8FFT时,首先读取输入,在第一组加法器之前将输入进行位反转(bit-reversed)并且存储于寄存器中。对于基-8运算,位反转是完全3位反转0卄0、1~>4、2—2、3—6、4~>1、5—5、6—3、7^7。接着,如图7中所示分别加上这些值。例如,D0与D1相加以产生对-乂2"输出4(0)的输入。一般而言,一"T。,至w用于FFT运算。Z和V至m/用于IFFT运算。具体而言,在表l中详示了一替换。<table>tableseeoriginaldocumentpage32</column></row><table>为了举例说明,4区中的第4个相加和与第8个相加和与用于FFT的vi^相乘。对于IFFT,此值变为w6。V乘法的实现如下<formula>formulaseeoriginaldocumentpage32</formula>在7情况下,无需修改。<formula>formulaseeoriginaldocumentpage32</formula>在m/情况下,需要复数乘法器<32w2=(/+/0(O-川=2_/7。在V情况下,取代了对输入的实部执行2的补码取非及之后的相加,将实部的值保留不变并将后续加法器改变成减法器以考虑符号变化。w3=(/+ye);-+。在w"胄况下,需要复数乘法器。、V2V2」w4+1+_/0)=-/-W。t/情况不用于任何FFT计算。w5=(/+^)f-l+"f)。在^情况下,需要复数乘法器。w6=(/+_/幼(0+7"=-e+〃。在wM青况下,取代了对输入的虚部执行2的补码取非及之后的相加,将虚部的值保留不变并将后续加法器改变成减法器以考虑符号变化。^7=(/+_/2/++4^。在m/情况下,需要复数乘法器。、V2V2」为了进一步说明图7以及FFT和IFFT核的对偶性实现,将两组加法器用于第4个相加和与第8个相加和。一组计算w2(FFT)而另一组计算>/(IFFT)。一个信号根据需要FFT还是IFFT来控制使用哪个求和。因此,两者都进行计算,但是只使用其中之一。5区中的第6个值与第8个值需要实复数乘法器。在执行FFT时,其为m/和w3。在执行IFFT时,其分别为i/和w5。可以分解出因子^以产生方程组2:w1=尸/+尸g++尸g)(2)w7—尸g十j(尸7+尸0)FFT/IFFT信号用来将输入值导向加法器和减法器,并且将相加和与差值导向它们的最终目的地。分解出因子P表明这一实现需要两个乘法器和两个加法器(一个加法器和一个减法器)。对于^W可以完成相同运算(方程组3):々w3=_尸/+尸e+y—尸g)(3)w5=—尸/—尸^+y'(户/一尸g)取代了使用P,该核将把*=;用于这些乘积求和。通过使用R,方程于是变成(方程组4):w3=i/—/g(4)与前文一样,FFT/IFFT信号用来将输入值导向加法器和减法器,以及将相加和与差值导向它们的最终目的地。需要两个乘法器和两个加法器(一个加法器和一个减法器)。以与区域^相同的方式处理区域5中的平凡乘法乂和w6。根据实施例和硬件约束,如果时序约束这样要求,则这些计算可以在多个时钟循环中完成。可以添加寄存器集以捕获输出4值。第6个和第8个输出4值在被寄存之前与常数P和R相乘(方程组2和4)。寄存器的这一设置将用于最坏情况路径的计算平衡如下-第1循环乘法器—加法器—加法器—乘法器—乘法器第2循环加法器—乘法器—加法器—加法器将一个信号用来发出输出4或者输出8值。该信号确定需要基-4还是基-8运算。回顾第32段,可以在不同的级组合中实现FFT架构。在8x8x8x4序列的实例中,输出4用于2048点I/FFT运算(即8x8x8x4序列的第四级)。图8是512点基-8FFT的转置存储器乘法顺序800的视图。回顾一点各DFT为较小DFT(sDFT)向较大DFT(1DFT)的组合。这是蝶形运算的实质。虽然起初不是问题,但是后续sDFT依赖于来自先前sDFT的输出。这在处理器或者FFTe等待所基于的输入数据以完成计算时产生延迟。通过安排这些sDFT的计算顺序,可以实现FFT流水线,以使延迟最小化并且以最少时间产生全部FFT。34图8示出了sDFT的最佳排序800的分组。示出了各个单元的计算并且对这些计算分组。表2详示了从中导出输入X(k)的存储器中的具体行和列。列(各行中的采样)行(存储器012345670x(o)X(3>X(4>X(5)X(6)X(7>p的行)1x'(s)柳x(io)X(ll)W2)X,X(14)X(15)2W6)X,xo外X(20)x(")X(23)3X(24>X('25')X(2fi)X(29)X<3)4X(幼Xf33)X,Xp5)X,X(37)X(沐)X(39)5X(40,X'(4I)X(42>x柳,)X(")'x'(州X<47)幸)X(州X(50>X<5,>X<52>X{53)X(54>X(55>X浏X{57)X糊X(59i■X<60>X(('l)X(f,2>X柳表2各X(n)表示8点FFT。图9是基-8FFT计算时间线900的视图。在时域上示出执行基-8FFT所需要的时钟循环以及运算的执行顺序。FFTe中的基-8FFT计算涉及到四组运算读取采样、计算8点FFT、旋转乘法和写入输出。由于图8和图9密切相关并且最易于一起理解,所以这里将一起进行描述。在图9中,FFT时间线示出了向右增加的时间。随时间用CLK910的图形表示离散时间间隔。方波的每个完整循环表示参考时间单位。在这一实例中,校准参考时间单位以与足以完成8个复数采样的读取和写入访问的时间间隔一致。读取图形920表示采样的读取。各红色框代表完成一般为一次读取8个复数采样的特定读取任务所需要的时间。FFT-8点图形930表示8点FFT的计算,其包括蝶形计算。各FFT-8点框代表完成处理该框所代表的8点FFT的特定分组所需要的时间。基于任何余留的附加旋转计算来对8点FFT分组。在一些情况下,完成8点FFT并不够,因为仍然需要旋转乘法。旋转乘法图形940表示对8点FFT组的旋转乘法计算。各旋转乘法框代表完成处理该框所代表的特定旋转乘法所需要的时间。最后,写入图形950表示将最终输出向数据存储的写入。各写入框代表完成通常为一次写入8个复数采样的特定写入任务所需要的时间。在循环0,读取存储器的八行。当处理这些行内8个值中的每个值时,将其写入到转置寄存器的列中。在图8中表示为X(0)至X(7)的存储器值是从第一行读取的前8个值。在循环4,写入在图8中表示为X(0)、X(8)、X(16)、……X(56)的转置寄存器的第一列。前4个旋转系数的提取对应于组811中的4个值,具体为X(8)、X(16)、X(24)和X(32)。当对这前4个值进行旋转乘法时,蝶形为读取的存储器第二行的输出结果。将这8个值写入到转置寄存器的第二列中。第二组旋转系数的提取用于组812,具体为X(9)、X(17)、X(25)和X(33)。一旦蝶形结果变得可用,就可以进行组811至824中的旋转乘法。随后,在组811至组824中,一旦结果可用,转置寄存器的行就准备好写回到存储器的行。例如,所写入的存储器的第一行将用于X(0)至X(7)值。在已经读取和写入存储器的8行之后,类似地处理下一组的8行。该处理进行8次,从而对于所处理的全部512个采样完成存储器的64行(各保存8个采样)。在一些实施例中,值不是从行转置到列。对于不同的FFT级,所写入的存储器行可以来自一行转置寄存器值或者一列转置寄存器值。归一化寄存器可以从转置寄存器接收一行数据或者一列数据,按照需要执行其归一化操作,并且将值写入到存储器的行。图10示出了I/FFT引擎1000的另一示例性实现的框图设计。在图1-6中所示的部件可以通过如这里在图10中所示的模块来实现。在这些模块之间的信息流类似于图1-6。作为模块化的实现1000,处理系统1000包括用于存储第一数据的模块1010;用于存储第二数据的一个或者多个模块1050;用于存储第二数据的、比用于存储第一数据的模块更快的模块;用于从用于存储第一数据的模块接收多点输入的模块1020;用于在用于存储第二数据的一个或者多个模块中的至少一个模块内存储所接收的输入的模块1050;用于使用无延迟流水线对输入计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者的模块1090。这些模块可以分别实现于单个模块内或者使用多个子模块来实现。这些模块还可以组合形成更大的模块。在一些实施例中,用于对输入计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者的计算模块1090使用无缝流水线。计算模块1090还可以使用基-8蝶形核来处理数据。存储模块1050可以在至少64个用于存储第二数据的模块中存储所接收的输入。计算模块1090可以计算复数乘法,其中至少64个用于存储第二数据的模块1050中的56个模块从用于计算复数乘法的模块1060接收输入。接收模块1020可以从用于存储第一数据的模块1010接收输入,其中模块1050中的32个模块在用于存储第二数据的一个或者多个模块1050中的至少一个模块内存储所接收的输入。接收模块1020可以从用于存储第一数据的模块1010接收512点输入。输出模块1070可以输出所计算的变换。计算模块1090可以使用无延迟流水线对输入计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者,FFTe被配置用以在读取第一输入之后的12个循环(8+流水线延迟)开始写入输出。在流水线延迟短于4个循环的其它实施例中,FFTe被配置用以在读取第一输入之后的(8+流水线延迟)个循环开始写入输出。如图9中所示,FFT流水线的这种实现是无缝的。如果各过程920、930、940和950被视为分离的线程或者引擎,则对于给定的基-8FFT和给定的FFTe设计,在线程开始处理第一子任务的时刻与完成整个任务的时刻之间的时间为最少。因此,不需要线程/引擎的空闲。虽然用户可以出于无论什么原因(例如减少处理器热量、减少处理器负荷等)将间隙有意地引入到处理器/线程中,但是如果去除这些有意引入的间隙,则线程将简化为上述线程。为了说明无缝流水线FFT的这一性质,在读取过程920的实例中,第一子读取(X(0)的读取)在循环0开始,而最后子读取(X(7)的读取)在循环7结束时结束。由于存在全部八次读取(X(1)-X(7)),所以如果每次子读取在不同循环中开始,则读取存储器的所有八行所需要的最少时间为8个循环,即所述读取过程920所使用的准确时间。为了用另一实例说明,考虑FFT-8点过程930。第一子FFT处理(X(O))在循环1开始,而最后子FFT处理(X(7))在循环ll结束时结束。由于存储器有八行,所以如果每次子FFT处理在不同循环中幵始,则对存储器的所有八行进行FFT处理所需要的最少时间为10个循环(存储器的8行、每次子FFT处理需要3个循环),即所述FFT-8点过程930所使用的准确时间。接着,考虑旋转乘法过程940。基-8FFT需要14次旋转乘法。第一子旋转乘法(组18U)在循环3开始,而最后子旋转乘法(组14824)在循环18结束时结束。由于有14个旋转乘法组,所以如果每次子旋转乘法在不同循环中幵始,则对所有14组进行旋转乘法所需要的最少时间为16个循环(14组,每次子旋转乘法需要3个循环),即所述旋转乘法过程940所使用的准确时间。最后,考虑写入过程950。基-8FFT需要8次写入。第一子写入(输出0)在循环12(8+流水线延迟)开始,而最后子写入(输出7)在循环20(16+流水线延迟)结束时结束。由于有8次写入,所以如果每次子写入在不同循环中开始,则写入所有八组所需要的最少时间为8个循环(8个输出,每次子写入需要2个循环),即所述写入过程950所使用的准确时间。在多核或者多处理器系统的情况下,一些子任务可以在同一"现实世界"的时间循环中执行。然而,这种分析和方式扩展到这些多核领域中,因为所有多线程系统可以线性化成单线程。在双核系统中,跨度为4个循环的存储器八行读取仍然是无缝的。当双核的处理线性化为单核时,该读取将与前文一样需要8个循环。另外,FFT流水线的这一实现是无延迟的。如果各过程920、930、940和950被视为分离的线程或者引擎,则对于给定的基-8FFT和给定的FFTe设计,在FFT处理开始第一读取与FFT处理开始第一写入之间的全部时间为最少。虽然用户可以出于无论什么原因(例如减少处理器热量、减少处理器负荷等)将间隙有意地引入到基-8FFT处理中,但是如果去除这些有意引入的间隙,则线程将简化为上文公开的基-8FFT处理。为了说明无延迟流水线FFT的这一性质,在执行基-8FFT的实例中,第一写入直至最后8点FFT已经完成才可以执行。进而,最后8点FFT又直至存储器最后一行己被读取才能执行。由于有8行,所以在第一读取与第一写入之间需要的最少循环为12个循环(8次读取,3次FFT-8点,1次写入;8+流水线延迟),这正是如上文公开的情况。上述时钟循环独立于处理器和系统时钟。由于各种处理器实现命令不同,所以一个处理器可能需要2个处理器时钟来执行读取,而另一处理器可能需要3个处理器时钟。虽然所述多个操作按循环构成例程,但是重点在于独立于系统的FFT子例程的顺序。这里描述的FFT处理技术可以通过各种手段来实现。例如,这些技术可以用硬件、固件、软件或者其组合来实现。对于硬件实现,用来执行FFT的处理单元可以实现于一个或者多个专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、处理器、控制器、微控制器、微处理器、电子设备、设计用以执行这里所述功能的其它电子单元或者其组合内。对于固件和/或软件实现,这些技术可以利用执行这里所述功能的模块(例如过程、功能等)来实现。固件和/或软件代码可以存储于存储器中并且由处理器执行。存储器可以实现于处理器内或者位于处理器外部。提供了对所公开实施例的以上描述,以使本领域技术人员能够实现或者使用本发明。本领域技术人员将会清楚地知道对这些实施例的各种修改,这里限定的一般原理可以适用于其它实施例而不脱离本发明的精神和范围。因此,本发明并不限于这里示出的实施例,而应给予与这里公开的原理和新颖特征相一致的最广范围。权利要求1.一种装置,包括存储器;以及具有一个或多个寄存器以及无延迟流水线的快速傅立叶变换引擎(FFTe),所述FFTe被配置用以从主存储器接收多点输入,在所述一个或多个寄存器中的至少一个寄存器内存储所接收的输入,以及使用所述无延迟流水线对所述输入计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者。2.根据权利要求1所述的装置,其中,所述流水线是无缝的。3.根据权利要求1所述的装置,其中,所述FFTe是基-8蝶形核。4.根据权利要求1所述的装置,其中,所述FFTe是基-4蝶形核。5.根据权利要求1所述的装置,其中,所述FFTe具有至少64个寄存器。6.根据权利要求5所述的装置,还包括复数乘法器,其中所述至少64个寄存器中的56个寄存器从所述复数乘法器接收输入。7.根据权利要求5所述的装置,其中,所述至少64个寄存器中的32个寄存器从所述主存储器接收输入。8.根据权利要求1所述的装置,其中,所述FFTe被配置用以接收z点多点输入,其中z是512的倍数。9.根据权利要求1所述的装置,其中,所述FFTe还被配置用以输出所计算的变换。10.根据权利要求9所述的装置,其中,所述FFTe被配置用以在读取第一输入之后的x个循环开始写入所述输出,其中x是8加上流水线延迟。11.根据权利要求9所述的装置,其中,所述FFTe被配置用以在读取第一输入之后的y个循环完成写入所述输出,其中y是16加上流水线延迟。12.根据权利要求1所述的装置,其中,所述FFTe包括被配置用以读取第一组输入的第一组加法器,并且所述第一组输入在由所述第一组加法器读取之前进行位反转。13.—种快速傅立叶变换引擎(FFTe),配置用以从主存储器接收多点输入;在一个或多个寄存器中的至少一个寄存器内存储所接收的输入;以及使用无延迟流水线对所述输入计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者。14.根据权利要求13所述的FFTe,其中所述FFTe还被配置用以使用无缝流水线对所述输入计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者。15.根据权利要求13所述的FFTe,其中所述FFTe还被配置用以使用基-8蝶形核来计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者。16.根据权利要求13所述的FFTe,其中所述FFTe还被配置用以使用基-4蝶形核来计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者。17.根据权利要求13所述的FFTe,其中所述FFTe还被配置用以在至少64个寄存器内存储所接收的输入。18.根据权利要求17所述的FFTe,其中所述FFTe还被配置用以存储来自复数乘法器的所接收的输入,其中所述至少64个寄存器中的56个寄存器从所述复数乘法器接收输入。19.根据权利要求17所述的FFTe,其中所述FFTe还被配置用以在所述至少64个寄存器中的32个寄存器内存储来自所述主存储器的所接收的输入。20.根据权利要求13所述的FFTe,其中所述FFTe还被配置用以接收z点多点输入,其中z是512的倍数。21.根据权利要求13所述的FFTe,其中所述FFTe还被配置用以输出所计算的变换。22.根据权利要求21所述的FFTe,其中所述FFTe还被配置用以在读取第一输入之后的x个循环开始写入所述输出,其中x是8加上流水线延迟。23.根据权利要求21所述的FFTe,其中所述FFTe还被配置用以在读取第一输入之后的y个循环完成写入所述输出,其中y是16加上流水线延迟。24.根据权利要求13所述的FFTe,其中,所述FFTe包括被配置用以读取第一组输入的第一组加法器,并且所述第一组输入在由所述第一组加法器读取之前进行位反转。25.—种方法,包括提供存储器;提供具有一个或多个寄存器以及无延迟流水线的快速傅立叶变换引擎(FFTe);配置所述FFTe以从主存储器接收多点输入;在所述一个或多个寄存器中的至少一个寄存器内存储所接收的输入;以及使用所述无延迟流水线对所述输入计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者。26.根据权利要求25所述的方法,其中提供所述FFTe还包括提供无缝流水线。27.根据权利要求25所述的方法,其中提供所述FFTe包括提供基-8蝶形核。28.根据权利要求25所述的方法,其中-提供所述FFTe包括提供基-4蝶形核。29.根据权利要求25所述的方法,其中提供所述FFTe包括提供至少64个寄存器。30.根据权利要求29所述的方法,其中提供所述FFTe还包括提供复数乘法器,其中所述至少64个寄存器中的56个寄存器从所述复数乘法器接收输入。31.根据权利要求29所述的方法,其中提供所述FFTe包括提供所述至少64个寄存器中的32个寄存器以从所述主存储器接收输入。32.根据权利要求25所述的方法,其中配置所述FFT以接收多点输入包括配置所述FFTe以接收z点多点输入,其中z是512的倍数。33.根据权利要求25所述的方法,其中配置所述FFTe还包括输出所计算的变换。34.根据权利要求33所述的方法,其中配置所述FFTe包括在读取第一输入之后的x个循环开始写入所述输出,其中x是8加上流水线延迟。35.根据权利要求33所述的方法,其中配置所述FFTe包括在读取第一输入之后的y个循环完成写入所述输出,其中y是16加上流水线延迟。36.根据权利要求25所述的方法,其中提供所述FFTe还包括被配置用以读取第一组输入的第一组加法器,并且所述第一组输入在由所述第一组加法器读取之前进行位反转。37.—种处理系统,包括用于存储第一数据的模块;用于存储第二数据的一个或多个模块,其比所述用于存储所述第一数据的模块更快;用于从所述用于存储所述第一数据的模块接收多点输入的模块;用于在所述用于存储第二数据的一个或多个模块中的至少一个模块内存储所接收的输入的模块;以及用于使用无延迟流水线对所述输入计算快速傅立叶变换(FFT)和逆快速傅立叶变换(正FT)中的一个或两者的模块。38.根据权利要求37所述的处理系统,还包括用于使用无缝流水线对所述输入计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者的模块。39.根据权利要求37所述的处理系统,还包括用于使用基-8蝶形核来处理所述数据的模块。40.根据权利要求37所述的处理系统,还包括-用于使用基-4蝶形核来处理所述数据的模块。41.根据权利要求37所述的处理系统,还包括用于在至少64个所述用于存储第二数据的模块内存储所接收的输入的模块。42.根据权利要求41所述的处理系统,还包括用于计算复数乘法的模块,其中所述至少64个所述用于存储第二数据的模块中的56个模块从所述用于计算复数乘法的模块接收输入。43.根据权利要求41所述的处理系统,还包括用于从所述用于存储第一数据的模块接收输入的模块,其中32个所述模块在所述用于存储第二数据的一个或多个模块中的至少一个模块内存储所接收的输入。44.根据权利要求37所述的处理系统,还包括用于从所述用于存储所述第一数据的模块接收512点输入的模块。45.根据权利要求37所述的处理系统,还包括用于输出所计算的变换的模块。46.根据权利要求45所述的处理系统,还包括用于使用无延迟流水线对所述输入计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者的模块,所述FFTe被配置用以在读取第一输入之后的x个循环开始写入所述输出,其中x是8加上流水线延迟。47.根据权利要求45所述的处理系统,还包括用于使用无延迟流水线对所述输入计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者的模块,所述FFTe被配置用以在读取第一输入之后的y个循环完成写入所述输出,其中y是16加上流水线延迟。48.根据权利要求37所述的处理系统,还包括用于使用无延迟流水线对所述输入计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者的模块,所述FFTe被配置为包括第一组加法器,所述第一组加法器被配置用以读取第一组输入,并且所述第一组输入在由所述第一组加法器读取之前进行位反转。49.一种计算机可读介质,包含由I/FFT处理器用于执行I/FFT计算方法的指令集,所述指令包括用以从主存储器接收多点输入的例程;用以在一个或多个寄存器中的至少一个寄存器内存储所接收的输入的例程;以及用以使用无延迟流水线对所述输入计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者的例程。50.根据权利要求49所述的计算机可读介质,其中所述FFTe还被配置用以使用无缝流水线对所述输入计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者。51.根据权利要求49所述的计算机可读介质,其中所述FFTe还被配置用以使用基-8蝶形核来计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者。52.根据权利要求49所述的计算机可读介质,其中-所述FFTe还被配置用以使用基-4蝶形核来计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者。53.根据权利要求49所述的计算机可读介质,其中所述FFTe还被配置用以在至少64个寄存器内存储所接收的输入。54.根据权利要求53所述的计算机可读介质,其中所述FFTe还被配置用以存储来自复数乘法器的所接收的输入,其中所述至少64个寄存器中的56个寄存器从所述复数乘法器接收输入。55.根据权利要求53所述的计算机可读介质,其中-所述FFTe还被配置用以在所述至少64个寄存器中的32个寄存器内存储来自所述主存储器的所接收的输入。56.根据权利要求49所述的计算机可读介质,其中所述FFTe还被配置用以接收z点多点输入,其中z是512的倍数。57.根据权利要求49所述的计算机可读介质,其中所述FFTe还被配置用以输出所计算的变换。58.根据权利要求57所述的计算机可读介质,其中所述FFTe还被配置用以在读取第一输入之后的x个循环开始写入所述输出,其中x是8加上流水线延迟。59.根据权利要求57所述的计算机可读介质,其中所述FFTe还被配置用以在读取第一输入之后的y个循环完成写入所述输出,其中y是16加上流水线延迟。60.根据权利要求49所述的计算机可读介质,其中,所述FFTe包括被配置用以读取第一组输入的第一组加法器,并且所述第一组输入在由所述第一组加法器读取之前进行位反转。全文摘要描述了用于执行快速傅立叶变换(FFT)的技术。在一些方面中,利用一种装置来实现快速傅立叶变换的计算,该装置包括存储器(610);具有一个或多个寄存器(650)以及无延迟流水线(630)的快速傅立叶变换引擎(FFTe),该FFTe被配置用以从主存储器(610)接收多点输入,在一个或多个寄存器(650)中的至少一个存储器内存储所接收的输入,以及使用无延迟流水线对所述输入计算快速傅立叶变换(FFT)和逆快速傅立叶变换(IFFT)中的一个或两者。文档编号G06F17/14GK101553808SQ200780020693公开日2009年10月7日申请日期2007年4月4日优先权日2006年4月4日发明者K·S·库西诺,R·克里希纳穆尔蒂申请人:高通股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1