具体实施方式
本发明涉及对应于每一符号(Symbol)进行3次所规定FFT过程中,OFDM收信器所使用的FFT/IFFT运算核,交替地进行DIT方法的管线FFT和DIF方法的管线IFFT过程,不进行数据列变换,通过使用M(M为整数)倍于FFT输入输出样本时钟(Clock)频率的核心时钟(Core Clock),可以执行多个FFT过程。例如,对于需要进行3次FFT过程的OFDM收信器来说,M为4。
另外,为了以多次方式执行可变N-点(Variable N-point)FFT,根据DIT方法或DIF方法和FFT序列,不同地适用各阶段(Stage)的动作结构,使之具有共享特定存储器的结构。
下面,参照附图,对本发明的具体实施例进行详细说明。
这里说明的是对每一符号(Symbol)进行3次所规定FFT过程中,OFDM收信器的运算过程,表1是与对每一符号(Symbol)需要进行3次FFT运算的运算过程相关的表。
表1
FFT顺序 |
FFT/IFFT |
DIT/DIF |
输入序列 |
输出序列 |
传输时间 |
1 |
FFT |
DIT |
置换顺序(Permutated) |
自然顺序(Naturally Ordered) |
N |
2 |
IFFT |
DIF |
自然顺序(Naturally Ordered) |
置换顺序(Permutated) |
N |
3 |
FFT |
DIT |
置换顺序(Permutated) |
自然顺序(Naturally Ordered) |
2×N |
如表1所示,不管执行FFT还是IFFT,变换后的数据序列的顺序与变换前的数据序列的顺序不同。
顺序1通过使用DIT方法,把时域(Domain)上的OFDM符号载体(SymbolCarrier),即输入序列(Input Sequence)变换成频域上的序列,而输出序列(OutputSequence)的数据的排列顺序与输入序列相比发生变化。顺序2使用DIF方法的IFFT以及顺序3使用DIT方法的FFT,用于信道估计(Channel Estimation)。
无线信道环境具有时强时弱(Fading)的特点,在时域和频域上的信道状态在各个时间点上发生不规律的变化。这里,时强时弱(Fading)是指是两个以上电波相互干扰后,振幅以及相位发生不规则变化的现象。对于信道进行振幅和相位推定的过程叫做信道估计(Channel Estimation)。信道估计可以说是对无线信道的频率应答进行估计的过程。
通常把FFT的大小(Size)叫做点(Point),下面为了说明上的方便,以8192点的FFT/IFFT运算核,即FFT的最大规格为8192的情况为例进行说明。因此,虽然说明的只是8192点及其以下的点,但把本发明修改成适合于更大规格FFT动作的,也包括在本发明的技术思想范围内。
图1是本发明的FFT/IFFT运算核100模块图。
如图1所示,FFT/IFFT运算核100包括输入缓冲器(Buffer)110、第1多路器(Multiplexer)M1、运算模块120、以及控制模块130。
输入缓冲器110存储并输出第1FFT输入序列(FFT Inputs)。
第1多路器M1接通(Multiplex)第1FFT输入序列(FFT Inputs)以及第3FFT输入序列(FFT Inputs)的其中一个。
控制模块130产生信号处理方式指示信号DIT/DIF(图2或图3)以及分路指示信号BP(图2或图3)。信号处理方式指示信号DIT/DIF决定把输入的序列以DIT方式处理或是以DIF方式处理。分路指示信号BP把输入的序列以没有处理的原有状态通过。这里,信号处理方式指示信号DIT/DIF以及分路指示信号BP根据FFT的大小决定。
运算模块120应答于信号处理方式指示信号DIT/DIF以及分路指示信号BP,转换第1FFT输入序列(FFT Inputs)以及第3FFT输入序列(FFT Inputs)、分别生成第1FFT输出序列(FFT Outputs)以及第3FFT输出序列(FFTOutputs)、转换第2IFFT输入序列(IFFT Inputs)、生成第2IFFT输出序列(IFFTOutputs)。运算模块120具有串连的若干个运算阶段。
第0运算阶段121应答于相应信号处理方式指示信号DIT/DIF以及相应分路指示信号BP,把第1多路器M1的输出信号Mo或第1运算阶段122的第2输出信号D1F原本地分路或进行信号处理,生成第1输出信号D0T或第2输出信号D0F(未图示)。这里进行信号处理是意味着对输入序列进行FFT或IFFT运算,同样适用于下面的说明。
第1运算阶段122应答于相应信号处理方式指示信号DIT/DIF以及相应分路指示信号BP,把第0运算阶段121的第1输出信号D0T或第2运算阶段123的第2输出信号D2F原本地分路或进行信号处理后,生成第1输出信号D1T或第2输出信号D1F。
第2运算阶段123到第5运算阶段126与第1运算阶段122相同的逻辑连接,这里不再详细说明。
第6运算阶段127应答于相应信号处理方式指示信号DIT/DIF以及相应分路指示信号BP,把第5运算阶段126的第1输出信号D5T或第2IFFT输入序列(IFFT Inputs)原本地或进行信号处理,生成第1输出信号D6T(未图示)或第2输出信号D6F。
综上所述,第1FFT输入序列(FFT Inputs)以及第3FFT输入序列(FFTInputs)被输入时,以从第0运算阶段121开始依次到第6运算阶段127的方向,执行DIT方式运算,生成第1FFT输出序列(FFT Outputs)以及第3FFT输出序列(FFT outputs)。第2IFFT输入序列(IFFT Inputs)被输入到运算模块120时,以从第6运算阶段127依次到第0运算阶段121的方向、执行DIF方式的运算,生成第2IFFT输出序列(IFFT Outputs)。
所述FFT/IFFT运算的执行方向由信号处理方式指示信号DIT/DIF决定。8192点的FFT/IFFT运算中,串连的多个运算阶段121-127全部被使用。但是,对于小于8192的FFT/IFFT运算来说,根据分路指示信号BP,有一部分运算阶段不会被使用。也就是说,将不会被用于运算的运算阶段所连接的分路指示信号BP进行启动(Enable),让输入到相应运算阶段的序列以没有被运算的状态直接分路到下一运算阶段中。
如上所述,本发明图1的FFT/IFFT运算核100的N为8192,即为8192点FFT/IFFT运算核。因此,第0运算阶段到第6运算阶段中的某一个运算阶段具有基数-2(Radix-2)结构,其余6个运算阶段应具有基数-4(Radix-4)结构。这里基数-2结构是处理2样本的输入序列的结构,基数-4结构是处理4样本的输入序列的结构。这些被串连后,总共成为8192(2*46)点。上面所述的样本和下面的说明中使用的样本包括I(In-phase)信道以及Q(Quadrature)信道的信息。
另外,图1的本发明FFT/IFFT运算核100使用于OFDM收信器为宜。
为了容易理解本发明的概念,假设图1的第0运算阶段121具有基数-2结构,其它6个运算阶段122-127具有基数-4的结构。
图2是图1的第0运算阶段121的内部模块示意图。
如图2所示,第0运算阶段121包括第2多路器M2、第3多路器M3、第4多路器M4、基数-2蝶式模块(Butterfly)210、第1延时器220以及第1乘法器230。
第2多路器M2在信号处理方式指示信号DIT/DIF指示DIT方式的运算时,选择并接通第1多路器M1(图1)的输出信号Mo;信号处理方式指示信号DIT/DIF指示DIF方式的运算时,选择并接通第1运算阶段122的第2输出信号D1F。第3多路器M3在信号处理方式指示信号DIT/DIF指示DIT方式的运算时,选择并接通旋转因子(Twiddle Factor)WK(n);信号处理方式指示信号DIT/DIF指示DIF方式的运算时,选择并接通单位旋转因子(1,Unit Weight)。这里K是整数,代表阶段的序号。例如,图2中使用的K为0时,这时的旋转因子表示为W0(n)。
基数-2蝶式模块210从第2多路器M2的输出信号中,把一部分输出信号分路,对剩余的输出信号以及由第1延时器220输出的延时信号进行蝶式(Butterfly)运算。第1延时器220把由基数-2蝶式模块210分路的信号延时,生成延时信号。第1乘法器230对第3多路器M3的输出信号和基数-2蝶式模块210的输出信号进行复数乘法(Complex Multiplication)。
第4多路器M4在分路指示信号BP处于失效(Disable)状态时,选择并接通第1乘法器230的输出信号;分路指示信号BP处于启动(Enable)状态时、选择并接通第2多路器M2的输出信号。即,分路指示信号BP被启动(Enable)时,第0运算阶段121(图1)被排除于FFT/IFFT运算,因此分路(Bypass)通过第2多路器M2输入的信号。
第4多路器M4的输出信号成为第1输出信号D0T以及第2输出信号D0F。信号处理方式指示信号DIT/DIF指示DIT方式的运算时,第2输出信号D0F不使用于接下来的下一运算阶段;而信号处理方式指示信号DIT/DIF指示DIF的方式运算时,第1输出信号D0T不会被使用于下一运算阶段。因此如图2所示,即使同时输出第1输出信号D0T以及第2输出信号D0F,FFT/IFFT运算也不会出现问题。
图3是图1的第1运算阶段122到第6运算阶段127的内部模块示意图。
如图3所示,第K(K为1到6之间的任一整数)运算阶段122-127包括第5多路器M5、第6多路器M6、第7多路器M7、基数-4蝶式模块310、延时模块320以及第2乘法器330。
第5多路器M5在信号处理方式指示信号DIT/DIF指示DIT方式的运算时,选择并接通第(K-1)运算阶段的第一输出信号D(K-1)T;信号处理方式指示信号DIT/DIF指示DIF方式的运算时,选择并接通第(K+1)运算阶段的第2输出信号D(K+1)F。当第K运算阶段为第6运算阶段127时,选择并接通第2 IFFT输入序列(IFFT Inputs)(图1),替代第2输出信号D(k+1)F。第6多路器M6在应用于FFT/IFFT运算各运算阶段中的最终阶段时,应答于控制信号LS(LastStage),选择单位旋转因子(1);第6多路器M6在应用于FFT/IFFT运算的各运算阶段中的中间使用的运算阶段时,选择并接通由信号处理方式指示信号DIT/DIF决定的旋转因子WK(n)。
基数-4蝶式模块310从第5多路器M5的输出信号中分路一部分信号,对第5多路器M5输出信号中的剩余信号以及由延时模块320输出的延时信号,进行蝶式运算。延时模块320对基数-4蝶式模块310分路的信号进行延时,生成所述多个延时信号。延时模块320具有第1延时器321、第2延时器322、第3延时器323。第1延时器321把基数-4蝶式模块310分路信号中的第1信号,延时一定时间。第2延时器322把基数-4蝶式模块310分路信号中的第2信号,延时一定时间。第3延时器323把基数-4蝶式模块310分路信号中的第3信号,延时一定时间。基数-4蝶式模块310对第1延时器321到第3延时器323以及第5多路器M5的输出信号进行蝶式运算,而蝶式运算所生成的4个输出信号中,只有一个信号被输出,其余3个输出信号重新存储于延时器321-323中。
第2乘法器330对第6多路器M6的输出信号和基数-4蝶式模块310的输出信号进行复数乘法。第7多路器M7在分路指示信号BP被启动(Enable)时,选择并接通第5多路器M5的输出信号;分路信号BP失效(Disable)时,选择并接通第2乘法器330的输出信号。即分路信号BP被启动(Enable)时,第K运算阶段排除于FFT/IFFT运算,因此分路(Bypass)通过第5多路器M5输入的信号。
这里第7多路器M7的输出信号成为第1输出信号DKT以及第2输出信号DKF。信号处理方式指示信号DIT/DIF指示DIT方式的运算时,不使用第2输出信号DKF;而信号处理方式指示信号DIT/DIF指示DIF方式运算时,不使用第1输出信号DKT。因此,如图3所示,即使同时输出第1输出信号DKT以及第2输出信号DKF,也不会对FFT/IFFT运算产生问题。图2以及图3的旋转因子Wk(n)按各运算阶段相互不同。
虽然,附图中没有详细记录,但依次使用多个运算阶段时,在最终运算阶段中,多路器M3(图2)、M6(图3)接通至乘法器230(图2)、330(图3)的旋转因子WK(n),恒定为1(one)。对这一部分,只要参照图12即可以容易理解。
图4是多种大小(Size)输入序列的情况下,相关的各运算阶段使用与否以及使用顺序示意图。
图4的箭头方向是运算执行顺序,数字是运算阶段的序号。
首先,对DIT方式运算执行过程进行说明。
这一情况下,由于本发明FFT/IFFT运算核100(图1)可处理的最大规格为8192,因此如果处理更小规格的序列,则应只使用内设的各运算阶段中的一部分,其余的进行分路处理。
如图4所示,FFT的大小(Size)为16时,依次使用两个具有基数-4结构的运算阶段即可。这里以依次使用第1运算阶段1以及第2运算阶段2的(1->2)为例进行说明。FFT的大小(Size)为32时,只要在FFT大小(Size)为16的结构上,把具有基数-2结构的第0运算阶段0进行追加为(0->1->2)即可。FFT的大小(Size)为1024时,依次使用具有基数-4结构的5个运算阶段即可,这里的实施例中,依次使用了第1运算阶段1到第5运算阶段5,成为(1->2->3->4->5)。同理,对于1024两倍的2048来说,只要追加具有基数-2结构的第0运算阶段0而成为(0->1->2->3->4->5)即可。
进行DIF方式运算的情况,也可以用相同的理论进行说明。
如图4所示,IFFT的大小(Size)为16时,依次使用两个具有基数-4结构的运算阶段即可。这里以分路第2运算阶段2后使用第3运算阶段3以及第1运算阶段1的(3->1)为例进行说明。IFFT的大小(Size)为32时,只要在IFFT大小(Size)为16的结构上,把具有基数-2结构的第0运算阶段0进行追加为(3->1->0)即可。IFFT的大小(Size)为1024时,依次使用具有基数-4结构的5个运算阶段即可,这里的实施例中,分路第5运算阶段5后,依次使用了第6运算阶段6到第1运算阶段1而成为(6->4->3->2->1)。同理,对于1024两倍的2048来说,只要追加具有基数-2结构的第0运算阶段0而成为(6->4->3->2->1->0)即可。
图5是FFT/IFFT的大小(Size)不同的情况下,各运算阶段中使用的存储器容量(Memory Depth)示意图。
图5中,各模块的内部数字意味着存储器容量(Memory Depth),没有记录的各模块代表与未使用的运算阶段对应的存储器。
为了实现只用一个FFT运算核100(图1),依次进行每一符号(Symbol)的FFT过程、IFFT过程以及FFT过程,需要设置额外的存储器(Memory)。辅助的存储器在第1FFT输出DIT时存储第2 IFFT输入序列,在第2 IFFT输出DIF时存储第3 FFT的DIT输入序列。
下面,对此进行详细说明。从DIT向DIF变更FFT动作方法时,需要具有可存储最大(N/4)个各样本的存储器,而从DIF向DIT变更FFT动作方法时,需要具有可存储最大N个样本的存储器。
请再参考图1,为了解决所述有关存储器的问题,把情况分为存储在输入缓冲器110(图1)的相应于每一样本的比特数(Bits Per Sample)小于可在FFT内部运算阶段处理的相应于每一样本的比特数(Bits Per Sample)的情况,以及存储在输入缓冲器110的相应于每一样本的比特数(Bits Per Sample)等于可在FFT内部运算阶段处理的相应于每一样本的比特数(Bits Per Sample)的情况。
第一,存储在输入缓冲器110的相应于每一样本的比特数(Bits Per Sample)小于可在FFT内部运算阶段处理的相应于每一样本的比特数(Bits PerSample)N(N为整数)的情况下,作为DIT和DIF之间所需的存储器,使用与(N/4)样本大小相同的辅助存储器;作为DIF和DIT之间所需的N样本存储器,共享使用辅助的(N/4)样本存储器和第6运算阶段127的(3N/4)样本存储器。由于本发明的FFT/IFFT运算核100最大可以处理8192比特的输入序列,所述情况相当于需要处理小于8192比特的输入序列的情况。这一情况下,可以把输入缓冲器110以如下方式划分区域进行使用。
图6是相应于存储在输入缓冲器的每一样本的比特数(Bits Per Sample)小于可在FFT内部运算阶段处理的相应于每一样本的比特数(Bits Per Sample)的情况下,输入缓冲器结构以及使用过程的一实施例示意图。
如图6所示,输入缓冲器的相应于每一样本的比特数(Bits Per Sample)小于可在FFT内部运算阶段处理的相应于每一样本的比特数(Bits Per Sample)的情况下,把图1的输入缓冲器110的区域可以划分为8192容量的1个单口-静态随机存储器(Single Port-Static Random Access Memory,下面简称为SP-SRAM)601和2048容量的一个SP-SRAM 602。这里2048容量的SP-SRAM602是上面说明的存储器,即大小相当于(N/4)样本的辅助存储器。读/写(Read/Write)第1符号1后、读写第2符号2以及读写后续符号3-6的过程,按SP-SRAM 601和SP-SRAM 602的右侧所示箭头方向进行。
第二,输入缓冲器110的相应于每一样本的比特数(Bits Per Sample)等于可在FFT内部运算阶段处理的相应于每一样本的比特数(Bits Per Sample)的情况下,作为DIT和DIF之间所需的(N/4)样本存储器,共享使用输入缓冲器110的(N/4)容量;作为DIF和DIT之间所需的N样本存储器,共享使用的输入缓冲器110的(N/4)容量大小的存储器和第6运算阶段127的(3N/4)样本存储器。这一情况下,也可以把输入缓冲器110按下面的方式划分区域使用。
图7是相应于存储在输入缓冲器的每一样本的比特数(Bits Per Sample)等于可在FFT内部运算阶段处理的相应于每一样本的比特数(Bits Per Sample)的情况下,输入缓冲器结构以及使用过程的一实施例示意图。
如图7所示,输入缓冲器110的相应于每一样本的比特数(Bits Per Sample)等于可在FFT内部运算阶段处理的相应于每一样本的比特数(Bits Per Sample)的情况下,存储器的时钟脉冲频率(Clock Frequency)与FFT/IFFT运算核100的时钟脉冲频率(Clock Frequency)相同时,输入缓冲器110用2048容量的五个SP-SRAM 701-705构成(左侧)。存储器的时钟脉冲频率(Clock Frequency)为FFT/IFFT运算核100时钟脉冲频率(Clock Frequency)的2倍时,输入缓冲器110由10240容量的一个SP-SRAM 706构成(右侧)。
通过4个存储器701-704对第1符号1进行写(Write)以及读(Read)后,进行对第2符号2的写(Write)以及读(Read),后续的第2符号2的读(Read)、写(Write)过程通过4个存储器705、701、702、703进行。接下来,对第3个符号3的写(Write)以及读(Read)的过程通过4个存储器704、705、701、702进行。
以图7左侧的结构,构成输入缓冲器110时,每个符号都存在与(N/4)样本大小相应的不使用的区段。例如,为了执行第1符号1的FFT,从运算模块120读入N样本701-704之后,在存储第2符号2的输入缓冲器110的区段中,图7的第4个存储器704一直处于空闲(Idle)状态。即,对于每一输入符号(Input Symbol)都存在相应于(1/4)N样本大小的空闲(Idle)状态的存储器。另外,在DIF输出和DIT输入之间,由于第6运算阶段127的(3N/4)样本存储器可能是只执行读入存取(Read Access)、或者不存在任何存取的区段,因此在这一区段中,把DIT输入信号写入(Write)在存储器后,在下一阶段中进行读取(Read),以此可以共享(3N/4)样本存储器。
如图6以及图7所示,使用一定容量存储器时,使用与对象容量相同的一个存储器,比使用多个存储器更加节省面积以及加快速度。从而,根据这种优缺点,可以由设计人员任意决定所述存储器的结构。
图8是输入缓冲器存储的每一样本相应比特数小于可在FFT内部运算阶段处理的每一样本相应比特数的情况下,各运算阶段的存储器种类以及容量。
图9是存储在输入缓冲器的每一样本相应比特数等于可在FFT内部运算阶段处理的每一样本相应比特数的情况下,各运算阶段的存储器种类以及容量。
如图8、图9所示,左侧是存储器所使用的时钟脉冲频率与FFT/IFFT运算核所使用的时钟脉冲频率相同时的情况,右侧是存储器所使用的时钟脉冲频率为FFT/IFFT运算核所使用的时钟脉冲频率的两倍时的情况。
如图8所示,输入缓冲器存储的每一样本相应比特数小于可在FFT内部运算阶段处理的每一样本相应比特数的情况下,输入缓冲器包括辅助的(N/4)存储器(Extra Memory)。如图9所示,输入缓冲器存储的每一样本相应比特数等于可在FFT内部运算阶段处理的每一样本相应比特数的情况下,输入缓冲器的总容量为10240。
图10是32-点DIT FFT的信号流程图。
图11是32-点DIF IFFT的信号流程图。
图10以及图11是与普遍公开的运算过程相关的内容。因此,这里不再进行详细说明。
图12是执行32-点DIT运算以及32-点DIF运算的各运算阶段之间的连接关系示意图。
如图12所示,为了执行32-点DIT运算以及32-点DIF运算,需要包括具有基数-2结构的一个运算阶段以及具有基数-4结构的两个运算阶段。这里为了说明上的方便,假设使用具有基数-2结构的第0运算阶段1210,以及具有基数-4结构的第1运算阶段1220以及第2运算阶段1230。
如图12的上半部所示,执行32-点DIT时,DIT输入序列(DIT Inputs)通过第0运算阶段1210、第1运算阶段1220、第2运算阶段1230,生成DIT输出序列(DIT Outputs)。如图12的下半部所示,执行32-点DIF时,DIF输入序列(DIF Inputs)通过第3运算阶段1240、第1运算阶段1250、第0运算阶段1260,生成DIF输出序列(DIF Outputs)。这里,运算最终阶段的旋转因子WK(n)恒定为1(one)。图12的各运算阶段的顺序与图4的32-点DIT以及32-点DIF运算顺序相对应。
图13是连续3次输入时的32-点DIT/DIF动作时间示意图。
图13中显示处理DIT的FFT运算、处理DIF的IFFT运算,最后处理DIT的FFT运算时的时间。图13所示的时间图表,对于所属技术领域的技术人员来说是非常容易理解的图表,因此省略其详细说明。
虽然没有图示,但本发明的FFT/IFFT运算核100的运算阶段包括多个存储器,这些存储器使用于构成运算模块120的多个运算阶段。如果为了3次运算需要使用3个运算核,则多个运算阶段各自的存储器所在面积会比本发明大3倍。但是本发明的运算核进行3次运算时,以时间分割方式共享运算核,与现有技术相比,可以把所需面积减少到1/3。
上面,参照附图,对本发明的技术思想进行了说明。但这只是对本发明最佳实施例的说明,并不限制本发明。当然,对于具有本发明所属领域基本知识的人员来说,可以在本发明技术思想范围内,对本发明进行多种变形以及模仿。