CN101788974A - 可变点fft/ifft运算方法、装置及系统 - Google Patents
可变点fft/ifft运算方法、装置及系统 Download PDFInfo
- Publication number
- CN101788974A CN101788974A CN 201010123082 CN201010123082A CN101788974A CN 101788974 A CN101788974 A CN 101788974A CN 201010123082 CN201010123082 CN 201010123082 CN 201010123082 A CN201010123082 A CN 201010123082A CN 101788974 A CN101788974 A CN 101788974A
- Authority
- CN
- China
- Prior art keywords
- butterfly
- ram
- data
- processing element
- butterfly computation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Radar Systems Or Details Thereof (AREA)
- Complex Calculations (AREA)
Abstract
本发明实施例公开一种可变点FFT/IFFT运算方法、装置及系统,涉及信号处理技术,解决了FFT/IFFT处理延迟较长问题。该方法包括:前m级蝶形运算的每级蝶形运算中,从每个蝶形运算单元各自对应的第一RAM中依次读取两个数据到对应蝶形运算单元,并将蝶形运算后数据原址写回第一RAM;从每个蝶形运算单元各自对应的第二RAM中依次读取两个数据到对应蝶形运算单元,并将蝶形运算后数据原址写回第二RAM;第m+1级至第n级蝶形运算的每级蝶形运算中,分别从每个蝶形运算单元各自对应的两个RAM中分别读取一个数据到对应蝶形运算单元,并将蝶形运算后数据原址写回所述对应的两个RAM中。本发明实施例应用于信号处理领域。
Description
技术领域
本发明涉及信号处理技术领域,尤其涉及一种可变点FFT/IFFT运算方法、装置及系统。
背景技术
在通信领域中,往往根据不同的需求要求做不同点数的FFT/IFFT运算(快速傅里叶变换/快速傅里叶逆变换),甚至在同一个系统中的不同时刻需要完成不同点数的FFT/IFFT运算。如多模中频的ASIC(Application SpecificIntegrated Circuit,专用集成电路)芯片中,需要对UMTS(Universal MobileTelecommunication System,通用移动通信系统)、CDMA(Code Division MultipleAddressing,码分多址)、LTE(Long Term Evolution,一种3G移动通讯的长期演进技术)、GSM(Global System for Mobile communications,全球移动通信系统)等各种制式中的一种或者几种制式同时进行处理。在LTE制式单载波的情况下,需要做AWPC削波(Adaptive Weight Peak Cancellation,自适应权重削波),由于LTE包括1.4M、3M、5M、10M、15M、20M等各种不同的带宽模式,这是就需要根据LTE不同的带宽模式做256点、512点、1024点、2048点FFT/IFFT运算,且处理延迟必须控制在2个LTE的symbol之内。
现有技术中实现2048、1024、512点可变点FFT/IFFT的典型结构如图1所示,该可变点FFT/IFFT的结构是基于顺序输入倒序输出的。
其中x(n)表示输入的等待进行FFT运算的数据。Clk表示工作时钟。FFT点数指示用于指示FFT的点数。x(k)表示FFT的输出,1024点单独输出,2048和512点的FFT公用同一个输出。
表示为一个深度为1024或512的FIFO,深度根据FFT的点数确定。图1中其它类似图形的功能相同。和分别为两种不同结构的FFT蝶形计算单元。表示10bit/9bit的计数器的第10bit/9bit。计数器的位宽由FFT点数确定,图1中类似图形功能相同。
然而发明人发现在采用上述结构进行可变点运算时,由于该结构采用串行结构组织FFT蝶形计算单元,在FFT运算过程中处理数据的延迟较长。如在做LTE单载波AWPC削波的可变点FFT/IFFT运算时,会超过2个LTE的symbol。
发明内容
本发明的实施例提供一种可变点FFT/IFFT运算方法、装置及系统,在进行可变点FFT/IFFT运算时,降低了可变点FFT/IFFT的处理延迟。
为达到上述目的,本发明的实施例采用如下技术方案:
一种可变点FFT运算装置,包括:
2n-m个深度为2m的RAM,用于存放2n点数据,所述每点数据分别存储在各自顺序对应地址进行位倒序操作后得到的位倒序地址中;
2n-m-1个蝶形运算单元,用于对读写控制单元从所述RAM中读出的数据依次进行蝶形运算;
读写控制单元,用于在前m级蝶形运算的每级蝶形运算中,从每个蝶形运算单元各自对应的第一RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第一RAM;从每个蝶形运算单元各自对应的第二RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第二RAM;
在第m+1级至第n级蝶形运算中的每级蝶形运算中,分别从每个蝶形运算单元各自对应的两个RAM中分别读取一个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回所述对应的两个RAM中。
一种可变点FFT/IFFT运算方法,其中2n点数据存放在2n-m个深度为2m的RAM中,所述每点数据分别存储在各自顺序对应地址进行位倒序操作后得到的位倒序地址中,该方法包括:
在前m级蝶形运算的每级蝶形运算中,从每个蝶形运算单元各自对应的第一RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第一RAM;从每个蝶形运算单元各自对应的第二RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第二RAM;
在第m+1级至第n级蝶形运算中的每级蝶形运算中,分别从每个蝶形运算单元各自对应的两个RAM中分别读取一个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回所述对应的两个RAM中。
一种FFT/IFFT处理系统,包括:
FFT运算装置,用于在2n-m个深度为2m的RAM中存放2n点数据,所述每点数据分别存储在各自顺序对应地址进行位倒序操作后得到的位倒序地址中,在前m级蝶形运算的每级蝶形运算中,从每个蝶形运算单元各自对应的第一RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第一RAM;从每个蝶形运算单元各自对应的第二RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第二RAM;
在第m+1级至第n级蝶形运算中的每级蝶形运算中,分别从每个蝶形运算单元各自对应的两个RAM中分别读取一个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回所述对应的两个RAM中;
地址变换装置,用于将FFT运算装置的预设输出地址进行位倒序操作得到IFFT运算装置的输入地址;
IFFT运算装置,用于将从FFT运算装置的预设输出地址读出的数据写入地址变换装置得出的IFFT运算装置的输入地址中,在前m级蝶形运算的每级蝶形运算中,从每个蝶形运算单元各自对应的第一RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第一RAM;从每个蝶形运算单元各自对应的第二RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第二RAM;
在第m+1级至第n级蝶形运算中的每级蝶形运算中,分别从每个蝶形运算单元各自对应的两个RAM中分别读取一个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回所述对应的两个RAM中。
本发明实施例提供的可变点FFT/IFFT装置、运算方法及系统,通过将需要进行FFT/IFFT运算的2n点数据中的每点数据分别存储在各自顺序对应地址进行位倒序操作后得到的位倒序地址中,然后2n-m-1个蝶形运算单元对读写控制单元从所述RAM中读出的数据依次进行蝶形运算。其中,前m级蝶形运算的每级蝶形运算中,从每个蝶形运算单元各自对应的第一RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第一RAM;从每个蝶形运算单元各自对应的第二RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第二RAM。在第m+1级至第n级蝶形运算中的每级蝶形运算中,分别从每个蝶形运算单元各自对应的两个RAM中分别读取一个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回所述对应的两个RAM中。
由于在每级蝶形运算中,每个蝶形运算单元都在同时将读写控制单元从所述每个蝶形运算单元各自对应的RAM中读取数据进行蝶形运算,并将每次的蝶形运算结果原址写回,直到所述每个蝶形运算单元各自对应的RAM中的最后一个数据进行蝶形运算,并完成将该蝶形运算后的最后一个数据写回上述对应的RAM中,才开始进行下一级的蝶形运算。也就是本发明实施例中的可变点FFT/IFFT装置中的各个蝶形运算单元是并行流水工作的,与现有技术中采用串行结构的可变点FFT/IFFT装置相比,降低了FFT/IFFT运算的处理延迟。
同时,由本发明实施例所描述的FFT/IFFT处理系统,首先将2n点数据进行FFT运算,然后通过地址变换装置将将FFT运算装置的预设输出地址进行位倒序操作得到IFFT运算装置的输入地址,从上述RAM中按照FFT运算装置的预设输出地址读出的各点数据,按照IFFT运算装置的输入地址进行写入,然后进行IFFT运算。由于FFT运算装置中将顺序输入的2n点数据存放在按照各自顺序对应在上述RAM中的地址进行位倒序操作后得到的位倒序地址中,通过上述地址变换装置得出的输入地址可以确保各点数据仍然存放于对应在上述RAM中的地址,然后该读出的各点数据将作为IFFT运算装置的输入数据,接着在进行IFFT运算。与现有技术相比中直接将顺序数据输入FFT运算装置得出的倒序数据读出,再通过调整该读出的倒序数据为顺序数据,然后再输入IFFT运算装置进行IFFT运算相比,减小了FFT/IFFT处理系统的数据处理延迟。
另外,由于本发明实施例中通过地址变换后直接将数据从FFT运算装置读入IFFT运算装置,与现有技术中通过调整该读出的倒序数据为顺序数据时需要采用深度为2n的RAM来保存需要调整的2n点数据相比,减小了硬件资源的耗费量。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术可变点FFT/IFFT的结构图;
图2为实施例1可变点FFT运算装置的结构框图;
图3为实施例1可变点FFT/IFFT运算方法的流程图;
图4为实施例1中FFT/IFFT处理系统的结构图;
图5为实施例2可变点FFT运算装置的结构框图;
图6为实施例2中2048点数据的存放顺序图;
图7为实施例2中2048点数据的FFT运算流程图;
图8为实施例2中1024点数据的存放顺序图;
图9为实施例2中1024点数据的FFT运算流程图;
图10为实施例2中512点数据的存放顺序图;
图11为实施例2中512点数据的FFT运算流程图;
图12为实施例2中256点数据的存放顺序图;
图13为实施例2中256点数据的FFT运算流程图;
图14为实施例2FFT运算装置处理多路数据的示意图;
图15为实施例2可变点FFT/IFFT运算方法的流程图;
图16为实施例2中FFT/IFFT处理系统的结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1:
本发明实施例提供一种可变点FFT运算装置,如图2所示,该装置包括:深度为2m的RAM11、蝶形运算单元12和读写控制单元13。
其中,2n-m个深度为2m的RAM11,用于存放2n点数据,所述每点数据分别存储在各自顺序对应地址进行位倒序操作后得到的位倒序地址中。各点数据存放的地址在进行蝶形运算过程中为固定不变的。
2n-m-1个蝶形运算单元12,用于对读写控制单元从所述RAM中读出的数据依次进行蝶形运算;
读写控制单元13,用于在前m级蝶形运算的每级蝶形运算中,从每个蝶形运算单元12各自对应的第一RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第一RAM;从每个蝶形运算单元12各自对应的第二RAM中依次读取两个数据到对应的蝶形运算单元12,并将蝶形运算后的数据原址写回第二RAM;
在第m+1级至第n级蝶形运算中的每级蝶形运算中,分别从每个蝶形运算单元12各自对应的两个RAM中分别读取一个数据到对应的蝶形运算单元12,并将蝶形运算后的数据原址写回所述对应的两个RAM中。
由于本发明实施例中的可变点FFT装置中的各个蝶形运算单元是并行流水工作的。在每级蝶形运算中,每个蝶形运算单元都在同时将读写控制单元从所述每个蝶形运算单元各自对应的RAM中读取数据进行蝶形运算,并将每次的蝶形运算结果原址写回,直到完成各点数据的蝶形运算。在整个可变点FFT装置的处理过程中,每一个蝶形运算单元一直处于工作状态,提高了蝶形运算的效率。与现有技术中采用串行结构的可变点FFT装置相比,降低了FFT运算的处理延迟。
本发明实施例还提供一种可变点FFT/IFFT运算方法,如图3所示,其中2n点数据存放在2n-m个深度为2m的RAM中,所述每点数据分别存储在各自顺序对应地址进行位倒序操作后得到的位倒序地址中,该方法包括:
201、在前m级蝶形运算的每级蝶形运算中,从每个蝶形运算单元各自对应的第一RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第一RAM;从每个蝶形运算单元各自对应的第二RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第二RAM。
202、在第m+1级至第n级蝶形运算中的每级蝶形运算中,分别从每个蝶形运算单元各自对应的两个RAM中分别读取一个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回所述对应的两个RAM中。
上述从第一级至第n级蝶形运算中的每级蝶形运算中,每个蝶形运算单元都在同时将读写控制单元从所述每个蝶形运算单元各自对应的RAM中读取数据进行蝶形运算,并将每次的蝶形运算结果原址写回,直到所述每个蝶形运算单元各自对应的RAM中的最后一个数据进行蝶形运算,并完成将该蝶形运算后的最后一个数据写回上述对应的RAM中,才开始进行下一级的蝶形运算。这样可以避免数据在读写时产生冲突。本发明实施例中的可变点FFT装置中的各个蝶形运算单元是并行流水工作的,与现有技术中采用串行结构的可变点FFT装置相比,降低了FFT运算的处理延迟。
一种FFT/IFFT处理系统,如图4所示,该系统包括:FFT运算装置31、地址变换装置32和IFFT运算装置33。
其中,FFT运算装置31用于在2n-m个深度为2m的RAM中存放2n点数据,所述每点数据分别存储在各自顺序对应地址进行位倒序操作后得到的位倒序地址中,在前m级蝶形运算的每级蝶形运算中,从每个蝶形运算单元各自对应的第一RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第一RAM;从每个蝶形运算单元各自对应的第二RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第二RAM;
在第m+1级至第n级蝶形运算中的每级蝶形运算中,分别从每个蝶形运算单元各自对应的两个RAM中分别读取一个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回所述对应的两个RAM中。
地址变换装置32用于将FFT运算装置的预设输出地址进行位倒序操作得到IFFT运算装置的输入地址。
IFFT运算装置33用于将从FFT运算装置的预设输出地址读出的数据写入地址变换装置得出的IFFT运算装置的输入地址中,在前m级蝶形运算的每级蝶形运算中,从每个蝶形运算单元各自对应的第一RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第一RAM;从每个蝶形运算单元各自对应的第二RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第二RAM。
在第m+1级至第n级蝶形运算中的每级蝶形运算中,分别从每个蝶形运算单元各自对应的两个RAM中分别读取一个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回所述对应的两个RAM中。
由于FFT运算装置中将顺序输入的2n点数据存放在按照各自顺序对应在上述RAM中的地址进行位倒序操作后得到的位倒序地址中,通过上述地址变换装置得出的输入地址可以确保从上述RAM中读出的各点数据仍然写入到该数据对应在上述RAM中的地址,然后该读出的各点数据将作为IFFT运算装置的输入数据,接着再进行IFFT运算。与现有技术相比中直接将顺序数据输入FFT运算装置得出的倒序数据读出,再通过调整该读出的倒序数据为顺序数据,然后再输入IFFT运算装置进行IFFT运算相比,减小了FFT/IFFT处理系统的数据处理延迟。另外,由于本发明实施例中通过地址变换后直接将数据从FFT运算装置读入IFFT运算装置,与现有技术中通过调整该读出的倒序数据为顺序数据时需要采用深度为2n的RAM来保存需要调整的2n点数据相比,减小了硬件资源的耗费量。
实施例2:
本发明实施例中2n点数据在进行FFT运算时,所述2n点数据存放于2n-m个深度为2m的RAM中,其中n≥m。假设应用场景需要进行2048点、1024点、512点和256点数据的FFT运算,所采用RAM的深度为128,此时m的取值为7。首先,以2048点的FFT运算为例详细介绍一种可变点FFT运算装置,此时n的取值为11。如图5所示,该装置包括:深度为128的RAM41、蝶形运算单元42、读写控制单元43、输入单元44、选择控制单元45和输出单元46。
其中,输入单元44用于通过预设写端口顺序输入2048点数据到各点数据对应在16个深度为128的RAM中的地址。如可以通过8个预设写端口同时对数据进行写入,在256个时钟周期内就可以完成2048点数据的输入。16个深度为128的RAM41,用于存放2048点数据,所述每点数据分别存储在各自顺序对应地址进行位倒序操作后得到的位倒序地址中。如图6所示,所述2048点数据按照各自对应的位倒序地址存放在16个128RAM41中,各点数据存放的地址在进行蝶形运算过程中为固定不变的。
8个蝶形运算单元42,用于对读写控制单元从所述RAM41中读出的数据依次进行蝶形运算。上述2048点数据需要进行11级蝶形运算。
整个蝶形运算过程可以分为两个阶段。如图7所示,第一阶段为:所述前7级蝶形运算的每级蝶形运算中,每相邻两个RAM对应一个蝶形运算单元。读写控制单元43用于在前7级蝶形运算的每级蝶形运算中,从每个蝶形运算单元42各自对应的第一RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第一RAM;从每个蝶形运算单元42各自对应的第二RAM中依次读取两个数据到对应的蝶形运算单元42,并将蝶形运算后的数据原址写回第二RAM。如图7中所示,16个RAM分别用RAM0至RAM15表示,8个蝶形运算单元分别用BF0至BF7表示。在第一级蝶形运算中,RAM0和RAM1为相邻的两个RAM,故而RAM0和RAM1复用一个蝶形运算单元BF0,此时蝶形运算单元BF0对应的第一RAM为RAM0,对应的第二RAM为RAM1。读写控制单元43会从蝶形运算单元BF0对应的RAM0中读取两个数据到该蝶形运算单元BF0,并将蝶形运算后的数据原址写回RAM0;从蝶形运算单元BF0对应的RAM1中读取两个数据到对应的蝶形运算单元BF0,并将蝶形运算后的数据原址写回RAM1。该原址写回操作是将蝶形运算后的数据写回到该数据在运算前所存放的地址中,使得各点数据存放的地址在进行蝶形运算过程中为固定不变的。其他的蝶形运算单元BF1至BF7运算过程相似,在此不再赘述。
第二阶段为:所述第8级至第11级蝶形运算中的每级蝶形运算表示为:第7+x级蝶形运算,所述x取值为1至4之间的整数,在所述第7+x级蝶形运算中,将每相邻2x个RAM分为一组,再将所述每一组中的各个RAM按照所述各个RAM所在位置顺序平分为第一子组和第一子组,此时每个子组中都包括2x-1个RAM。所述第一子组中的第i个RAM与所述第二子组中的第i个RAM对应一个蝶形运算单元。其中,2x-1≥i≥1。读写控制单元43在第8级至第11级蝶形运算中的每级蝶形运算中,分别从每个蝶形运算单元42各自对应的两个RAM分别读取一个数据到对应的蝶形运算单元42,并将蝶形运算后的数据原址写回所述对应的两个RAM中。如图7中所示,在第9级蝶形运算中,x取值为2,此时每相邻4个RAM分为一组,再将所述每一组中的各个RAM按照所述各个RAM所在位置顺序平分为第一子组和第一子组,如在第一组的4个RAM中,RAM0和RAM1为第一子组,RAM2和RAM3为第二子组。所述第一子组中的第一个RAM0与所述第二子组中的第一个RAM2对应一个蝶形运算单元BF0,同样,所述第一子组中的第二个RAM1与所述第二子组中的第二个RAM3对应一个蝶形运算单元BF1。读写控制单元43在第9级蝶形运算中,从蝶形运算单元BF0对应的RAM0和RAM2中分别读取一个数据到对应的蝶形运算单元BF0,并将蝶形运算后的数据原址写回所述对应的RAM0和RAM2中。其他的蝶形运算单元BF1至BF7运算过程相似,在此不再赘述。
选择控制单元45用于控制输入单元与读写控制单元进行异步操作,即在输入单元进行数据输入时,禁止读写控制单元对上述RAM进行数据读写操作,反之在读写控制单元进行相关的数据读写操作时,禁止输入单元进行数据的输入。从而可以避免输入单元在向RAM中写入数据时与读写控制单元在进行蝶形运算过程中对相应RAM进行读写时产生数据冲突。
输出单元46用于通过预设读端口从16个深度为128的RAM的指定地址中读出数据。所述指定地址可以根据用户需求的数据而定,比如可以根据用户需要读出160点数据。与现有技术中输出顺序固定相比,满足了个性化的输出需求。
由于本发明实施例中的可变点FFT运算装置中的各个蝶形运算单元是并行流水工作的。在每级蝶形运算中,每个蝶形运算单元都在同时将读写控制单元从所述每个蝶形运算单元各自对应的RAM中读取数据进行蝶形运算,并将每次的蝶形运算结果原址写回,直到完成各点数据的蝶形运算。在整个可变点FFT运算装置的处理过程中,每一个蝶形运算单元一直处于工作状态,提高了蝶形运算的效率。与现有技术中采用串行结构的可变点FFT运算装置相比,降低了FFT运算的处理延迟。
另外,本发明实施例所描述的可变点FFT运算装置中,还可以进行1024点、512点和256点数据的FFT运算。
在进行1024点数据的FFT运算时,所述输入单元44通过预设写端口顺序输入1024点数据到各点数据对应在8个深度为128的RAM中的地址。如可以通过4个预设写端口同时对数据进行写入,在256个时钟周期内就可以完成1024点数据的输入。8个深度为128的RAM41,用于存放1024点数据,如图8所示,所述每点数据分别存储在各自顺序对应地址进行位倒序操作后得到的位倒序地址中。
4个蝶形运算单元42,用于对读写控制单元从所述RAM41中读出的数据依次进行蝶形运算。上述1024点数据需要进行10级蝶形运算。
整个蝶形运算过程可以分为两个阶段。如图9所示,第一阶段为:所述前7级蝶形运算的每级蝶形运算中,每相邻两个RAM对应一个蝶形运算单元。读写控制单元43用于在前7级蝶形运算的每级蝶形运算中,从每个蝶形运算单元42各自对应的第一RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第一RAM;从每个蝶形运算单元42各自对应的第二RAM中依次读取两个数据到对应的蝶形运算单元42,并将蝶形运算后的数据原址写回第二RAM。
第二阶段为:所述第8级至第10级蝶形运算中的每级蝶形运算表示为:第7+x级蝶形运算,所述x取值为1至3之间的整数,在所述第7+x级蝶形运算中,将每相邻2x个RAM分为一组,再将所述每一组中的各个RAM按照所述各个RAM所在位置顺序平分为第一子组和第一子组,此时每个子组中都包括2x-1个RAM。所述第一子组中的第i个RAM与所述第二子组中的第i个RAM对应一个蝶形运算单元。读写控制单元43在第8级至第10级蝶形运算中的每级蝶形运算中,分别从每个蝶形运算单元42各自对应的两个RAM中分别读取一个数据到对应的蝶形运算单元42,并将蝶形运算后的数据原址写回所述对应的两个RAM中。
在进行512点数据的FFT运算时,所述输入单元44通过预设写端口顺序输入512点数据到各点数据对应在4个深度为128的RAM中的地址。如可以通过2个预设写端口同时对数据进行写入,在256个时钟周期内就可以完成512点数据的输入。4个深度为128的RAM41,用于存放512点数据,如图10所示,所述每点数据分别存储在各自顺序对应地址进行位倒序操作后得到的位倒序地址中。
2个蝶形运算单元42,用于对读写控制单元从所述RAM41中读出的数据依次进行蝶形运算。上述512点数据需要进行9级蝶形运算。
整个蝶形运算过程可以分为两个阶段。如图11所示,第一阶段为:所述前7级蝶形运算的每级蝶形运算中,每相邻两个RAM对应一个蝶形运算单元。读写控制单元43用于在前7级蝶形运算的每级蝶形运算中,从每个蝶形运算单元42各自对应的第一RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第一RAM;从每个蝶形运算单元42各自对应的第二RAM中依次读取两个数据到对应的蝶形运算单元42,并将蝶形运算后的数据原址写回第二RAM。
第二阶段为:所述第8级至第9级蝶形运算中的每级蝶形运算表示为:第7+x级蝶形运算,所述x取值为1或2,在所述第7+x级蝶形运算中,将每相邻2x个RAM分为一组,再将所述每一组中的各个RAM按照所述各个RAM所在位置顺序平分为第一子组和第一子组,此时每个子组中都包括2x-1个RAM。所述第一子组中的第i个RAM与所述第二子组中的第i个RAM对应一个蝶形运算单元。读写控制单元43在第8级至第9级蝶形运算中的每级蝶形运算中,分别从每个蝶形运算单元42各自对应的两个RAM分别读取一个数据到对应的蝶形运算单元42,并将蝶形运算后的数据原址写回所述对应的两个RAM中。
在进行256点数据的FFT运算时,所述输入单元44通过预设写端口顺序输入256点数据到各点数据对应在2个深度为128的RAM中的地址。如可以通过1个预设写端口对数据进行写入,在256个时钟周期内就可以完成256点数据的输入。2个深度为128的RAM41,用于存放256点数据,如图12所示,所述每点数据分别存储在各自顺序对应地址进行位倒序操作后得到的位倒序地址中。
1个蝶形运算单元42,用于对读写控制单元从所述RAM41中读出的数据依次进行蝶形运算。上述256点数据需要进行8级蝶形运算。
整个蝶形运算过程可以分为两个阶段。如图13所示,第一阶段为:所述前7级蝶形运算的每级蝶形运算中,每相邻两个RAM对应一个蝶形运算单元。读写控制单元43用于在前7级蝶形运算的每级蝶形运算中,从每个蝶形运算单元42各自对应的第一RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第一RAM;从每个蝶形运算单元42各自对应的第二RAM中依次读取两个数据到对应的蝶形运算单元42,并将蝶形运算后的数据原址写回第二RAM。
第二阶段为:所述第8级蝶形运算表示为:第7+x级蝶形运算,所述x取值为1,在所述第8级蝶形运算中,将每相邻2个RAM分为一组,再将所述每一组中的各个RAM按照所述各个RAM所在位置顺序平分为第一子组和第一子组,此时每个子组中都包括2x-1个RAM。所述第一子组中的第i个RAM与所述第二子组中的第i个RAM对应一个蝶形运算单元。读写控制单元43在第8级蝶形运算中,分别从每个蝶形运算单元42各自对应的两个RAM分别读取一个数据到对应的蝶形运算单元42,并将蝶形运算后的数据原址写回所述对应的两个RAM中。
本发明实施例所提供的可变点FFT运算装置还可以在资源不变的情况下同时处理2个通道的1024点FFT运算,4个通道的512点FFT运算,8个通道的256点FFT运算,具体实现过程如图14所示。与现有技术相比,可以实现资源的最大化利用。如可以实现在多模中频项目中UMTS和CDMA制式下陷波中8个通道256点FFT/IFFT运算。
本发明实施例还提供一种可变点FFT/IFFT运算方法,如图15所示,以2048点数据的FFT运算过程为例详细介绍,该方法包括如下步骤:
501、通过预设写端口顺序输入2048点数据到各点数据对应在16个深度为128的RAM中的地址。如可以通过8个预设写端口同时对数据进行写入,在256个时钟周期内就可以完成2048点数据的输入。所述16个深度为128的RAM用于存放2048点数据,所述每点数据分别存储在各自顺序对应地址进行位倒序操作后得到的位倒序地址中。
502、上述2048点数据需要进行11级蝶形运算。由8个蝶形运算单元对读写控制单元从所述RAM中读出的数据依次进行蝶形运算。
整个蝶形运算过程可以分为两个阶段。第一阶段为:所述前7级蝶形运算的每级蝶形运算中,每相邻两个RAM对应一个蝶形运算单元。在前7级蝶形运算的每级蝶形运算中,从每个蝶形运算单元各自对应的第一RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第一RAM;从每个蝶形运算单元各自对应的第二RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第二RAM。
第二阶段为:所述第8级至第11级蝶形运算中的每级蝶形运算表示为:第7+x级蝶形运算,所述x取值为1至4之间的整数,在所述第7+x级蝶形运算中,将每相邻2x个RAM分为一组,再将所述每一组中的各个RAM按照所述各个RAM所在位置顺序平分为第一子组和第一子组,此时每个子组中都包括2x-1个RAM。所述第一子组中的第i个RAM与所述第二子组中的第i个RAM对应一个蝶形运算单元。在第8级至第11级蝶形运算中的每级蝶形运算中,分别从每个蝶形运算单元各自对应的两个RAM中分别读取一个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回所述对应的两个RAM中。
上述步骤501中在输入单元进行数据输入时,通过选择控制单元来禁止步骤502中对上述RAM进行数据读写操作,反之在读写控制单元进行相关的数据读写操作时,禁止输入单元进行数据的输入。从而可以避免步骤501中在向RAM中写入数据时与步骤502中在进行蝶形运算过程中对相应RAM进行读写时产生数据冲突。
503、通过预设读端口从16个深度为128的RAM的指定地址中读出数据。所述指定地址可以根据用户需求的数据而定,比如可以根据用户需要读出160点数据。与现有技术中输出顺序固定相比,满足了个性化的输出需求。
本发明实施例中采用的可变点FFT装置中的各个蝶形运算单元是并行流水工作的,与现有技术中采用串行结构的可变点FFT装置相比,降低了FFT运算的处理延迟。其他点数的数据处理过程类似,在此不再赘述。
本发明实施例提供的FFT运算装置还可以应用于FFT/IFFT处理系统中,如图16所示,所述FFT/IFFT处理系统包括:FFT运算装置61、地址变换装置62和I FFT运算装置63。
其中,FFT运算装置61用于在16个深度为128的RAM中存放2048点数据,所述每点数据分别存储在各自顺序对应地址进行位倒序操作后得到的位倒序地址中,在前7级蝶形运算的每级蝶形运算中,从每个蝶形运算单元各自对应的第一RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第一RAM;从每个蝶形运算单元各自对应的第二RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第二RAM。
在第8级至第11级蝶形运算中的每级蝶形运算中,分别从每个蝶形运算单元各自对应的两个RAM中分别读取一个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回所述对应的两个RAM中。
地址变换装置62用于将FFT运算装置预设输出地址进行位倒序操作得到IFFT运算装置的输入地址。如,预设输出地址为0、1、1024、2、512、3、1536……,此时IFFT运算装置的输入地址为0、1024、1、512、2、1536、3……。
IFFT运算装置63用于将从FFT运算装置的预设输出地址读出的数据写入地址变换装置得出的IFFT运算装置的输入地址中,由于经过FFT运算后,如上述RAM的地址1中存放的是序号为1的数据,此时从地址1中读取序号为1的数据,并写入地址1024中,从而确保了各点数据仍然存放在对应的RAM地址中。在前7级蝶形运算的每级蝶形运算中,从每个蝶形运算单元各自对应的第一RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第一RAM;从每个蝶形运算单元各自对应的第二RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第二RAM。
在第8级至第11级蝶形运算中的每级蝶形运算中,分别从每个蝶形运算单元各自对应的两个RAM中分别读取一个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回所述对应的两个RAM中。
由于FFT运算装置中将顺序输入的2048点数据存放在按照各自顺序对应在上述RAM中的地址进行位倒序操作后得到的位倒序地址中,通过上述地址变换装置得出的输入地址可以确保从上述RAM中读出的各点数据仍然写入到该数据对应在上述RAM中的地址,然后该读出的各点数据将作为IFFT运算装置的输入数据,接着再进行IFFT运算。与现有技术相比中直接将顺序数据输入FFT运算装置得出的倒序数据读出,再通过调整该读出的倒序数据为顺序数据,然后再输入IFFT运算装置进行IFFT运算相比,减小了FFT/IFFT处理系统的数据处理延迟。
另外,由于本发明实施例中通过地址变换后直接将数据从FFT运算装置读入IFFT运算装置,与现有技术中通过调整该读出的倒序数据为顺序数据时需要采用深度为2048的RAM来保存需要调整的2048点数据相比,减小了硬件资源的耗费量。
本发明实施例主要应用于信号处理系统中,如果将本发明实施例中深度为128的RAM划分为更小的存储单元的话,同样还可以实现16个通道的128点FFT/IFFT,32个通道的64点FFT/IFFT,64个通道的32点FFT/IFFT等等。本发明实施例解决了现有技术中在进行FFT/IFFT运算过程中处理延迟较长的问题。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (10)
1.一种可变点FFT运算装置,其特征在于,包括:
2n-m个深度为2m的RAM,用于存放2n点数据,所述每点数据分别存储在各自顺序对应地址进行位倒序操作后得到的位倒序地址中;
2n-m-1个蝶形运算单元,用于对读写控制单元从所述RAM中读出的数据依次进行蝶形运算;
读写控制单元,用于在前m级蝶形运算的每级蝶形运算中,从每个蝶形运算单元各自对应的第一RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回
第一RAM;从每个蝶形运算单元各自对应的第二RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第二RAM;
在第m+1级至第n级蝶形运算中的每级蝶形运算中,分别从每个蝶形运算单元各自对应的两个RAM中分别读取一个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回所述对应的两个RAM中。
2.根据权利要求1所述的可变点FFT运算装置,其特征在于,
所述前m级蝶形运算的每级蝶形运算中,每相邻两个RAM对应一个蝶形运算单元,
所述第m+1级至第n级蝶形运算中的每级蝶形运算表示为:第m+x级蝶形运算,所述x取值为1至n-m之间的整数,在所述第m+x级蝶形运算中,将每相邻2x个RAM分为一组,再将所述每一组中的各个RAM按照所述各个RAM所在位置顺序平分为第一子组和第一子组,所述第一子组中的第i个RAM与所述第二子组中的第i个RAM对应一个蝶形运算单元。
3.根据权利要求1所述的可变点FFT运算装置,其特征在于,还包括:
输入单元,用于通过预设写端口顺序输入2n点数据到各点数据对应在2n-m个深度为2m的RAM中的地址。
4.根据权利要求1所述的可变点FFT运算装置,其特征在于,还包括:
输出单元,用于通过预设读端口从2n-m个深度为2m的RAM的指定地址中读出数据。
5.根据权利要求3所述的可变点FFT运算装置,其特征在于,还包括:
选择控制单元,用于控制输入单元与读写控制单元进行异步操作。
6.一种可变点FFT/IFFT运算方法,其特征在于,2n点数据存放在2n-m个深度为2m的RAM中,所述每点数据分别存储在各自顺序对应地址进行位倒序操作后得到的位倒序地址中,该方法包括:
在前m级蝶形运算的每级蝶形运算中,从每个蝶形运算单元各自对应的第一RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第一RAM;从每个蝶形运算单元各自对应的第二RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第二RAM;
在第m+1级至第n级蝶形运算中的每级蝶形运算中,分别从每个蝶形运算单元各自对应的两个RAM中分别读取一个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回所述对应的两个RAM中。
7.根据权利要求6所述的可变点FFT/IFFT运算方法,其特征在于,还包括:通过预设写端口顺序输入2n点数据到各点数据对应在2n-m个深度为2m的RAM中的地址。
8.根据权利要求6所述的可变点FFT/IFFT运算方法,其特征在于,还包括:通过预设读端口从2n-m个深度为2m的RAM的指定地址中读出数据。
9.根据权利要求7所述的可变点FFT/IFFT运算方法,其特征在于,还包括:控制输入2n点数据的操作与进行蝶形运算时的读写操作之间异步进行。
10.一种FFT/IFFT处理系统,其特征在于,包括:
FFT运算装置,用于在2n-m个深度为2m的RAM中存放2n点数据,所述每点数据分别存储在各自顺序对应地址进行位倒序操作后得到的位倒序地址中,在前m级蝶形运算的每级蝶形运算中,从每个蝶形运算单元各自对应的第一RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第一RAM;从每个蝶形运算单元各自对应的第二RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第二RAM;
在第m+1级至第n级蝶形运算中的每级蝶形运算中,分别从每个蝶形运算单元各自对应的两个RAM中分别读取一个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回所述对应的两个RAM中;
地址变换装置,用于将FFT运算装置的预设输出地址进行位倒序操作得到IFFT运算装置的输入地址;
IFFT运算装置,用于将从FFT运算装置的预设输出地址读出的数据写入地址变换装置得出的IFFT运算装置的输入地址中,在前m级蝶形运算的每级蝶形运算中,从每个蝶形运算单元各自对应的第一RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第一RAM;从每个蝶形运算单元各自对应的第二RAM中依次读取两个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回第二RAM;
在第m+1级至第n级蝶形运算中的每级蝶形运算中,分别从每个蝶形运算单元各自对应的两个RAM中分别读取一个数据到对应的蝶形运算单元,并将蝶形运算后的数据原址写回所述对应的两个RAM中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010101230820A CN101788974B (zh) | 2010-03-12 | 2010-03-12 | 可变点fft/ifft运算方法、装置及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010101230820A CN101788974B (zh) | 2010-03-12 | 2010-03-12 | 可变点fft/ifft运算方法、装置及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101788974A true CN101788974A (zh) | 2010-07-28 |
CN101788974B CN101788974B (zh) | 2012-05-23 |
Family
ID=42532193
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010101230820A Active CN101788974B (zh) | 2010-03-12 | 2010-03-12 | 可变点fft/ifft运算方法、装置及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101788974B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102306142A (zh) * | 2011-08-11 | 2012-01-04 | 华中科技大学 | 一种fft倒序操作存储器数据调度方法及电路 |
CN103544111A (zh) * | 2013-10-08 | 2014-01-29 | 北京理工大学 | 一种基于实时性处理的混合基fft方法 |
CN104268122A (zh) * | 2014-09-12 | 2015-01-07 | 安徽四创电子股份有限公司 | 一种可变点数的浮点fft处理器 |
CN117389946A (zh) * | 2023-11-09 | 2024-01-12 | 合肥灿芯科技有限公司 | 一种可动态扩展点数的fft实现结构 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1983246A (zh) * | 2005-12-14 | 2007-06-20 | 上海微小卫星工程中心 | 一种变换地址原址返回的级间流水fft处理模块 |
KR20080028281A (ko) * | 2006-09-26 | 2008-03-31 | 오끼 덴끼 고오교 가부시끼가이샤 | 고속 푸리에 변환 회로 및 고속 푸리에 변환 방법 |
-
2010
- 2010-03-12 CN CN2010101230820A patent/CN101788974B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1983246A (zh) * | 2005-12-14 | 2007-06-20 | 上海微小卫星工程中心 | 一种变换地址原址返回的级间流水fft处理模块 |
KR20080028281A (ko) * | 2006-09-26 | 2008-03-31 | 오끼 덴끼 고오교 가부시끼가이샤 | 고속 푸리에 변환 회로 및 고속 푸리에 변환 방법 |
Non-Patent Citations (1)
Title |
---|
《信息与电子工程》 20081225 蒋华 一种快速傅里叶变换算法的FPGA实现 , 第06期 2 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102306142A (zh) * | 2011-08-11 | 2012-01-04 | 华中科技大学 | 一种fft倒序操作存储器数据调度方法及电路 |
CN102306142B (zh) * | 2011-08-11 | 2014-05-07 | 华中科技大学 | 一种fft倒序操作存储器数据调度方法及电路 |
CN103544111A (zh) * | 2013-10-08 | 2014-01-29 | 北京理工大学 | 一种基于实时性处理的混合基fft方法 |
CN103544111B (zh) * | 2013-10-08 | 2016-06-01 | 北京理工大学 | 一种基于实时性处理的混合基fft方法 |
CN104268122A (zh) * | 2014-09-12 | 2015-01-07 | 安徽四创电子股份有限公司 | 一种可变点数的浮点fft处理器 |
CN104268122B (zh) * | 2014-09-12 | 2017-03-22 | 安徽四创电子股份有限公司 | 一种可变点数的浮点fft处理器 |
CN117389946A (zh) * | 2023-11-09 | 2024-01-12 | 合肥灿芯科技有限公司 | 一种可动态扩展点数的fft实现结构 |
CN117389946B (zh) * | 2023-11-09 | 2024-05-28 | 合肥灿芯科技有限公司 | 一种可动态扩展点数的fft实现结构 |
Also Published As
Publication number | Publication date |
---|---|
CN101788974B (zh) | 2012-05-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101751375B (zh) | 一种dft/idft的快速计算方法和装置 | |
CN101788974B (zh) | 可变点fft/ifft运算方法、装置及系统 | |
KR102024428B1 (ko) | 디지털 인코더 및 인코딩 방법 | |
CN111312295B (zh) | 一种全息声音的记录方法、装置及录音设备 | |
CN104932992B (zh) | 一种带宽粒度可变的微波数字柔性转发方法 | |
CN103390403B (zh) | Mfcc特征的提取方法及装置 | |
CN117135022B (zh) | Ofdm信号的噪声抑制方法及装置 | |
KR100836624B1 (ko) | 가변 고속 푸리에 변환 장치 및 그 방법 | |
CN102752250B (zh) | 上下行链路的中频处理方法、装置及rru | |
CN117235420A (zh) | 一种信号处理电路、方法、处理器、存储介质及芯片 | |
CN111178513B (zh) | 神经网络的卷积实现方法、卷积实现装置及终端设备 | |
CN102647389B (zh) | 观察到达时间差定位中处理相关的方法和设备 | |
EP2538345A1 (en) | Fast fourier transform circuit | |
CN101141143B (zh) | 时-频rake接收方法和装置 | |
CN103354091B (zh) | 基于频域变换的音频特征提取方法及装置 | |
CN111356151A (zh) | 一种数据处理方法及装置、计算机可读存储介质 | |
CN112511480B (zh) | 二次fft或ifft变换方法及相关产品 | |
CN102457251B (zh) | 一种实现通用数字滤波器的方法及装置 | |
CN115878949A (zh) | 信号处理方法以及相关设备 | |
CN104657335A (zh) | 一种基于fft的数据采样方法和装置 | |
CN102075237A (zh) | 主同步信号的搜索方法及设备 | |
CN105917592A (zh) | 信息处理装置、网络节点和信息处理方法 | |
CN111342876A (zh) | 基于music算法的lte上行信号doa估算方法和系统 | |
CN115913857B (zh) | 数据处理方法、装置、射频单元、基站和存储介质 | |
CN104253773B (zh) | 信道均衡方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20210508 Address after: Unit 3401, unit a, building 6, Shenye Zhongcheng, No. 8089, Hongli West Road, Donghai community, Xiangmihu street, Futian District, Shenzhen, Guangdong 518040 Patentee after: Honor Device Co.,Ltd. Address before: 518129 headquarters building of Bantian HUAWEI base, Longgang District, Guangdong, Shenzhen Patentee before: HUAWEI TECHNOLOGIES Co.,Ltd. |
|
TR01 | Transfer of patent right |