KR20060096511A - Fft 아키텍쳐 및 방법 - Google Patents

Fft 아키텍쳐 및 방법 Download PDF

Info

Publication number
KR20060096511A
KR20060096511A KR1020067013515A KR20067013515A KR20060096511A KR 20060096511 A KR20060096511 A KR 20060096511A KR 1020067013515 A KR1020067013515 A KR 1020067013515A KR 20067013515 A KR20067013515 A KR 20067013515A KR 20060096511 A KR20060096511 A KR 20060096511A
Authority
KR
South Korea
Prior art keywords
fft
values
memory
writing
partial
Prior art date
Application number
KR1020067013515A
Other languages
English (en)
Inventor
라그후라만 카리시나무어타이
치나파 케이. 가나팟타이
Original Assignee
콸콤 인코포레이티드
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by 콸콤 인코포레이티드 filed Critical 콸콤 인코포레이티드
Publication of KR20060096511A publication Critical patent/KR20060096511A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/14Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/14Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
    • G06F17/141Discrete Fourier transforms
    • G06F17/142Fast Fourier transforms, e.g. using a Cooley-Tukey type algorithm
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L27/00Modulated-carrier systems
    • H04L27/26Systems using multi-frequency codes
    • H04L27/2601Multicarrier modulation systems
    • H04L27/2647Arrangements specific to the receiver only
    • H04L27/2649Demodulators
    • H04L27/265Fourier transform demodulators, e.g. fast Fourier transform [FFT] or discrete Fourier transform [DFT] demodulators
    • H04L27/2651Modification of fast Fourier transform [FFT] or discrete Fourier transform [DFT] demodulators for performance improvement

