2009-11-22 2 views
3

복잡한 숫자의 배열을 극좌표로 변환하는 빠른 방법을 찾고 있습니다.복잡한 숫자 : 빠른 직교 - 극 변환

Q.phase = atan2 (X.imag/X.real); 
    Q.magniude = sqrt (X.imag * X.imag + X.real * X.real); 

내가 고정 소수점 DSP에 전환이 초당 약 400 천 번을 할 필요가 :이 같은 극 표현으로 바꿀하려는 복소수 X 주어진

예컨대

. 내 숫자는 1.15.16 고정 소수점 형식으로되어 있으며 그렇게 유지하고 싶습니다.

DSP는 무조건 부 루프에서 일을 수행 할 때 매우 빠릅니다. 루프 카운트가 미리 알려진 경우 서브 루틴 호출 및 분할을 수행해야 할 때 크롤링합니다. 캐시 미스도 매우 느려서, 가능하다면 큰 테이블을 사용하지 않기를 바란다. (4k는 괜찮을 것이다 .. 나는 그 태스크를 위해 온칩 메모리를 약간 따로 설정할 수있다).

현재 atan2를 다항식 근사법으로 처리하고 정수 제곱근에 대해 잘 알려진 비트 방식 알고리즘을 사용합니다. 그 정도로 빠르지는 않습니다.

결과를 얻는 데보다 효율적인 방법이 있어야한다고 생각합니다. 어쩌면 sqrt와 atan의 계산 중 일부를 공유 할 수 있습니까? 아니면 결과를 얻기위한 반복적 인 방법이 있습니까?

답변

2

체크 아웃 this CORDIC DSP optimization 귀하의 경우에도 도움이되는지 알기가 어렵습니다.

+0

멋진 기사! 승수를 사용하여 계산 속도를 높이고 가지를 제거하는 것에 대한 생각을 좋아하십시오. 나는 그것을 시도 할 것입니다. –

+0

그게 내가 찾고 있었던거야. 고마워. –

+0

동일한 주제에 또한보십시오 http://www.ddj.com/cpp/207000448 – Clifford