Landscapes

  • Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • General Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Discrete Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Theoretical Computer Science (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Complex Calculations (AREA)

Abstract

고속 푸리에 변환(FFT) 하드웨어 구현 및 방법은 집적 회로(IC)에서 필요한 다이 영역을 최소화하면서 효율적인 FFT 프로세싱을 제공한다. FFT 하드웨어는 N 포인트 FFT를 구현할 수 있는데, 여기서 N = rn은 radix(r)의 함수이다. 하드웨어 구현은, 각각 r개의 샘플들을 저장하는, N/r 행들을 가지는 샘플 메모리를 포함한다. 회전 인자 메모리는 행당 k개의 회전 인자들을 저장할 수 있으며, 여기서 0 < k<r은 이용가능한 복소 회전 곱셈기의 수를 나타낸다. FFT 모듈은 메모리로부터 r개의 행들을 판독하고, 샘플들에 대하여 r-포인트 복소 FFT를 수행한 후에 회전 곱셈을 수행하고, 결과들을 r x r 레지스터 뱅크에 기록한다. 레지스터 뱅크의 컨텐츠는 치환된 순서로 다시 샘플 메모리에 기록된다. 이러한 연산은 각각의 스테이지에 대하여 N/r2 번 반복되고 그 후에 N 포인트 FFT를 생성하기 위해 n- 스테이지들에 대하여 반복된다.

Description

FFT 아키텍쳐 및 방법{FFT ARCHITECTURE AND METHOD}
본 출원은 전체적으로 여기에 통합된, 출원번호가 60/527,196이고, 출원일이 2003년 12월 5일이고, 발명의 명칭이 "Novel Architecture for Implementing Highspeed FFTs in Hardware"인 미국의 가출원에 대한 우선권을 주장한다.
본 발명은 신호 처리 분야에 관한 것이다. 더욱 상세하게는, 본 발명은 고속 푸리에 변환(FFT)을 구현하기 위한 장치 및 방법에 관한 것이다.
푸리에 변환은 시간 도메인 신호를 주파수 도메인 신호로 매핑하기 위해 사용될 수 있다. 역으로, 역 푸리에 변환은 주파수 도메인 신호를 시간 도메인 신호로 변환하기 위해 사용될 수 있다. 푸리에 변환은 특히 시간 도메인 신호들의 스펙트럼 분석을 위해 유용하다. 또한, 직교 주파수 분할 다중화(OFDM)를 구현하는 통신 시스템과 같은, 통신 시스템들은 선형적으로 분포된 톤(tone)들로부터 다중 시간 도메인 심볼들을 생성하고 심볼들로부터 주파수들을 복원하기 위해 푸리에 변환의 특성들을 이용할 수 있다.
샘플링된 데이터 시스템은 프로세서가 미리 결정된 수의 샘플들에 대하여 변환을 수행하기 위한 이산 푸리에 변환(DFT)을 구현할 수 있다. 그러나, DFT는 계산적으로 복잡하며 수행을 위한 많은 양의 전력을 요구한다. N 포인트 DFT를 수행 하기 위해 필요한 계산 횟수는 O(N2)으로 표시되는, N2 차에 해당한다. 많은 시스템들에서, DFT를 수행하기 위해 사용되는 프로세싱 전력의 양은 다른 시스템 연산들을 위해 이용가능한 프로세싱의 양을 줄일 수 있다. 또한, 실시간 시스템으로 동작하도록 구성된 시스템들은 계산을 위해 할당된 시간 내에 원하는 크기의 DFT를 수행하기 위한 충분한 프로세싱 전력을 가지고 있지 않을 수 있다.
고속 푸리에 변환(FFT)은 푸리에 변환이 DFT 구현과 비교하여 상당히 적은 연산들에서 수행되도록 하는 푸리에 변환의 이산적 구현이다. 특정한 구현에 따라서, 라딕스 r(radix r)의 FFT를 수행하기 위해 필요한 계산 횟수는 전형적으로 O(Nlogr(N))으로 표시되는 N×logr(N) 차에 해당한다.
과거에, FFT를 구현하는 시스템들은 FFT를 수행하기 위해 범용 프로세서 또는 스탠드 얼론(stand alone) 디지털 신호 처리기(DSP)를 사용할 수 있었다. 그러나, 시스템들은 장치에 요구되는 다수의 기능들을 구현하도록 특정하게 설계된 ASIC(Application Specific Integrated Circuits)을 통합시키는 경향이 늘고 있다. ASIC 내에 시스템 기능을 구현하는 것은 다수의 집적 회로들과 인터페이싱하기 위한 글루(glue) 로직과 칩 카운트를 최소화한다. 줄어든 칩 카운트는 전형적으로 임의의 기능을 희생시키지 않고 장치들에 대한 보다 적은 물리적 풋프린트(footprint)를 허용한다.
ASIC 다이(die) 내에 있는 영역의 크기는 제한되어 있으며, ASIC 내에서 구현되는 기능성 블록들은 전체적인 ASIC 설계의 기능을 향상시키기 위해 최적화된 크기, 속도 및 전력을 필요로 한다. FFT에 사용되는 자원의 양은 FFT에 사용되는 이용가능한 자원의 양을 제한하기 위해 최소화되어야 한다. 그러나, 변환이 시스템 요구들을 지원하기 위해 충분한 속도를 가지고 수행되도록 보장하기 위해, 충분한 자원들이 FFT에 사용될 필요가 있다. 또한, FFT 모듈에 의해 소비되는 전력의 양은 전력 공급 요구들과 관련된 열분산을 최소화하도록 최소화될 필요가 있다. 그러므로, ASIC과 같은 집적 회로에서 구현하기 위해 FFT 아키텍쳐를 최적화시키는 것이 바람직하다.
FFT 하드웨어 구현 및 방법은 집적 회로(IC)에서 필요한 다이 영역을 최소화하면서 효율적인 FFT 프로세싱을 제공한다. FFT 하드웨어는 N 포인트 FFT를 구현하기 위해 사용될 수 있으며, 여기서 N=rn은 radix(r)의 함수이다. 하드웨어 구현은, 각각 r개의 샘플들을 저장하는, N/r 행들을 가지는 샘플 메모리를 포함한다. 회전(twiddle) 인자들을 저장하기 위해 사용되는 메모리는 행당 k개의 회전 인자들을 가지며, 여기서 0<k<r은 이용가능한 복소 회전 곱셈기들의 수를 나타낸다. FFT 모듈은 (FFT 스테이지의 함수인 행 주소를 통해) 메모리로부터 r개의 행들을 판독하고, (마지막 스테이지를 제외하고) 각각의 행의 샘플들에 대하여 r-포인트 복소 FFT를 수행하고 난 후에 회전 곱셈을 수행하고, 결과들을 r×r 크기의 행렬 메모리(레지스터 뱅크)에 기록한다. r×r 크기의 행렬 메모리의 컨텐츠는, 치환된(transposed) 순서로 또는 선택적으로 치환없이, 샘플 메모리에 다시 저장된다. 이러한 연산은 각각의 스테이지에 대하여 N/r2번 동안 반복되고 그 후에 n 스테이지 동안 반복되어 N 포인트 FFT를 생성한다.
일 양상에서, rn-포인트, 라딕스 r, FFT를 결정하는 방법이 제시된다. 상기 방법은 변환될 샘플들을 행당 r개의 샘플들을 가지는 메모리로 기록하는 단계, 메모리로부터 r개의 행들을 판독하는 단계, r2개의 부분 FFT 값들을 생성하기 위해 r개의 라딕스 r 부분 FFT들을 결정하는 단계, r2개의 가중된 부분 FFT 값들을 생성하기 위해 회전 인자들을 r2개의 부분 FFT 값들에 적용하는 단계, r2개의 가중된 부분 FFT 값들을 레지스터 블록에 기록하는 단계, 치환된 값들을 생성하기 위해 레지스터 블록에 있는 r2개의 가중된 부분 FFT 값들을 치환하는 단계, 치환된 값들을 메모리에 기록하는 단계 및 메모리의 컨텐츠로부터 FFT 값들을 결정하는 단계를 포함한다.
다른 양상에서, rn-포인트, 라딕스 r, FFT를 결정하는 방법이 제시된다. 상기 방법은 변환될 샘플들을 행당 r개의 샘플들을 가지는 메모리로 기록하는 단계, 스테이지 값을 초기화하는 단계, 블록 값을 초기화하는 단계, FFT 스테이지를 프로세싱하는 단계, n번 동안 FFT 스테이지의 프로세싱을 반복하는 단계 및 메모리 컨텐츠로부터 FFT 값들을 결정하는 단계를 포함한다. FFT 스테이지의 프로세싱은 a) 스테이지 값에 기반하여 다수의 블록들을 결정하는 단계, b) 메모리로부터 r개의 행들을 검색하는 단계, c) r2개의 부분 FFT 값들을 생성하기 위해 r개의 라딕스 r 부분 FFT들을 결정하는 단계, d) r2개의 가중된 부분 FFT 값들을 생성하기 위해 회전 인자들을 r2개의 부분 FFT 값들에 적용하는 단계, e) 치환된 값들을 생성하기 위해 레지스터 블록에 있는 r2개의 가중된 부분 FFT 값들을 치환하는 단계, f) 치환된 값들을 메모리에 기록하는 단계, g) 블록 및 스테이지 값들에 기반하여 단계 b) 내지 f)를 반복하는 단계 및 스테이지 값을 증가시키는 단계를 포함한다.
또다른 양상에서, rn-포인트, 라딕스 r, FFT를 결정하는 방법이 제시된다. 상기 방법은 변환된 샘플들을 행당 r개의 샘플들을 가지는 메모리로 기록하는 단계, a) 스테이지 카운터를 초기화하는 단계, b) 블록 카운터 및 부분 FFT 출력 카운터를 초기화하는 단계, c) 스테이지, 블록 및 부분 FFT 카운터 값들에 기반하여 메모리로부터 r개의 행들을 검색하는 단계, d) r2개의 부분 FFT 값들을 생성하기 위해 r개의 라딕스 r 부분 FFT들을 결정하는 단계, e) r2개의 가중된 부분 FFT 값들을 생성하기 위해 회전 인자들을 r2개의 부분 FFT 값들에 적용하는 단계, f) r2개의 가중된 부분 FFT 값들을 레지스터 블록에 기록하는 단계, g) 치환된 값들을 생성하기 위해 레지스터 블록에 있는 r2개의 가중된 부분 FFT 값들을 치환하는 단계, i) 치환된 값들을 메모리에 기록하는 단계, j) 부분 FFT 카운터와 블록 카운터를 업데이트하는 단계, k) 블록 카운터와 부분 FFT 카운터의 값에 기반하여 단계 c) 내지 j)를 반복하는 단계, l) 스테이지 카운터의 값을 업데이트하는 단계, m) 스테이지 카운터의 값에 기반하여 단계 b) 내지 k)를 반복하는 단계 및 메모리의 컨텐츠로부터 FFT 값들을 결정하는 단계를 포함한다.
또다른 양상에서, rn-포인트, 라딕스 r, FFT 장치가 제시된다. 상기 장치는 메모리 행당 r개의 샘플들을 가지며 rn개의 샘플들을 저장하도록 구성된 메모리, 메모리의 r개의 행들로부터의 샘플들에 대하여 r개의 r-포인트 부분 FFT를 수행하도록 구성된 FFT 엔진, r개의 행과 r개의 열로 구성된 r2개의 레지스터들을 가지며 FFT 엔진으로부터 출력 값들을 수신하도록 구성된 레지스터 뱅크 및 레지스터 뱅크에 있는 값들을 치환하고 치환된 값들을 FFT 엔진에 의해 동작하는 메모리의 r개의 행들로 기록하도록 구성된 치환 모듈을 포함한다.
본 발명의 특징들, 목적들 및 장점들은 아래의 상세한 설명과 도면으로부터 보다 명백할 것이다.
도 1은 8 포인트 라딕스 2 FFT의 플로우 그래프이다.
도 2는 FFT 모듈의 일 실시예에 대한 기능 블록 다이어그램이다.
도 3A-3D는 FFT 프로세스의 실시예들에 대한 플로우차트들이다.
도 4는 8 포인트 라딕스 2 FFT의 일 실시예의 스테이지들에 대한 메모리 컨텐츠의 기능 블록 다이어그램이다.
도 5A-5B는 여기에 제시되는 FFT 모듈을 사용하는 OFDM 시스템 컴포넌트들의 실시예들에 대한 기능 블록 다이어그램이다.
FFT 또는 역 FFT(IFFT)에 적합한 하드웨어 아키텍쳐, FFT 모듈을 통합하는 장치 및 FFT 또는 IFFT를 수행하는 방법이 제시된다. FFT 아키텍쳐는 임의의 라딕스의 FFT를 구현하도록 허용하기 위해 일반화되어 있다. FFT 아키텍쳐는 작은 칩 영역을 유지하면서 FFT를 수행하기 위해 사용되는 사이클들의 수가 최소화되도록 허용한다. 특히, FFT 아키텍쳐는 인 플레이스(in place) FFT 동안에 수행된 메모리 액세스들의 수를 최적화하기 위해 메모리와 레지스터 공간을 구성한다. FFT 아키텍쳐는 구현에 있어서 추가적인 유연성을 제공하며, 특정한 설계 제약들에 따라서, 라딕스와 복소 곱셈기들의 수가 변화하도록 허용한다. 속도에는 민감하나 다이 영역에는 덜 민감한 구현들에서, FFT 아키텍쳐는 추가적인 복소 곱셈기들과 보다 높은 라딕스를 가지고 구현될 수 있다. 다이 영역에 보다 민감한 구현들에서, 라딕스는 줄어들 수 있으며 복소 곱셈기들의 수가 감소하게 된다.
FFT 아키텍쳐는 FFT 라딕스와 동일한 다수의 샘플들을 저장하기에 충분한 메모리 행 폭을 가지도록 구성되는 샘플 메모리를 포함한다. 그리하여, 샘플 메모리는 행당 r개의 샘플들의 N/r개의 행들을 가지도록 구성되며, 여기서 N은 FFT의 크기를 나타내고 r은 FFT 라딕스를 나타낸다. FFT 블록은 메모리로부터 행들을 검색하도록 구성되고 각각의 행에서 샘플들에 대하여 r-포인트 FFT를 수행한다. FFT 블록은 FFT 라딕스와 동일한 다수의 행들을 검색하지만 각각의 개별적인 행들로부 터의 샘플들에 대하여 r-포인트 FFT를 수행한다.
FFT 블록은 r2개의 샘플들을 저장하도록 구성된 레지스터 뱅크에 r-포인트 FFT들의 결과들을 기록한다. 레지스터 뱅크와 회전 인자 메모리에 연결된 복소 곱셈기들은 적절한 회전 인자들을 통해 FFT 결과들에 가중치를 적용한다. 가중된 인자들은 동일한 레지스터들로 리턴된다.
레지스터 뱅크의 컨텐츠는 샘플 메모리에 있는 원래의 행들에 재기록되기 전에 치환된다. 레지스터 뱅크에 있는 값들의 치환은 샘플 메모리의 동일한 행에 있는 FFT 샘플들의 관계를 유지함으로써 FFT가 적절하게 수행되도록 허용한다. 샘플 메모리에 있는 샘플들은 N-포인트 FFT를 수행하기에 충분한 다수의 스테이지들 동안에 검색되고, 처리되어, 샘플 메모리로 리턴된다.
제시된 아키텍쳐에서의 하드웨어 기반 트레이드-오프들에 대한 논의를 진행하기 전에 다양한 FFT 알고리즘들의 계산 복잡도를 먼저 검토하도록 한다. 라딕스 2, 4, 8, 16의 쿨리-튜키(Cooley-Tukey) 알고리즘들과 스플릿(split) 라딕스 알고리즘이 검토된다. 소인수(prime factor) 기반 알고리즘들은 고려되지 않으며, 이는 이러한 알고리즘들의 복잡도가 쿨리-튜키 기반 알고리즘들보다 낮을 수 있음에도 불구하고, 이러한 알고리즘들은 규칙적인 구조를 가지고 있지 않고 양자화에 보다 민감하기 때문이다.
상기 알고리즘들의 복잡도는 요구되는 실제 실수 곱셈들과 덧셈들의 수에 기반하여 여기에서 평가된다. 복소 곱셈은 네 개의 실수 곱셈들과 두 개의 실수 덧 셈들과 동일하다고 가정한다.
라딕스-r 알고리즘들에 의해 요구되는 실수 곱셈들과 덧셈들의 수는 이러한 알고리즘들이 rn 포인트 DFT의 계산을 (rn-1-1)ㆍ(r-1) 회전 곱셈들을 희생하여 r, rn-1-포인트 DFT들의 계산으로 분할하는 것에 주목하고 추가적으로 rn-1r-포인트 FFT들에 의해 프로세싱함으로써 결정될 수 있다. 도 1은 이러한 구조를 설명하는 8-포인트 라딕스 FFT의 신호 플로우에 대한 예시이다.
rn 포인트 FFT에 대하여 요구되는 실수 곱셈들의 수를
Figure 112006048253596-PCT00001
으로 표시하고, 요구되는 실수 덧셈들의 수를
Figure 112006048253596-PCT00002
으로 표시하면, 프로세싱 복잡도는 귀납적으로 정의된다:
Figure 112006048253596-PCT00003
초기 조건들은 아래와 같다:
Figure 112006048253596-PCT00004
스플릿 라딕스 알고리즘의 복잡도는 유사한 방식으로 평가된다. 스플릿 라딕스 알고리즘은 몇몇 회전 곱셈들을 희생하여 N-포인트 FFT를 N/2 크기의 하나의 FFT와 N/4 크기의 두 개의 FFT들로 분할한다. 알고리즘의 복잡도는 귀납적으로 정의된다:
Figure 112006048253596-PCT00005
이러한 귀납적인 식들에 기반하여, 여러가지 공통 FFT 알고리즘들의 복잡도가 도표로 작성되어 비교될 수 있다. 표 1 및 2는 공통 FFT 알고리즘들에 대하여 복잡도 결과들을 컴파일링한다. 표는 평가되지 않은 구성들에 대한 빈 셀들을 포함한다.
표 1: 상이한 FFT 알고리즘들에 대한 실수 곱셈들
Figure 112006048253596-PCT00006
Figure 112006048253596-PCT00007
표 2: 상이한 FFT 알고리즘들에 대한 실수 덧셈들
Figure 112006048253596-PCT00008
표 1 및 2의 계산 복잡도는 상이한 알고리즘들에서 FFT를 구현하는 하드웨어 비용에 대한 완전한 그림을 제공하지 않는다. 메모리로부터 데이터와 회전 인자들을 액세스하고 데이터를 메모리에 기록하는 비용이 고려될 필요가 있다. 아래의 표는 상이한 라딕스 크기들에 대하여 상이한 알고리즘들에 의해 요구되는 (오직 데이터 액세스들만이 카운트되는) 메모리 액세스들의 수를 나타낸다. 데이터 액세스 횟수는 N-포인트 FFT/IFFT의 라딕스 r 구현을 위해, 스테이지들의 전체수가 logr(N)이고 각 스테이지가 2N번의 판독 및 기록 동작들을 요구하여, 2Nlogr(N)번의 메모리 복소 샘플 액세스 동작들이 이루어지는 것에 주의함으로써 획득된다.
표 3: 상이한 FFT 알고리즘에 대한 메모리 액세스들
Figure 112006048253596-PCT00009
하드웨어에서의 FFT 구현에 대한 분석은 사용하는 사이클들과 관련하여 주요 비용이 메모리 액세스들에서 소비된다는 것을 보여준다. 메모리 액세스 횟수는 라딕스를 증가시킴으로써 감소된다. 그러나, 하나의 복소 샘플/사이클에 액세스하는 것은 많은 애플리케이션들에 대하여 충분하지 않을 수 있다. 간단한 예가 잠재적인 문제점을 설명한다.
4 μs의 심볼 주기와 40 MHz의 클록 레이트를 가지는 직교 주파수 분할 다중화(OFDM) 시스템을 위해 64-포인트 FFT를 구현하는데 있어서의 문제점을 고려하도록 한다. 이러한 시스템은, 예를 들어, 40 MHz의 클록을 가지는 IEEE 802. 11a 시스템일 수 있다. 40 MHz의 클록 레이트와 결합된 4 μs의 OFDM 심볼 주기는 심볼들 사이에서 이용가능한 160 사이클들로 바뀌게 된다.
라딕스-2 알고리즘들의 이용에 의한 64 포인트 FFT를 구현하는 비용이 처음에 검토된다. 요구되는 메모리 액세스의 총횟수는 위의 표에 나타난 바와 같이 768이다. 그러므로, 사이클당 오직 하나의 샘플 판독 또는 기록을 수행하는 메모리를 사용하여 라딕스-2 알고리즘을 구현하는 것은 최소 768 사이클이 소요되며, 이는 계산을 위해 이용가능한 사이클들의 수에 약 5배이다. 스플릿 라딕스-알고리즘도 라딕스-2 알고리즘처럼 필적하는 메모리 액세스 양을 필요로 하는 동일한 문제점을 가지고 있다.
그러나, 라딕스-4 알고리즘을 이용하는 64 포인트 FFT에서는, 요구되는 메모리 액세스 횟수는 384이다. 이것은 보다 양호하지만 여전히 이용가능한 사이클들의 수보다 훨씬 높다. FFT 알고리즘의 라딕스를 증가시킬수록, 요구되는 메모리 액세스의 양은 줄어들게 되며, FFT의 스테이지 수가 적어진다.
임의의 라딕스 알고리즘에 대한 고속 구현은 병렬 판독 및 기록이 가능한 메모리 구조의 사용을 통해 달성될 수 있다. 특정한 라딕스-r 알고리즘에 대하여, 하나의 사이클에서, 판독 또는 기록 동작에 대하여, r-값들의 액세스를 허용하는 메모리 구조는 알고리즘의 스루풋(throughput)을 향상시킨다. 개념적으로, 병렬 액세스는 각각의 행에 r개의 워드들을 가지는 RAM으로서 볼 수 있다. 그러나, 이러한 메모리 구조로부터 최대한의 이득을 얻기 위해, r-포인트 FFT를 계산하기 위해 요구되는 r-샘플들은 알고리즘의 모든 스테이지에서 동일한 행에 위치할 필요가 있다. 이것은 샘플 메모리의 r개의 행들을 판독하고, r, r-포인트 FFT들을 계산하 고, 치환된 결과들을 샘플 메모리에 기록함으로써 달성될 수 있다. 치환 연산은 r2 레지스터들의 행렬 메모리에서 수행될 수 있다. 라딕스 r이 증가하면, FFT 엔진의 크기와 행렬 메모리의 크기가 증가하게 된다. 영역 대 속도의 트레이드-오프는 임의의 특정한 구현에 대하여 수행될 수 있다.
도 2는 FFT 모듈(200)의 일 실시예에 대한 기능 블록 다이어그램이다. FFT 모듈(200)은 순방향 및 역방향 변환들 사이의 대칭성에 기인하여, 오직 작은 변경만을 가지는 IFFT 모듈로서 구성될 수 있다. FFT 모듈(200)은 단일 IC 다이 상에 구현될 수 있으며, ASIC의 일부로서 구현될 수 있다. 대안적으로, FFT 모듈(200)은 서로에 대하여 통신하는 다수의 엘리먼트들로서 구현될 수 있다. 또한, FFT 모듈(200)은 특정한 FFT 구조로 한정되지 않는다. 예를 들어, FFT 모듈(200)은 시간적으로 데시메이션(decimation)을 수행하거나 주파수 FFT에서 데시메이션을 수행하도록 구성될 수 있다.
FFT 모듈(200)은 변환될 샘플들을 저장하도록 구성된 메모리(210)를 포함한다. 또한, FFT 모듈(200)은 변환의 인-플레이스 계산을 수행하도록 구성되어 있기 때문에, 메모리(210)는 FFT의 각 스테이지 결과들과 FFT 모듈(200)의 출력을 저장하기 위해 사용된다.
메모리(210)는 부분적으로 FFT의 크기와 FFT의 라딕스에 기반하여 크기가 결정될 수 있다. 라딕스 r의 N 포인트 FFT(여기서, N=rn)에 대하여, 메모리(210)는 행당 r개의 샘플들을 가지며, rn-1개의 행들에 N개의 샘플들을 저장하도록 크기가 정해질 수 있다. 메모리(210)는 행당 샘플들의 수를 샘플당 비트들의 수와 곱한 값과 동일한 폭을 가지도록 구성될 수 있다. 메모리(210)는 전형적으로 실수 및 허수 성분들로서 샘플들을 저장하도록 구성된다. 그리하여, 라딕스 2 FFT에 대하여, 메모리(210)는 행당 2개의 샘플들을 저장하도록 구성되고, 제 1 샘플의 실수부, 제 1 샘플의 허수부, 제 2 샘플의 실수부 및 제 2 샘플의 허수부로서 샘플들을 저장할 수 있다. 샘플의 각각의 성분은 10비트로서 구성되고, 메모리(210)는 행당 40 비트를 사용한다. 메모리(210)는 모듈의 동작을 지원하기 위해 충분한 속도를 가지는 랜덤 액세스 메모리(RAM)일 수 있다.
메모리(210)는 r-포인트 FFT를 수행하도록 구성된 FFT 엔진(220)과 연결된다. FFT 모듈(200)은 도 1에 도시된 구조와 유사한 FFT를 수행하도록 구성될 수 있으며, 여기서 회전 인자들에 의한 가중은, FFT 버터플라이로 지칭되는, 부분 FFT 이후에 수행된다. 이러한 구성은 FFT 엔진(220)이 최소개의 곱셈기들을 사용하여 구성되도록 허용하여, FFT 엔진(220)의 크기와 복잡도를 최소화한다. FFT 엔진(220)은 메모리(210)로부터 행을 검색하고 행에 있는 샘플들에 대하여 FFT를 수행하도록 구성될 수 있다. 그리하여, FFT 엔진(220)은 하나의 사이클에서 r-포인트 FFT에 대한 모든 샘플들을 검색할 수 있다. FFT 엔진(220)은, 예를 들어, 파이프라이닝된(pipelined) FFT 엔진일 수 있으며 클록의 상이한 위상들을 통해 행들에 있는 값들을 조작할 수 있다.
FFT 엔진(220)의 출력은 레지스터 뱅크(230)와 연결된다. 레지스터 뱅크(230)는 FFT의 라딕스에 기반하여 다수의 값들을 저장하도록 구성된다. 일 실시예 에서, 레지스터 뱅크(230)는 r2개의 값들을 저장하도록 구성될 수 있다. 샘플들을 통한 경우와 같이, 레지스터 뱅크에 저장된 값들은 전형적으로 실수 성분과 허수 성분을 가지는 복소 값들이다.
레지스터 뱅크(230)는 임시적인 저장 영역으로서 사용되며, 고속 액세스를 위해 구성되고 주소 버스를 통해 액세스될 필요가 없는 저장을 위한 대한 전용 위치를 제공한다. 예를 들어, 레지스터 뱅크(230)에 있는 레지스터의 각각의 비트는 플립-플롭을 통해 구현될 수 있다. 그 결과, 레지스터는 동등한 크기의 메모리 위치와 비교하여 훨씬 많은 다이 영역을 사용한다. 레지스터 공간을 액세스하기 위한 효과적인 사이클 비용은 존재하지 않기 때문에, 특정한 FFT 모듈(200) 구현은 레지스터 뱅크(230)와 메모리(210)의 크기를 조정함으로써 다이 영역에 대한 속도를 트레이드 오프할 수 있다.
레지스터 뱅크(230)는, 예를 들어, 행들에 의해 값들을 기록하고 열들에 의해 값들을 판독함으로써 또는 그 반대로 값들의 치환이 직접적으로 수행될 수 있도록 r2개의 값들을 저장하도록 크기가 정해지는 것이 바람직할 수 있다. 값 치환은 FFT의 모든 스테이지들에 대하여 메모리(210)에 있는 FFT 값들의 행 정렬을 유지하기 위해 이용된다.
제 2 메모리(240)는 FFT 엔진(220)의 출력들에 가중치를 주기 위해 사용되는 회전 인자들을 저장하도록 구성된다. 몇몇 실시예들에서, FFT 엔진(220)은 부분 FFT 출력들(FFT 버터플라이들)을 계산하는 동안에 직접 회전 인자들을 사용하도록 구성될 수 있다. 회전 인자들은 임의의 FFT에 대하여 미리 결정될 수 있다. 그러므로, 제 2 메모리(240)가 RAM 또는 메모리의 몇몇 다른 타입으로 구성될 수 있음에도 불구하고, 제 2 메모리(240)는 ROM(Read Only Memory), 비휘발성 메모리, 비휘발성 RAM 또는 플래시 프로그래밍가능한 메모리로서 구현될 수 있다. 제 2 메모리(240)는 N 포인트 FFT에 대하여 N×(n-1)개의 복소 회전 인자들을 저장하도록 크기가 결정될 수 있다(여기서, N=rn). 1, -1, j 또는 -j와 같은 몇몇 회전 인자들은 제 2 메모리(240)로부터 생략될 수 있다. 또한, 동일한 값의 복사본들도 제 2 메모리(240)로부터 생략될 수 있다. 그러므로, 제 2 메모리(240)에 있는 회전 인자들의 수는 N×(n-1)개보다 적을 수 있다. 효율적인 구현은, FFT가 주파수 알고리즘으로 데시메이션을 구현하거나 또는 시간 알고리즘으로 데시메이션을 구현하는지에 따라, FFT의 모든 스테이지들에 대한 회전 인자들이 FFT의 제 1 스테이지 또는 마지막 스테이지에서 사용되는 회전 인자들의 서브세트들이라는 사실을 활용할 수 있다.
복소 곱셈기들(250a-250b)은 레지스터 뱅크와 제 2 메모리(240)에 연결된다. 복소 곱셈기들(250a-250b)은 제 2 메모리(240)로부터의 적절한 회전 인자들을 사용하여, 레지스터 뱅크(230)에 저장된, FFT 엔진(220)의 출력들에 가중치를 주도록 구성된다. 도 2에 도시된 실시예는 두 개의 복소 곱셈기들(250a-250b)을 포함한다. 그러나, FFT 모듈(200)에 포함된 예컨대 250a와 같은 복소 곱셈기들의 수는 속도와 다이 영역의 트레이드 오프에 기반하여 선택될 수 있다. 많은 수의 복소 곱셈기들은 FFT의 실행을 빠르게 하기 위해 다이 상에 구현될 수 있다. 그러나, 증가된 속도는 다이 영역을 희생하여 오는 것이다. 다이 영역이 중요하다면, 복소 곱셈기들의 수는 줄어들 수 있다. 전형적으로, r-1개의 복소 곱셈기들은 병렬로 모든 사소하지 않은 회전 인자들이 FFT 엔진(220)의 출력들에 적용되기에 충분하기 때문에, r 포인트 FFT 엔진(220)이 구현될 때, r-1개보다 많은 복소 곱셈기들을 포함하도록 설계가 이루어지지는 않을 것이다. 예를 들어, 도 1에 도시된 바와 같이, 8-포인트 라딕스 2 FFT를 수행하도록 구성된 FFT 모듈(200)은 2개의 복소 곱셈기들을 구현할 수 있으나, 오직 1개의 복소 곱셈기를 구현할 수도 있다.
예컨대 250a와 같은, 각각의 복소 곱셈기는 각각의 곱셈 동작 동안에 레지스터 뱅크(230)로부터의 하나의 값과 제 2 메모리(240)에 저장된 대응하는 회전 인자들에 대하여 동작을 수행한다. 수행될 복소 곱셈들에 비해 적은 복소 곱셈기들이 존재한다면, 복소 곱셈기는 레지스터 뱅크(230)로부터의 다수의 FFT 값들에 대하여 동작을 수행할 것이다.
예컨대 250a와 같은, 각각의 복소 곱셈기의 출력은, 전형적으로 입력이 복소 곱셈기로 제공되는 동일한 위치로, 레지스터 뱅크(230)에 기록된다. 그러므로, 복소 곱셈들 이후에, 레지스터 뱅크의 컨텐츠는 복소 곱셈기들이 FFT 엔진(220) 내에서 구현되었는지 또는 도 2에 도시된 바와 같이 레지스터 뱅크(230)와 연관되어 있는지 여부에 관계없이 동일한 FFT 스테이지 출력을 나타낸다.
레지스터 뱅크(230)에 연결된 치환 모듈(232)은 레지스터 뱅크(230)의 컨텐츠에 대하여 치환을 수행한다. 치환 모듈(232)은 레지스터 값들을 재정렬함으로써 레지스터 컨텐츠를 치환할 수 있다. 대안적으로, 치환 모듈(232)은 레지스터 블록(230)으로부터 판독된 컨텐츠로서 레지스터 블록(230)의 컨텐츠를 치환할 수 있다. 레지스터 뱅크(230)의 컨텐츠는 입력들이 FFT 엔진(220)으로 제공되는 행들에서 메모리(210)로 다시 기록되기 전에 치환된다. 레지스터 뱅크(230) 값들을 치환하는 것은 FFT의 모든 스테이지들에서 FFT 입력들의 행 구조를 유지시킨다.
명령 메모리(264)와 결합된 프로세서(262)는 모듈들 사이에서 데이터 플로우를 수행하도록 구성될 수 있으며, 도 2의 하나 이상의 블록들 중 몇몇 또는 전부를 수행하도록 구성될 수 있다. 예를 들어, 명령 메모리(264)는 프로세서(262)가 FFT 모듈(200)에서 데이터를 조정하도록 지시하는 소프트웨어로서 하나 이상의 프로세서에서 사용가능한 명령들을 저장할 수 있다.
프로세서(262) 및 명령 메모리(264)는 FFT 모듈(200)의 일부로서 구현될 수 있거나 또는 FFT 모듈(200)의 외부에 있을 수 있다. 대안적으로, 프로세서(262)는 FFT 모듈(200)의 외부에 있으나, 명령 메모리(264)는 FFT 모듈(200)의 내부에 있을 수 있으며, 예를 들어, 샘플들에 대하여 사용되는 메모리(210) 또는 회전 인자들이 저장된 제 2 메모리(240)와 공통적일 수 있다.
도 2에 도시된 실시예는 알고리즘의 라딕스 변경에 따라 속도 및 영역 사이의 트레이드 오프를 특징으로 한다. N=rv 포인트 FFT를 구현하는데 있어서, 요구되는 사이클들의 수는 다음과 같이 추정될 수 있다:
Figure 112006048253596-PCT00010
여기서,
Figure 112006048253596-PCT00011
= 계산될 r, 라딕스-r FFT들의 수, rNFFT = r × r개의 엘리먼트들의 벡터에 대한 하나의 판독, FFT, 회전 곱셈 및 기록을 수행하는데 걸리는 시간이다.
NFFT는 라딕스와 독립적으로 상수인 것으로 가정한다. 사이클 카운트는 1/r(O(1/r))의 차수로 감소한다. 구현을 위해 요구되는 영역은 치환을 위해 요구되는 레지스터들의 수가 r2으로 증가하기 때문에 O(r2)으로 증가한다. 레지스터들의 수와 레지스터들을 구현하기 위해 요구되는 영역은 큰 N에 대하여 영역을 좌우한다.
원하는 속도를 제공하는 최소 라딕스는 관심있는 상이한 케이스들에 대하여 FFT를 구현하기 위해 선택될 수 있다. 모듈의 속도가 충분하다면, 라딕스를 최소화하는 것은 모듈을 구현하기 위해 사용되는 다이 영역을 최소화한다.
도 3A-3D는 FFT 프로세스(300)의 실시예에 대한 플로우챠트들이다. 프로세스(300)는, 예를 들어, 도 2의 FFT 모듈(200)에 의해 수행될 수 있다. 대안적으로, 프로세스(300)는 하나 이상의 프로세스에서 이용가능한 명령들로서 구현될 수 있으며 메모리와 관련하여 프로세서에 의해 실행될 수 있다. 다른 실시예들에서, 프로세스(300)의 일부분은 하드웨어에서 다른 일부분은 소프트웨어로부터 수행될 수 있다.
프로세스(300)는 블록(302)에서 시작하며, 여기서, 예를 들어 프로세서를 사 용하여, FFT 모듈은 적어도 FFT 라딕스와 동일한 다수의 샘플들을 저장하기에 충분한 폭을 가지는 메모리에 변환될 데이터를 기록한다. 예를 들어, FFT 모듈이, 도 1에 도시된 바와 같이, 8-포인트 라딕스 2 FFT를 수행하도록 구성되면, 메모리는 두 개의 열들에 대한 4개의 행들로 구성되며 각각의 열은 두 개의 복소 샘플들을 저장하도록 구성될 수 있다. 프로세서는, 예를 들어, 제 1 열에서 시작하여 제 1 열이 채워지면 제 2 열로 진행하는 컬럼 와이즈(column wise) 방식으로 메모리에 샘플들을 기록한다.
샘플 데이터가 메모리에 기록되면, FFT 모듈은 블록(304)으로 진행하며, 여기서 프로세서는 스테이지 카운터를 초기화시킨다. 위에서 설명되고 도 1에 도시된 바와 같이, N=rr 포인트 FFT는 n개의 스테이지들을 포함한다. FFT의 시작 시점에서, 프로세서는 스테이지 카운터를 1로 초기화할 수 있다. 스테이지 카운터를 초기화한 후에, FFT 모듈은 블록(310)으로 진행하며, 여기서 프로세서는 부분 FFT 및 블록 카운터들을 초기화한다. 부분 FFT 및 블록 카운터들은, 예를 들어, 0으로 초기화될 수 있다.
도 1의 예에서 도시된 바와 같이, FFT의 각각의 스테이지에서 수행되는 부분 FFT들의 수는 일정하나, 각각의 FFT 계산에 포함된 샘플들의 인덱스를 트래킹하는 카운터는 스테이지에 따라 변하게 된다.
부분 FFT 및 블록 카운터들을 초기화한 후에, FFT 모듈은 블록(312)으로 진행하며, 여기서 프로세서는 행 주소 포인터를 초기화한다. 행 주소 포인터는 FFT 엔진에 의해 동작하는 메모리의 행을 결정한다. 예를 들어, 프로세서는 행 주소 포인터의 값을 다음과 같이 결정할 수 있다:
prow = ckㆍrn-k + fk
FFT 모듈은 블록(314)으로 진행하여 행 주소 포인터의 값에 기반하여 샘플 메모리로부터 행들을 판독한다. 예를 들어, 프로세서는 샘플 메모리로부터 행들을 판독하고 이들을 FFT 엔진에 있는 위치들에 기록한다. 프로세서는 다음과 같은 주소 포인터에 의해 결정된 행들을 판독할 수 있다:
ai = prow + iㆍrn-k-1, i=0. . . (r-1)
여기서, n은 스테이지들의 총수를 나타내고 k는 스테이지 카운터를 나타낸다.
행들이 FFT 엔진으로 판독되면, FFT 모듈은 블록(320)으로 진행하여 검색된 샘플들에 대하여 r-포인트 FFT들을 계산한다. 상기 실시예에서 FFT 엔진에 의해 수행되는 r-포인트 FFT들의 수는 메모리로부터 판독된 행들의 수와 동일하고, 상기 라딕스, r과 같다. FFT 엔진의 출력은 r×r 레지스터 뱅크로 기록된다.
FFT 모듈은 블록(322)으로 진행하고 회전 인자들을 이용하여 값들에 가중치를 주기 위해 회전 인자 메모리에 저장된 회전 인자들을 FFT 출력 값들에 적용한다. 회전 인자들은 하나 이상의 곱셈기들을 사용하여 적용될 수 있으며, 곱셈기들은 복소 곱셈기들로서 구성될 수 있다. 회전 인자들을 통해 가중치를 준 후에, 곱 셈기들은 단계(324)에서 r×r 레지스터 뱅크에 결과들을 다시 기록한다.
그 후에 FFT 모듈은 단계(330)로 진행하여 레지스터 뱅크에 있는 값들의 순서를 치환시킨다. 일 실시예에서, 프로세서는 레지스터 뱅크에 저장된 값들의 순서를 치환시킬 수 있다. 다른 실시예에서, 치환은 값들이 레지스터 뱅크로부터 판독될 때 발생할 수 있다. 예를 들어, 곱셈기들의 출력은 행 순서로 레지스터 뱅크에 기록되고 열 순서로 레지스터 뱅크로부터 판독될 수 있으며, 그 결과 상대적으로 적은 프로세싱으로 치환이 이루어진다.
도 3A 및 3B에 도시된 커넥터 A(331)는 두 도면 페이지들에 도시된 플로우차트의 부분들을 연결하기 위해 사용되며 프로세스(300)의 실질적인 부분을 형성하지 않는다. FFT 모듈은 커넥터 A(331)를 통해 단계(332)로 진행하여 레지스터 뱅크로부터의 치환된 결과들을 샘플 메모리에 기록한다. 레지스터 뱅크로부터의 치환된 결과들은 블록(314)에서 결정된 주소 포인터에 의해 식별되는 행들로 기록된다. 치환이 열 대 행 변환을 통해 수행되면, FFT 모듈은 프로세서를 사용하여 레지스터의 열들을 판독하고 주소 포인터에 의해 식별되는 주소로 행들의 결과들을 기록할 수 있다.
FFT 모듈은 블록(334)으로 진행하여 부분 FFT 및 블록 카운터들을 업데이트한다. 이전에 논의된 바와 같이, FFT의 각각의 스테이지는 라딕스 r 부분 FFT들의 하나 이상의 블록들로서 수행된다. 단계(334)에서, FFT 모듈은 부분 FFT 및 블록 카운터들을 업데이트한다. 프로세서는, 예를 들어, 부분 FFT 카운터 fk=(fk+1) mod (rn-k-1)을 업데이트할 수 있고, 부분 FFT 카운터가 0이면, 블록 카운터를 증가시킨다.
FFT 모듈은 결정 블록(340)으로 진행하여 부분 FFT들 및 블록들 모두가 계산되었는지 여부를 결정한다. 블록 카운터가 스테이지에 있는 블록들의 수보다 적다면(ck<rn-1), 부분 FFT들 모두가 결정된 것이 아니다. 모든 부분 FFT들 및 블록들이 계산된 것이 아니라면, FFT 모듈은 블록(342)으로 진행하여 추가적인 부분 FFT들을 프로세싱하도록 부분 FFT 및 블록 카운터들을 업데이트한다. FFT 모듈은 그 후에 현재 또는 다음 FFT 블록에 대하여 부분 FFT의 프로세싱을 계속하기 위해 커넥터 C(343)를 통해 블록(310)으로 루프 백한다. 커넥터 C(343)는 프로세스(300)의 실질적인 부분이 아니며, 대신에 페이지들을 통해 플로우차트를 연결하기 위해 사용된다.
결정 블록(340)에서 FFT 모듈이 현재 스테이지의 모든 블록들이 계산되었다고 결정하면, FFT 모듈은 결정 블록(350)으로 진행하여 n-1개의 스테이션들이 프로세싱되었는지 여부를 결정한다. 그렇지 않다면, FFT 모듈은 블록(352)으로 진행하여 스테이지 카운터를 업데이트하고 커넥터 B(353)를 통해 블록(310)으로 리턴한다. 커넥터 B(353)는 프로세스(300)의 실질적인 부분이 아니며, 대신에 페이지들을 통해 플로우차트를 연결하기 위해 사용된다.
결정 블록(350)에서 FFT 모듈이 n-1개의 스테이지들이 프로세싱되었다고 결정하면, FFT 모듈은 커넥터 D(351)를 통해 FFT의 마지막 스테이지를 프로세싱하기 위해 진행한다. FFT 모듈은 상이한 실시예들에서 FFT의 마지막 스테이지를 구현할 수 있다. 도 3C는 FFT 모듈이 마지막 FFT 스테이지를 구현할 수 있는 일 실시예를 나타낸다. 도 3D는 FFT의 마지막 스테이지를 구현하기 위한 대안적인 실시예를 나타낸다. 그리하여, 도 3C 및 3D는 동일한 마지막 FFT 스테이지에 대한 대안적인 실시예들을 나타내기 때문에, FFT 모듈은 도 3B의 커넥터 D(351)로부터 도 3C 또는 3D의 커넥터 D(351)로 진행할 수 있으나, 이들 모두로 진행할 수는 없다.
일 실시예에서, FFT 모듈은 도 3C에 도시된 마지막 FFT 스테이지 프로세스를 구현할 수 있다. 도 3C에서 설명된 마지막 스테이지 프로세스에서, FFT 모듈은 연속적으로 행들을 가져오나 부분 FFT들 다음에 임의의 치환을 수행하지 않는다. 그 결과 FFT 결과는 초기 FFT 스테이지에서와 같이 분리된 각각의 행에 있는 샘플들을 가지게 되나, 라딕스 역순으로 된 행들을 가진다. FFT 다음에 IFFT 스테이지가 존재한다면, 정렬을 수행하는 것이 바람직하다. FFT 모듈은 FFT 결과들을 액세스할 때 라딕스 역순을 고려할 수 있거나 또는 결과들이 순서대로 있는 것이 바람직하다면 행들을 재정렬하기 위해 행 재정렬 엔진을 구현할 수 있다.
도 3C에 도시된 마지막 스테이지 프로세스를 수행하기 위해, FFT 모듈은 도 3B의 커넥터 D(351)에서 도 3C의 커넥터 D(351)로 진행한다. FFT 모듈은 블록(362)으로 진행하여 행 주소 포인터를 초기화한다. 행 주소 포인터는 prow = cnㆍr로 초기화될 수 있으며, 여기서 cn은 초기에 0으로 설정되고 r은 FFT 라딕스이다.
FFT 모듈은 그 후에 이전의 FFT 스테이지들이 프로세싱되었던 방식과 유사한 방식으로 마지막 FFT 스테이지를 프로세싱하도록 진행한다. 블록(364)에서, FFT 모듈은 행 주소 포인터에 의해 식별되는 메모리로부터의 행들을 판독하며, 행 주소 포인터는 다음과 같이 계산될 수 있다:
ai = prow + i, i=0. . . (r-1)
FFT 모듈은 블록(366)을 진행하여 검색된 행들에 있는 값들에 대하여 부분 FFT를 계산한다. FFT 엔진은 검색된 행들에 대하여 r개의 상이한 r-포인트 부분 FFT를 계산한다.
FFT 모듈은 블록(368)으로 진행하여 부분 FFT 출력값을 레지스터 뱅크에 기록한다. FFT 모듈은 블록(370)으로 진행하여 데이터를 FFT 엔진으로 제공하는 샘플 메모리 행들에 레지스터 블록값들을 기록한다. FFT 모듈은 블록(370)에서 카운터 cn을 증가시킨다.
FFT 모듈은 결정 블록(372)으로 진행하여 마지막 블록에 있는 모든 부분 FFT들이 프로세싱되었는지 여부를 결정한다. 그렇지 않으면, FFT 모듈은 샘플 메모리에 대한 행들의 프로세싱을 계속하기 위해 블록(362)으로 리턴한다. 마지막 스테이지에 있는 모든 부분 FFT들이 프로세싱되었다면, FFT 모듈은 결정 블록(372)으로부터 선택적인 행 재정렬 블록(374)으로 진행하며, 여기서 FFT 모듈은 행 재정렬을 수행한다. FFT 모듈은 그 후에 블록(399)으로 진행하며 N-포인트 FFT는 완료된다.
대안적인 마지막 FFT 스테이지로서, FFT 모듈은 도 3D에 도시된 프로세스를 대신 수행할 수 있다. 도 3D의 플로우차트에 도시된 마지막 FFT 스테이지에서, FFT 모듈은 FFT의 제 1 스테이지를 위해 사용된 동일한 순서에 따라 행들에 있는 샘플들을 가져온다. 그 결과 행들은 연속적인 순서로 샘플들을 가지나, 행들은 부분 라딕스 역순서로 있게 된다. 또한, 부분 라딕스 역순서는 FFT 스테이지들의 수가 3보다 클 경우에만 발생한다. 부분 라딕스 역순서 행에도 불구하고, 이러한 마지막 스테이지 프로세스는 각각의 행에 있는 샘플들이 연속적이기 때문에 바람직할 수 있다.
도 3D의 마지막 스테이지 프로세스를 수행하기 위해, FFT 모듈은 도 3B의 커넥터 D(351)로부터 도 3D의 커넥터 D(351)로 진행한다. FFT 모듈은 블록(382)으로 진행하여 FFT의 시작 스테이지에 대하여 사용된 동일한 알고리즘을 사용하여 행 주소 포인터를 설정한다.
FFT 모듈은 블록(384)으로 진행하여 상기 포인터에 의해 식별되는 행들을 판독하고 블록(386)으로 진행하여 행들에 대하여 부분 FFT를 수행한다. FFT 모듈은 그 후에 블록(388)으로 진행하여 레지스터 뱅크에 부분 FFT의 결과들을 기록한다. FFT 모듈은 그 후에 블록(390)으로 진행하여 레지스터 뱅크에 있는 값들의 순서를 치환한다.
FFT 모듈은 그 후에 블록(392)으로 진행하여 치환된 값들을 다시 샘플 메모리에 기록한다. FFT 모듈은 그 후에 블록(396)으로 진행하여 마지막 스테이지에 있는 모든 부분 FFT들이 계산되었는지 여부를 결정한다. 그렇지 않으면, FFT 모듈은 블록(382)으로 되돌아가 다음 부분 FFT를 위해 포인터를 업데이트한다.
결정 블록(396)에서, FFT 모듈이 마지막 스테이지에 있는 모든 부분 FFT들이 계산되었다고 결정하면, FFT 모듈은 블록(398)으로 진행하여 행 재정렬을 수행한다. 도 3C에 도시된 이전의 마지막 스테이지 실시예와 마찬가지로, 행 재정렬 단계는 선택적이다. 행 재정렬 절차가 수행되지 않거나 또는 선택적인 행 재정렬을 수행한 후에, FFT 모듈은 블록(399)으로 진행하며 FFT는 완료된다.
도 4는 도 3A-3B의 프로세스에 따라 수행되는 8-포인트 라딕스 2 FFT 실시예에 대한 메모리 컨텐츠와 레지스터 블록 컨텐츠의 기능 블록 다이어그램이다. 8-포인트 FFT는 4개의 행과 두 개의 열을 가지는 샘플 메모리를 사용한다. 레지스터 블록은 r×r 행렬, 여기서는 2×2 행렬로서 구성된다.
샘플 메모리(410)의 초기 컨텐츠는 두 개의 열들(412 및 414)에 배치되어 있다. 샘플 메모리는 열 순서로 기록될 수 있으며, 제 1 컬럼(412)이 채워질 때까지 제 1 컬럼(412)에 값들을 기록하고 그 후에 제 2 컬럼(414)에 값들을 기록한다. 샘플 메모리(410)의 각각의 행은 초기 2-포인트 FFT들을 수행하기 위한 정확한 샘플 값들을 포함한다.
행들(a0 및 a2)은 처음에 샘플 메모리로부터 검색되고 행들에 저장된 값들에 대하여 FFT들이 수행된다. 결과들은 적절한 회전 인자를 이용하여 가중치가 적용되며, 결과들은 레지스터 뱅크(422)에 기록된다. 레지스터 뱅크 값들(422)은 그 후에 샘플 메모리에 다시 기록되기 전에 치환된다. 유사하게, 행들(a1 및 a3)은 메모리로부터 검색되어, FFT 엔진에서 프로세싱되고, 적절한 회전 인자들을 이용하여 가중치가 적용되며, 레지스터 뱅크(424)에 기록된다. 424에 있는 레지스터 값들은 이미 치환되어 샘플 메모리에 재기록된 이전 레지스터 값들(422)을 겹쳐쓴다. 새로운 레지스터 블록 값들(424)은 치환되고 메모리에 재기록된다.
샘플 메모리(430)는 제 1 스테이지와 제 1 치환을 완료한 이후에 컨텐츠를 나타낸다. 데이터는 여전히 두 개의 열들(432 및 434) 내에 구성되어 있으나, 상기 값들은 함께 프로세싱될 샘플들의 행 관계를 유지하기 위하여 치환에 기반하여 조정된다.
행들(a0 및 a1)은 처음에 샘플 메모리로부터 검색되어 행들에 저장된 값들에 대하여 FFT들이 수행된다. 결과들은 적절한 회전 인자를 이용하여 가중치가 적용되며, 결과들은 레지스터 뱅크(442)에 기록된다. 레지스터 뱅크 값들(442)은 그 후에 샘플 메모리에 다시 기록되기 전에 치환된다. 유사하게, 행들(a2 및 a3)은 메모리로부터 검색되어, FFT 엔진에서 프로세싱되고, 적절한 회전 인자들을 이용하여 가중치가 적용되며, 레지스터 뱅크(444)에 기록된다. 상기 값들은 치환되고 샘플 메모리에 재기록된다.
샘플 메모리(450)는 제 2 스테이지와 제 2 치환이 완료된 이후에 컨텐츠를 나타낸다. 제 3 샘플 메모리(450) 배치로부터, 행들(a0 및 a1)은 처음에 샘플 메모리로부터 검색되어 행들에 저장된 값들에 대하여 FFT들이 수행된다. 결과들은 적절한 회전 인자를 이용하여 가중치가 적용되며, 결과들은 레지스터 뱅크(462)에 기록된다. 레지스터 뱅크 값들(462)은 그 후에 샘플 메모리에 다시 기록되기 전에 치환된다. 유사하게, 행들(a2 및 a3)은 메모리로부터 검색되어, FFT 엔진에서 프로세싱되고, 적절한 회전 인자들을 이용하여 가중치가 적용되며, 레지스터 뱅크(464)에 기록된다. 상기 값들은 치환되고 샘플 메모리에 재기록된다. 샘플 메모 리(470)에 기록된 치환된 결과들은 8-포인트 FFT의 출력을 나타낸다.
도 5A 및 5B는 여기에 설명된 바와 같은 FFT 모듈을 통합할 수 있는 OFDM 시스템 컴포넌트들의 기능 블록 다이어그램이다. OFDM 전송기(500)와 OFDM 수신기(540)가 논의된다. OFDM 전송기(500) 또는 수신기(540) 각각은 OFDM 시스템 내에서 통신하도록 구성된 디바이스 또는 장치 내에 구현될 수 있다. 이러한 장치들은 셀룰러 전화기들, PDA(personal digital assistants) 등 또는 몇몇 다른 통신 장치들을 포함할 수 있으나, 이에 한정되는 것은 아니다.
도 5A는 도 2의 FFT 모듈과 도 3A 및 3B의 FFT 프로세스를 구현할 수 있는 OFDM 전송기(500)의 기능 블록 다이어그램이다. 도 5A의 OFDM 전송기(500)의 몇몇 또는 모든 블록들은 단일 IC 또는 ASIC 내에서 구현될 수 있다.
OFDM 전송기(500)는 전형적으로 데이터 샘플들을 저장하도록 구성된 몇몇 타입의 저장 장치를 포함하는 데이터 소스(502)를 포함한다. 데이터 샘플들은 OFDM 전송기(500) 외부에서 생성될 수 있거나 또는 메모리 장치와 연결된 아날로그 대 디지털 컨버터(ADC)(미도시)를 사용하여 OFDM 전송기(500) 내부에서 생성될 수 있다.
하나의 데이터 스트림은 직렬 데이터 스트림으로서 특징지워질 수 있다. 직렬 대 병렬 컨버터(510)는 데이터 소스(502)에 연결되어 OFDM 전송기(500)의 각각의 직교 캐리어에 대하여 병렬 데이터 스트림들을 형성한다. 직렬 대 병렬 컨버터(510)의 출력은 변조기에 연결되며, 병렬 데이터 스트림들 각각은 OFDM 캐리어들의 대응하는 캐리어를 변조시킬 수 있다.
다수의 변조된 OFDM 캐리어들은 그 후에 IFFT 모듈(520)로 연결되며, IFFT 모듈(520)은 도 2의 FFT 모듈로부터 구성될 수 있고 도 3A 및 3B의 프로세스를 이용할 수 있다. IFFT 모듈(520)은 직교 주파수들을 시간 도메인 OFDM 심볼로 변환한다. IFFT 모듈(520)의 출력은 병렬 출력을 하나의 직렬 심볼로 변환하기 위해 병렬 대 직렬 컨버터(522)로 연결된다. 병렬 대 직렬 컨버터(522)의 출력은, 무선 전송기일 수 있는, 전송기(530)로 연결될 수 있다.
도 5B는 도 5A의 OFDM 전송기(500)에 상보적인 OFDM 수신기(540)의 기능 블록 다이어그램이다. OFDM 전송기(500)의 경우와 마찬가지로, OFDM 수신기(540)는 단일 IC 또는 ASIC에서 구현될 수 있다.
OFDM 수신기(540)는 전송기에 의해 브로드캐스팅된 OFDM 심볼들 수신하는 무선 수신기로서 구성될 수 있는 수신기(542)를 포함한다. 수신기(542)는 베이스밴드 신호를 복원하기 위해 수신된 신호를 증폭하고, 필터링하고, 다운컨버팅하기 위해 구성될 수 있다.
베이스밴드 신호는 직렬 베이스밴드 데이터 스트림을 프로세싱을 위해 병렬 데이터 스트림들로 변환하도록 동작하는 직렬 대 병렬 컨버터(544)에 연결된다. 직렬 대 병렬 컨버터(544)의 출력은 FFT 모듈(550)로 연결되며, FFT 모듈(550)은 도 3A 및 3B의 프로세스를 수행하는 도 2의 FFT 모듈일 수 있다.
FFT 모듈(550)은 시간 도메인 심볼을 다수의 직교 주파수 성분들로 변환한다. FFT 모듈(550)의 출력은 데이터를 복원하기 위해 직교 주파수들을 복조하도록 동작하는 복조기(560)로 연결된다.
병렬 대 직렬 컨버터(562)는 FFT 모듈(550)의 출력에 연결되어 병렬 데이터를 직렬 데이터 스트림으로 변환한다. 직렬 데이터 스트림은 추가적인 프로세싱을 위해 데이터 프로세서로 연결된다. 예를 들어, 음성 데이터는 증폭과 스피커로의 전달을 위해 아날로그 포맷으로 변환될 수 있다. 비디오 데이터는 또한 추가적으로 프로세싱되어 디스플레이 장치로 전달될 수 있다.
FFT 아키텍쳐를 구현하는 FFT 모듈은 이전의 FFT 구현들과 비교하여 줄어든 수의 명령들로 인 플레이스 변환을 수행할 수 있다. FFT 모듈은 하나의 행에 다수의 값들을 배치하는 샘플 메모리를 포함한다. FFT 연산은 하나의 행의 샘플들에 대하여 수행되고 레지스터 블록에 기록된다. 하나 이상의 복소 곱셈기들은 회전 인자들을 부분 FFT 결과들에 적용하기 위해 사용될 수 있다.
레지스터 뱅크에 있는 가중치에 주어진 부분 FFT 결과들은 치환되어 샘플 메모리에 재기록된다. 치환은 동일한 메모리의 동일한 행에서 하나의 부분 FFT에 대하여 FFT 입력들의 관계를 유지한다. 프로세스는 원하는 FFT가 완료될 때까지 FFT의 다수의 스테이지들에 대하여 반복된다.
여기에 제시된 실시예들과 관련하여 설명된 방법, 프로세스 또는 알고리즘의 단계들은 직접적으로 하드웨어, 프로세서에 의해 실행되는 소프트웨어 모듈 또는 이들의 결합에 의해 구현될 수 있다.
소프트웨어 모듈은 RAM 메모리, 플래시 메모리, 비휘발성 메모리, ROM 메모리, EPROM 메모리, EEPROM 메모리, 레지스터들, 하드 디스크, 이동식 디스크, CD-ROM 또는 기술적으로 공지된 임의의 다른 형태의 저장 매체 내에 저장될 수 있다. 예시적인 저장 매체는 프로세서에 연결되며, 그 결과 프로세서는 저장 매체로부터 정보를 판독하고 저장 매체에 정보를 기록할 수 있다. 대안적으로, 저장 매체는 프로세서에 통합될 수 있다. 추가적으로, 다양한 방법들이 실시예들에서 제시된 순서로 수행될 수 있거나 또는 단계들의 수정된 순서를 이용하여 수행될 수 있다. 또한, 하나 이상의 프로세스 또는 방법 단계들이 생략될 수 있거나 또는 하나 이상의 프로세스 또는 방법 단계들이 상기 방법들 및 프로세스들에 추가될 수 있다. 추가적인 단계, 블록 또는 동작은 상기 방법들 및 프로세스들의 시작 부분, 끝부분 또는 중간 부분에 추가될 수 있다.
제시된 실시예들에 대한 이전의 설명은 임의의 당업자가 본 발명을 구현하거나 이용할 수 있도록 제공된다. 이러한 실시예들에 대한 다양한 변형들은 당업자에게 명백할 것이며, 여기에 정의된 일반적인 원리들은 본 발명의 범위를 벗어남이 없이 다른 실시예들에 적용될 수 있다. 그리하여, 본 발명은 여기에 제시된 실시예들로 한정되는 것이 아니라, 여기에 제시된 원리들 및 신규한 특징들과 일관되는 최광의의 범위에서 해석되어야 할 것이다.

Claims (31)

  1. rn-포인트, 라딕스(radix) r, 고속 푸리에 변환(FFT)을 결정하는 방법으로서,
    행(row) 당 r개의 샘플들을 가지는 메모리에 변환될 샘플들을 기록하는 단계;
    상기 메모리로부터 r개의 행들을 판독하는 단계;
    r2개의 부분 FFT 값들을 생성하기 위해 r개의 라딕스 r 부분 FFT들을 결정하는 단계;
    r2개의 가중된 부분 FFT 값들을 생성하기 위해 회전(twiddle) 인자들을 상기 r2개의 부분 FFT 값들에 적용하는 단계;
    상기 r2개의 가중된 부분 FFT 값들을 레지스터 블록에 기록하는 단계;
    치환된(transposed) 값들을 생성하기 위해 상기 레지스터 블록에 있는 상기 r2개의 가중된 부분 FFT 값들을 치환하는 단계;
    상기 치환된 값들을 상기 메모리에 기록하는 단계; 및
    상기 메모리의 컨텐츠로부터 FFT 값들을 결정하는 단계를 포함하는 것을 특징으로 하는 방법.
  2. 제 1 항에 있어서,
    상기 메모리에 샘플들을 기록하는 단계는 변환될 샘플들을 컬럼 와이즈(column wise) 방식으로 rn-1개의 행들과 r개의 열들을 가지는 메모리에 기록하는 단계를 포함하는 것을 특징으로 하는 방법.
  3. 제 1 항에 있어서,
    상기 메모리에 샘플들을 기록하는 단계는 변환될 복소 샘플들을 상기 메모리에 기록하는 단계를 포함하는 것을 특징으로 하는 방법.
  4. 제 1 항에 있어서,
    상기 메모리로부터 r개의 행들을 판독하는 단계는,
    r개의 행 인덱스들을 결정하는 단계; 및
    상기 r개의 행 인덱스들에 대응하는 행들을 상기 메모리로부터 판독하는 단계를 포함하는 것을 특징으로 하는 방법.
  5. 제 4 항에 있어서,
    상기 r개의 행 인덱스들을 결정하는 단계는 공식 ai=i×rn-k-1에 대응하는 행 인덱스를 결정하는 단계를 포함하며,
    k는 상기 FFT의 스테이지를 나타내고, i는 0 내지 (r-1)값을 가지는 것을 특징으로 하는 방법.
  6. 제 1 항에 있어서,
    상기 회전 인자들을 상기 r2개의 부분 FFT 값들에 적용하는 단계는,
    적어도 하나의 복소 회전 인자를 검색하는 단계; 및
    상기 r2개의 부분 FFT 값들 중 대응하는 하나의 값과 상기 적어도 하나의 복소 인자의 복소 곱셈을 계산하는 단계를 포함하는 것을 특징으로 하는 방법.
  7. 제 1 항에 있어서,
    상기 r2개의 가중된 부분 FFT 값들을 레지스터 블록에 기록하는 단계는 상기 r2개의 가중된 부분 FFT 값들을 r개의 행들과 r개의 열들로서 구성된 레지스터 블록에 기록하는 단계를 포함하는 것을 특징으로 하는 방법.
  8. 제 7 항에 있어서,
    상기 r2개의 가중된 부분 FFT 값들을 치환하는 단계는,
    상기 레지스터 뱅크의 행 및 열에 대응하는 가중된 부분 FFT 값을 검색하는 단계;
    상기 행 및 열 인덱스들을 치환하는 단계; 및
    상기 치환된 인덱스들에 대응하는 상기 행 및 열에 상기 가중된 부분 FFT 값을 기록하는 단계를 포함하는 것을 특징으로 하는 방법.
  9. rn-포인트, 라딕스 r, 고속 푸리에 변환(FFT)을 결정하는 방법으로서,
    행당 r개의 샘플들을 가지는 메모리에 변환될 샘플들을 기록하는 단계;
    스테이지 값을 초기화하는 단계;
    블록 값을 초기화하는 단계;
    FFT 스테이지를 프로세싱하는 단계;
    n번 동안 상기 FFT 스테이지의 프로세싱을 반복하는 단계; 및
    상기 메모리의 컨텐츠로부터 FFT 값들을 결정하는 단계를 포함하며,
    상기 FFT 스테이지를 프로세싱하는 단계는,
    (a) 상기 스테이지 값에 기반하여 다수의 블록들을 결정하는 단계;
    (b) 상기 메모리로부터 r개의 행들을 검색하는 단계;
    (c) r2개의 부분 FFT 값들을 생성하기 위해 r개의 라딕스 r 부분 FFT들을 결정하는 단계;
    (d) r2개의 가중된 부분 FFT 값들을 생성하기 위해 회전 인자들을 상기 r2개의 부분 FFT 값들에 적용하는 단계;
    (e) 치환된 값들을 생성하기 위해 레지스터 블록에 있는 상기 r2개의 가중된 부분 FFT 값들을 치환하는 단계;
    (f) 상기 치환된 값들을 상기 메모리에 기록하는 단계;
    (g) 상기 블록 및 스테이지 값들에 기반하여 상기 단계들 (b) 내지 (f)를 반복하는 단계; 및
    (h) 상기 스테이지 값을 증가시키는 단계를 포함하는 것을 특징으로 하는 방법.
  10. rn-포인트, 라딕스 r, 고속 푸리에 변환(FFT)을 결정하는 방법으로서,
    행당 r개의 샘플들을 가지는 메모리에 변환될 샘플들을 기록하는 단계;
    (a) 스테이지 카운터를 초기화하는 단계;
    (b) 블록 카운터와 부분 FFT 카운터를 초기화하는 단계;
    (c) 상기 스테이지, 블록 및 부분 FFT 카운터 값들에 기반하여 상기 메모리로부터 r개의 행들을 검색하는 단계;
    (d) r2개의 부분 FFT 값들을 생성하기 위해 r개의 라딕스 r 부분 FFT들을 결정하는 단계;
    (e) r2개의 가중된 부분 FFT 값들을 생성하기 위해 회전 인자들을 상기 r2개의 부분 FFT 값들에 적용하는 단계;
    (f) 상기 r2개의 가중된 부분 FFT 값들을 레지스터 블록에 기록하는 단계;
    (g) 치환된 값들을 생성하기 위해 레지스터 블록에 있는 상기 r2개의 가중된 부분 FFT 값들을 치환하는 단계;
    (i) 상기 치환된 값들을 상기 메모리에 기록하는 단계;
    (j) 상기 부분 FFT 카운터와 상기 블록 카운터를 업데이트하는 단계;
    (k) 상기 블록 카운터의 값과 상기 부분 FFT 카운터의 값에 기반하여 상기 단계들 (c) 내지 (j)를 반복하는 단계;
    (l) 상기 스테이지 카운터의 값을 업데이트하는 단계;
    (m) 상기 스테이지 카운터의 값에 기반하여 상기 단계들 (b) 내지 (k)를 반복하는 단계; 및
    상기 메모리의 컨텐츠로부터 FFT 값들을 결정하는 단계를 포함하는 것을 특징으로 하는 방법.
  11. rn-포인트, 라딕스 r, 고속 푸리에 변환(FFT) 장치로서,
    메모리 행당 r개의 샘플들을 가지며 rn개의 샘플들을 저장하도록 구성된 메모리;
    상기 메모리의 r개의 행들로부터의 샘플들에 대하여 r개의 r-포인트 FFT 부분 FFT를 수행하도록 구성된 FFT 엔진;
    r개의 행들과 r개의 열들로 구성된 r2개의 레지스터들을 가지며, 상기 FFT 엔진으로부터 출력 값들을 수신하도록 구성된 레지스터 뱅크; 및
    상기 레지스터 뱅크에 있는 값들을 치환하고 치환된 값들을 상기 FFT 엔진에 의해 동작되는 메모리로부터의 r개의 행들에 기록하도록 구성된 치환 모듈을 포함하는 것을 특징으로 하는 장치.
  12. 제 11 항에 있어서,
    적어도 하나의 FFT 회전 인자를 저장하도록 구성된 회전 인자 메모리; 및
    상기 회전 인자 메모리로부터의 FFT 회전 인자와 상기 레지스터 뱅크에 있는 레지스터로부터의 값을 곱하도록 구성되며, 상기 레지스터에 출력 값을 기록하도록 구성된 적어도 하나의 곱셈기를 추가로 포함하는 것을 특징으로 하는 장치.
  13. 제 12 항에 있어서,
    상기 적어도 하나의 곱셈기는 적어도 하나의 복소 곱셈기를 포함하는 것을 특징으로 하는 장치.
  14. 제 12 항에 있어서,
    상기 적어도 하나의 곱셈기는 r-1개의 복소 곱셈기들을 포함하는 것을 특징으로 하는 장치.
  15. 제 12 항에 있어서,
    상기 회전 인자 메모리는 ROM, RAM, NV-ROM 및 플래시 메모리를 포함하는 그룹으로부터 선택된 적어도 하나의 메모리를 포함하는 것을 특징으로 하는 장치.
  16. 제 11 항에 있어서,
    상기 rn개의 샘플들은 rn개의 복소 샘플들을 포함하는 것을 특징으로 하는 장치.
  17. 제 11 항에 있어서,
    상기 메모리는 RAM을 포함하는 것을 특징으로 하는 장치.
  18. 제 11 항에 있어서,
    상기 FFT 엔진은 파이프라이닝된(pipelined) FFT 엔진을 포함하는 것을 특징으로 하는 장치.
  19. 제 11 항에 있어서,
    상기 치환 모듈은 컬럼 와이즈(column wise) 방식으로 값들을 판독하고 로우 와이즈(row wise) 방식으로 메모리에 상기 값들을 기록함으로써 상기 레지스터 뱅 크에 있는 값들을 치환하는 것을 특징으로 하는 장치.
  20. 제 11 항에 있어서,
    상기 치환 모듈은 상기 레지스터 뱅크의 행 값과 열 값에 대응하는 레지스터 값을 판독하고, 상기 행 값과 상기 열 값을 치환하고, 상기 치환된 행 값과 열 값에 대응하는 상기 레지스터 값을 상기 레지스터에 기록함으로써 상기 레지스터 뱅크에 있는 값들을 치환하는 것을 특징으로 하는 장치.
  21. 하나 이상의 프로세서들에 의해 실행될 때, 방법을 수행하는 하나 이상의 프로세서에서 이용가능한 명령들을 저장하도록 구성된 하나 이상의 저장 장치들로서,
    상기 방법은,
    행당 r개의 샘플들을 가지는 메모리에 변환될 샘플들을 기록하는 단계;
    상기 메모리로부터 r개의 행들을 판독하는 단계;
    r2개의 부분 FFT 값들을 생성하기 위해 r개의 라딕스 r 부분 FFT들을 결정하는 단계;
    r2개의 가중된 부분 FFT 값들을 생성하기 위해 회전 인자들을 상기 r2개의 부분 FFT 값들에 적용하는 단계;
    상기 r2개의 가중된 부분 FFT 값들을 레지스터 블록에 기록하는 단계;
    치환된 값들을 생성하기 위해 상기 레지스터 블록에 있는 상기 r2개의 가중된 부분 FFT 값들을 치환하는 단계;
    상기 치환된 값들을 상기 메모리에 기록하는 단계; 및
    상기 메모리의 컨텐츠로부터 FFT 값들을 결정하는 단계를 포함하는 것을 특징으로 하는 저장 장치.
  22. rn-포인트, 라딕스 r, 고속 푸리에 변환(FFT)을 결정하는 장치로서,
    행당 r개의 샘플들을 가지는 메모리에 변환될 샘플들을 기록하기 위한 수단;
    상기 메모리로부터 r개의 행들을 판독하기 위한 수단;
    r2개의 부분 FFT 값들을 생성하기 위해 r개의 라딕스 r 부분 FFT들을 결정하기 위한 수단;
    r2개의 가중된 부분 FFT 값들을 생성하기 위해 회전 인자들을 상기 r2개의 부분 FFT 값들에 적용하기 위한 수단;
    상기 r2개의 가중된 부분 FFT 값들을 레지스터 블록에 기록하기 위한 수단;
    치환된 값들을 생성하기 위해 상기 레지스터 블록에 있는 상기 r2개의 가중된 부분 FFT 값들을 치환하기 위한 수단;
    상기 치환된 값들을 상기 메모리에 기록하기 위한 수단; 및
    상기 메모리의 컨텐츠로부터 FFT 값들을 결정하기 위한 수단을 포함하는 것을 특징으로 하는 장치.
  23. 제 22 항에 있어서,
    상기 메모리에 샘플들을 기록하기 위한 수단은 변환될 샘플들을 컬럼 와이즈 방식으로 rn-1개의 행들과 r개의 열들을 가지는 메모리에 기록하는 것을 포함하는 것을 특징으로 하는 장치.
  24. 제 22 항에 있어서,
    상기 메모리에 샘플들을 기록하기 위한 수단은 변환될 복소 샘플들을 상기 메모리에 기록하는 것을 포함하는 것을 특징으로 하는 장치.
  25. 제 22 항에 있어서,
    상기 메모리로부터 r개의 행들을 판독하기 위한 수단은,
    r개의 행 인덱스들을 결정하기 위한 수단; 및
    상기 r개의 행 인덱스들에 대응하는 행들을 상기 메모리로부터 판독하기 위한 수단을 포함하는 것을 특징으로 하는 장치.
  26. 제 24 항에 있어서,
    상기 r개의 행 인덱스들을 결정하기 위한 수단은 공식 ai=i×rn-k-1에 대응하는 행 인덱스를 결정하는 것을 포함하며,
    k는 상기 FFT의 스테이지를 나타내고, i는 0 내지 (r-1)값을 가지는 것을 특징으로 하는 장치.
  27. 제 22 항에 있어서,
    상기 회전 인자들을 상기 r2개의 부분 FFT 값들에 적용하기 위한 수단은,
    적어도 하나의 복소 회전 인자를 검색하기 위한 수단; 및
    상기 r2개의 부분 FFT 값들 중 대응하는 하나의 값과 상기 적어도 하나의 복소 인자의 복소 곱셈을 계산하기 위한 수단을 포함하는 것을 특징으로 하는 장치.
  28. 제 22 항에 있어서,
    상기 r2개의 가중된 부분 FFT 값들을 레지스터 블록에 기록하기 위한 수단은 상기 r2개의 가중된 부분 FFT 값들을 r개의 행들과 r개의 열들로서 구성된 레지스터 블록에 기록하는 것을 포함하는 것을 특징으로 하는 장치.
  29. 제 28 항에 있어서,
    상기 r2개의 가중된 부분 FFT 값들을 치환하기 위한 수단은,
    상기 레지스터 뱅크의 행 및 열에 대응하는 가중된 부분 FFT 값을 검색하기 위한 수단;
    상기 행 및 열 인덱스들을 치환하기 위한 수단; 및
    상기 치환된 인덱스들에 대응하는 상기 행 및 열에 상기 가중된 부분 FFT 값을 기록하기 위한 수단을 포함하는 것을 특징으로 하는 장치.
  30. rn-포인트, 라딕스 r, 고속 푸리에 변환(FFT)을 결정하는 장치로서,
    행당 r개의 샘플들을 가지는 메모리에 변환될 샘플들을 기록하기 위한 수단;
    스테이지 값을 초기화하기 위한 수단;
    블록 값을 초기화하기 위한 수단;
    FFT 스테이지를 프로세싱하기 위한 수단;
    n번 동안 상기 FFT 스테이지의 프로세싱을 반복하기 위한 수단; 및
    상기 메모리의 컨텐츠로부터 FFT 값들을 결정하기 위한 수단을 포함하며,
    상기 FFT 스테이지를 프로세싱하기 위한 수단은,
    (a) 상기 스테이지 값에 기반하여 다수의 블록들을 결정하기 위한 수단;
    (b) 상기 메모리로부터 r개의 행들을 검색하기 위한 수단;
    (c) r2개의 부분 FFT 값들을 생성하기 위해 r개의 라딕스 r 부분 FFT들을 결정하기 위한 수단;
    (d) r2개의 가중된 부분 FFT 값들을 생성하기 위해 회전 인자들을 상기 r2개의 부분 FFT 값들에 적용하기 위한 수단;
    (e) 치환된 값들을 생성하기 위해 레지스터 블록에 있는 상기 r2개의 가중된 부분 FFT 값들을 치환하기 위한 수단;
    (f) 상기 치환된 값들을 상기 메모리에 기록하기 위한 수단;
    (g) 상기 블록 및 스테이지 값들에 기반하여 상기 단계들 (b) 내지 (f)를 반복하기 위한 수단; 및
    (h) 상기 스테이지 값을 증가시키기 위한 수단을 포함하는 것을 특징으로 하는 장치.
  31. rn-포인트, 라딕스 r, 고속 푸리에 변환(FFT)을 결정하는 장치로서,
    행당 r개의 샘플들을 가지는 메모리에 변환될 샘플들을 기록하기 위한 수단;
    (a) 스테이지 카운터를 초기화하기 위한 수단;
    (b) 블록 카운터와 부분 FFT 카운터를 초기화하기 위한 수단;
    (c) 상기 스테이지, 블록 및 부분 FFT 카운터 값들에 기반하여 상기 메모리로부터 r개의 행들을 검색하기 위한 수단;
    (d) r2개의 부분 FFT 값들을 생성하기 위해 r개의 라딕스 r 부분 FFT들을 결정하기 위한 수단;
    (e) r2개의 가중된 부분 FFT 값들을 생성하기 위해 회전 인자들을 상기 r2개의 부분 FFT 값들에 적용하기 위한 수단;
    (f) 상기 r2개의 가중된 부분 FFT 값들을 레지스터 블록에 기록하기 위한 수단;
    (g) 치환된 값들을 생성하기 위해 레지스터 블록에 있는 상기 r2개의 가중된 부분 FFT 값들을 치환하기 위한 수단;
    (i) 상기 치환된 값들을 상기 메모리에 기록하기 위한 수단;
    (j) 상기 부분 FFT 카운터와 상기 블록 카운터를 업데이트하기 위한 수단;
    (k) 상기 블록 카운터의 값과 상기 부분 FFT 카운터의 값에 기반하여 상기 단계들 (c) 내지 (j)를 반복하기 위한 수단;
    (l) 상기 스테이지 카운터의 값을 업데이트하기 위한 수단;
    (m) 상기 스테이지 카운터의 값에 기반하여 상기 단계들 (b) 내지 (k)를 반복하기 위한 수단; 및
    상기 메모리의 컨텐츠로부터 FFT 값들을 결정하기 위한 수단을 포함하는 것을 특징으로 하는 장치.
KR1020067013515A 2003-12-05 2004-12-03 Fft 아키텍쳐 및 방법 KR20060096511A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US52719603P 2003-12-05 2003-12-05
US60/527,196 2003-12-05

Publications (1)

Publication Number Publication Date
KR20060096511A true KR20060096511A (ko) 2006-09-11

Family

ID=34676710

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020067013515A KR20060096511A (ko) 2003-12-05 2004-12-03 Fft 아키텍쳐 및 방법

Country Status (17)

Country Link
US (1) US7702712B2 (ko)
EP (1) EP1690196B1 (ko)
JP (1) JP2007513431A (ko)
KR (1) KR20060096511A (ko)
CN (1) CN1914607A (ko)
AR (1) AR046869A1 (ko)
AT (1) ATE412220T1 (ko)
AU (1) AU2004297978A1 (ko)
BR (1) BRPI0417222A (ko)
CA (1) CA2547488A1 (ko)
DE (1) DE602004017351D1 (ko)
ES (1) ES2315735T3 (ko)
IL (1) IL176050A0 (ko)
MX (1) MXPA06006391A (ko)
RU (1) RU2006123934A (ko)
TW (1) TW200534121A (ko)
WO (1) WO2005057423A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101335367B1 (ko) * 2012-04-26 2013-12-02 숭실대학교산학협력단 메모리 제어 장치 및 방법

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7430575B2 (en) * 2003-12-19 2008-09-30 Fujitsu Limited One-dimensional fourier transform program, method and apparatus
US7720162B2 (en) * 2005-03-10 2010-05-18 Qualcomm Incorporated Partial FFT processing and demodulation for a system with multiple subcarriers
US8229014B2 (en) * 2005-03-11 2012-07-24 Qualcomm Incorporated Fast fourier transform processing in an OFDM system
US8266196B2 (en) * 2005-03-11 2012-09-11 Qualcomm Incorporated Fast Fourier transform twiddle multiplication
KR100762281B1 (ko) * 2005-12-08 2007-10-01 한국전자통신연구원 고속 푸리에 변환 시스템의 메모리 주소 생성 방법 및 그를이용한 트위들 팩터 생성 장치
WO2007066964A1 (en) * 2005-12-08 2007-06-14 Electronics And Telecommunications Research Institute Memory address generating method and twiddle factor generator using the same
US7702713B2 (en) * 2006-03-24 2010-04-20 Debashis Goswami High speed FFT hardware architecture for an OFDM processor
US20070239815A1 (en) * 2006-04-04 2007-10-11 Qualcomm Incorporated Pipeline fft architecture and method
US20070266070A1 (en) * 2006-05-12 2007-11-15 Chung Hua University Split-radix FFT/IFFT processor
US8503545B2 (en) * 2006-08-31 2013-08-06 Advanced Micro Devices, Inc. I/Q imbalance compensation
KR100836624B1 (ko) * 2006-12-08 2008-06-10 한국전자통신연구원 가변 고속 푸리에 변환 장치 및 그 방법
US8738680B2 (en) 2008-03-28 2014-05-27 Qualcomm Incorporated Reuse engine with task list for fast fourier transform and method of using the same
WO2009128033A2 (en) * 2008-04-18 2009-10-22 Nxp B.V. System and method for configurable mixed radix fft architecture for multimode device
WO2010028440A1 (en) * 2008-09-10 2010-03-18 Co-Operative Research Centre For Advanced Automotive Technology Ltd Method and device for computing matrices for discrete fourier transform (dft) coefficients
CN101478785B (zh) * 2009-01-21 2010-08-04 华为技术有限公司 资源池管理系统及信号处理方法
CN102238348B (zh) * 2010-04-20 2014-02-05 上海华虹集成电路有限责任公司 一种可变数据个数的fft/ifft处理器的基4模块
TWI402695B (zh) * 2010-07-12 2013-07-21 Novatek Microelectronics Corp 分裂基數-2/8快速傅立葉轉換裝置及方法
CN102339272A (zh) * 2010-07-16 2012-02-01 联咏科技股份有限公司 分裂基数-2/8快速傅立叶转换装置及方法
US8819097B2 (en) * 2011-09-09 2014-08-26 Texas Instruments Incorporated Constant geometry split radix FFT
US8825729B1 (en) * 2011-09-19 2014-09-02 Altera Corporation Power and bandwidth efficient FFT for DDR memory
US9275013B2 (en) * 2012-03-16 2016-03-01 Qualcomm Incorporated System and method for analysis and reconstruction of variable pulse-width signals having low sampling rates
US9275014B2 (en) 2013-03-13 2016-03-01 Qualcomm Incorporated Vector processing engines having programmable data path configurations for providing multi-mode radix-2x butterfly vector processing circuits, and related vector processors, systems, and methods
US9098449B2 (en) * 2013-03-15 2015-08-04 Analog Devices, Inc. FFT accelerator
US9311274B2 (en) * 2013-10-17 2016-04-12 Texas Instruments Incorporated Approach for significant improvement of FFT performance in microcontrollers
WO2018170400A1 (en) * 2017-03-16 2018-09-20 Jaber Technology Holdings Us Inc. Apparatus and methods of providing an efficient radix-r fast fourier transform
US10783216B2 (en) 2018-09-24 2020-09-22 Semiconductor Components Industries, Llc Methods and apparatus for in-place fast Fourier transform
CN109558638B (zh) * 2018-10-23 2023-03-24 清华大学 Fft处理器
US11221397B2 (en) * 2019-04-05 2022-01-11 Texas Instruments Incorporated Two-dimensional FFT computation
KR20200143030A (ko) 2019-06-14 2020-12-23 한국전자통신연구원 입력 신호의 특정 주파수 성분들을 분석하기 위한 고속 푸리에 변환 장치
CN115859003A (zh) * 2021-09-27 2023-03-28 华为技术有限公司 执行fft的方法、装置及设备

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS59189474A (ja) 1983-04-13 1984-10-27 Yokogawa Medical Syst Ltd 高速フ−リエ変換演算装置
JP3749022B2 (ja) * 1997-09-12 2006-02-22 シャープ株式会社 高速フーリエ変換を用いて短い待ち時間でアレイ処理を行う並列システム
US6088714A (en) * 1998-07-27 2000-07-11 Agilent Technologies Mechanism for calculating one-dimensional fast fourier transforms
US6839728B2 (en) * 1998-10-09 2005-01-04 Pts Corporation Efficient complex multiplication and fast fourier transform (FFT) implementation on the manarray architecture
US6609140B1 (en) * 1999-11-30 2003-08-19 Mercury Computer Systems, Inc. Methods and apparatus for fast fourier transforms
KR100481852B1 (ko) * 2002-07-22 2005-04-11 삼성전자주식회사 고속 푸리에 변환 장치

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101335367B1 (ko) * 2012-04-26 2013-12-02 숭실대학교산학협력단 메모리 제어 장치 및 방법

Also Published As

Publication number Publication date
CA2547488A1 (en) 2005-06-23
IL176050A0 (en) 2006-10-05
RU2006123934A (ru) 2008-01-10
ATE412220T1 (de) 2008-11-15
US7702712B2 (en) 2010-04-20
MXPA06006391A (es) 2006-08-23
CN1914607A (zh) 2007-02-14
TW200534121A (en) 2005-10-16
AU2004297978A1 (en) 2005-06-23
EP1690196A2 (en) 2006-08-16
US20050182806A1 (en) 2005-08-18
AR046869A1 (es) 2005-12-28
WO2005057423A3 (en) 2006-06-01
DE602004017351D1 (de) 2008-12-04
WO2005057423A2 (en) 2005-06-23
ES2315735T3 (es) 2009-04-01
JP2007513431A (ja) 2007-05-24
BRPI0417222A (pt) 2007-02-21
EP1690196B1 (en) 2008-10-22

Similar Documents

Publication Publication Date Title
KR20060096511A (ko) Fft 아키텍쳐 및 방법
US7464127B2 (en) Fast fourier transform apparatus
Blahut Fast algorithms for signal processing
JP2009535678A (ja) パイプラインfftのアーキテクチャおよび方法
JP2005531252A (ja) 高速フーリエ変換を用いた混合−基数方式の変調装置
US8917588B2 (en) Fast Fourier transform and inverse fast Fourier transform (FFT/IFFT) operating core
US6356926B1 (en) Device and method for calculating FFT
US4646256A (en) Computer and method for the discrete bracewell transform
CN117235420B (zh) 一种信号处理电路、方法、处理器、存储介质及芯片
US20170103042A1 (en) System and method for optimizing mixed radix fast fourier transform and inverse fast fourier transform
US20060200513A1 (en) Fast Fourier transform processor and method capable of reducing size of memories
EP1436725A2 (en) Address generator for fast fourier transform processor
EP2144172A1 (en) Computation module to compute a multi radix butterfly to be used in DTF computation
US6728742B1 (en) Data storage patterns for fast fourier transforms
US20070180011A1 (en) Fast fourier transform processor
JP5486226B2 (ja) ルリタニアマッピングを用いるpfaアルゴリズムに従って種々のサイズのdftを計算する装置及び方法
EP2144173A1 (en) Hardware architecture to compute different sizes of DFT
KR100602272B1 (ko) 고속으로 데이터를 처리하는 고속 퓨리에 변환 장치 및 방법
US8601045B2 (en) Apparatus and method for split-radix-2/8 fast fourier transform
US20210255804A1 (en) Data scheduling register tree for radix-2 fft architecture
US6564236B1 (en) Device and associated method for calculating the direct or inverse fourier transform of the product of a complex symbol times a complex sinusoidal waveform
US6959222B1 (en) Accelerator engine for processing functions used in audio algorithms
Ku et al. A design methodology of buffer-memory architectures for FFT computation
Rajendran Design of Low Power Mixed Radix FFT Processor for MIMO OFDM Systems

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application