FFT C 언어 / C의 필요

G

Guest

Guest
나는 24 점 ^ 2이 필요 FFT를, 시리즈 데이터 거대한하는 C / C 의 거래에 있습니다.누구든지 통화당 fft를 C 나 효율이 높은?

 
DSPLib 있음 C67xx에 TI가 해당 유형의 FFT 알고리즘은 다양한 소스에 대한 프로토 타입의 C입니다.

보기 ti.com

 
제가 최근에 ... 실험실 코스 내의 한 부분 한 프로그램에서 algoithm으로 DIF -2 기수를 계산하여 FFT의 C에 대한 N 개의 포인트

난 .. 여기에 프로그램을 게시거야인정하세요

/ * 작성자 : Ragavan 해당 없음 *가 될, DECE /
/ * 연구소 : 마드라스 번호 *, 마드라스 연구소의 기술 /
/ * 전화 번호 : 9840806628 * /
/ * 이메일 : imperial_amazon (시) yahoo.com 번호 * /
/ *이 경우에는, 사용 전 논리를하실 수 있습니다 안에 따라 *을 느낄 무료 /
/ * 메일을 날 ..내가 *을 자세하게 설명해 드리겠 /

#은 <alloc.h> 포함
#은 <stdio.h> 포함
#은 <conio.h> 포함
#은 <math.h> 포함

3.141592654 = 플로 우트 파이를;

복잡한 구조체
(imag 부동 진짜;);

int BITREV (int N으로, int의 bininp) / * 기능 *을 반전의 위해 할 비트 /
(
int 나, 인분 포함, bitrevd = 0;
인분 포함 = log10 (N)을 / log10 (2);
0은 (i =; 전 <(int) 인분 포함; 난 )
(만약 (((bininp <<1) & (N / 2))! = 0) bitrevd = (int) 펑 (2, 1);)
반환 (bitrevd);
)내가 (int되는 npt를 int 플로 우트 wreal) / *는 J2 계산 실제 부분을 다시 (특급 (- * 파이 * 안내 n / N)을) * /
(
내가 만약 (반도체 제조 (왜냐하면 (2 * 파이 * (플로트) / (플로트)되는 npt)) <0.0001)
(반환 0;)
또 (복귀 ((플로트) 왜냐하면 (2 * 파이 * (플로트) 난 / (플로트)되는 npt));)
)

플로트 내가 wimag (int되는 npt, int) / *는 J2 계산 실제 부품 인스턴트 (특급 (- * 파이 * 안내 n / N)을) * /
(
내가 만약 (반도체 제조 (- 죄 (2 * 파이 * (플로트) / (플로트)되는 npt)) <0.0001)
(반환 0;)
다른 사람
(반환 (플로트) (- 죄 (2 * 파이 * (플로트) 나 / (플로트)되는 npt));)
)무효의 분해가 (int되는 npt, int N으로, int 브이,,) [1024]를 구조체 (※ x_time을 복합) 구조체 컴플렉스 (* mainX) [1024]
(
나는 복잡한 구조체는 * x_tmp; int;
x_tmp = malloc (2 *되는 npt * sizeof (플로트));
0은 (i =; 전 <되는 npt; 난 ) (x_tmp [전]. 진짜 = 0; x_tmp [전]. imag = 0;)
0은 (i =; 전 <(N / 2); 난 )
(
자동 d 개, 플로 우트를 b에서 c;
x_tmp [나]. 진짜 = x_time [브이] [내가]. 진짜 를 x_time [브이] [나 (N / 2)]. 진짜;
x_tmp [나]. imag = x_time [브이] [내가].] imag ) x_time의 [v를] [나 (N / 2. imag;
= (x_time [브이] [나]. 리얼 x_time [브이] [나 (N / 2)]. 실제);
b = (x_time [브이] [나]. imag - x_time [브이] [나 (N / 2)]. imag);
C = wreal (되는 npt,되는 npt * 나 / N)을; d 개의 = wimag (되는 npt,되는 npt * 나 / N)을;
x_tmp [나 (N / 2)]. 실제 = ((* c는) - (나 * 라));
x_tmp [나 (N / 2)]. imag = ((* d)에 (2 * c는));
)
브이 = N 개의 * 제품은 (i; 전 <(N 개의 (N 개의 * 브이)); 난 )
(
자동 int s의;
s의 = 브이에 *의;
(해당되는 경우 x_tmp의 [0들]. 진짜 ==)
(mainX [0] [나]. 진짜 = 복근 (x_tmp [이]에요. 진짜);)
다른 사람
(mainX는 [0] [나]. 진짜 = x_tmp의 [이]에요. 진짜;)
(해당되는 경우 x_tmp의 [이.에요] imag == 0)
(mainX [0] [나]. imag은 = 복근 (x_tmp [이]에요. imag);)
다른 사람
(mainX [0] [나]. imag = x_tmp [님의]. imag;)
)
/ *의 printf (이 "\ n"n을 nDecomposed \ N 개의 \ 프로그램 \);
0은 (i =; 전 <되는 npt; 난 )
(
printf ( "\ N 개의 % f 옵션을 \ t % f를", mainX [0] [나].] 진짜, mainX [0] [나. imag);
) * /
) 무료 (x_tmp;
)

무효의 main ()
(
]를 구조체 복합 (* x)를 [1024;
int 나되는 npt, N으로, 무대, m, j를, NumX, s의;
clrscr ();
printf (이 "\ n \ 윈 ="); scanf ( "% d 개", &되는 npt);
무대 = (int) (log10 ((더블)되는 npt) / log10 (2));
무대 = 1;
엑스 = malloc (2 * 2 *되는 npt * sizeof (플로트));
0은 (i =; 전 <되는 npt; 난 )
(
엑스 [0] [나]. 진짜 = 0;
엑스 [0] [나]. imag = 0;
)
printf ( "\ nx =");
0은 (i =; 전 <되는 npt; 난 )
(scanf ( "% f를", & 엑스 [0] [나]. 진짜);)
0은 (i =; 전 <되는 npt, 난 )
(엑스 [0] [나]. imag = 0;)
, 분해 (되는 npt,되는 npt, 0 x를 엑스);
무대 = 용 (들; 님의> 0;들 -)
(
]를 X1) [1024 구조체 복합 (*를;
일본 = m = 0;
X1 = malloc (2 *되는 npt * 2 * sizeof (플로트));
NumX = (int) (int되는 npt / () 펑 (2, s의));
0은 (i =; 전 <NumX; 난 )
(
(용; j를 <(m ((int) 펑 (2,들))); j를 )
(
(] X1 [나] [jm의). 실제 = (() 플로트) ((x는 [0] [일본]. 진짜));
(X1 [나] [jm]를). imag = (() 플로트) ((x는 [0] [일본]. imag));
)
m = (int) 펑 (2, s의);
)
0은 (i =; 전 <NumX; 난 )
(
, 분해 (되는 npt, (int) 펑 (2,들), 내가, X1 엑스);
)
) 무료 (X1;
)
/ *의 printf ( "반전 \ N 개의 \ 앤 비트 \ n \ nFFT 출력하기 전에");
0은 (i =; 전 <되는 npt; 난 )
(
printf ( "\ N 개의 % f 옵션을 \ t j를 %에서 F", 엑스 [0] [나]. 정말이야, 엑스 [0] [나]. imag);
) * /
printf ( "\ 앤 처리 \ n FFT \ N 개의 \ nResult의 제품");
0은 (i =; 전 <되는 npt; 난 )
(
printf ( "\ N 개의 % f 옵션을 \ t j를 % f를"여기서 x [0] [BITREV (되는 npt, 1)]. 정말이야, 엑스 [0] [BITREV (되는 npt, 1)]. imag);
)
무료 (x)를;
) getch (;

)

 
안녕

FFT 등 긴, 기수 - 2, efficeint 아니라 자세한 내용을 시도하거나 사용하는 기수 - 8.

감사합니다

 
/ / x는 계수이다 진짜
/ /이 y를 계수는 상상의

/ /이 함수를 호출하여 그 결과 현실과 상상의
/ / 값을 ImaginaryArray과 RealArray에 저장되어있을 것입니다

int 주 ()
(

FFT (1, Number1, RealArray, ImaginaryArray); / / 1 FFT 용
/ / Number1 두 권력이 될 뻔
/ / Number1 = 5; 5 = 2 ^ 32

FFT (-1, Number2, RealArray, 1 IFFT );//- ImaginaryArray

)

FFT는 (int 말일세 무효의, int m) 엑스 플로 우트 * *를, y는 플로 우트

(

int 앤, 나, 지미, j를, 케이, I2, 난, L1, L2;

, c1을, C2를, 텍사스, 타이, T1의, T2, U1, U2가 플로트 z는;

/ / 아니 승점의n은 1;

0은 (i =; 전 <m; 난 )

n *= 2;
/ *

0000 -----> 0000 0

0001 -----> 1000 8

0010 -----> 0100 4

0011 -----> 1100 12

0100 -----> 0010 2

0101 -----> 1010

0110 -----> 0110

0111 -----> 1110

1000 -----> 0001

1001 -----> 1001

1010 -----> 0101

1011 -----> 1101

1100 -----> 0011

1101 -----> 1011

1110 -----> 0111

1111 -----> 1111

* /
I2 = N 개의>> 1; / / 2 ^ n

일본 = 0;

0은 (i =; 나 <아 1; 난 )

(

)하는 경우는 (i <j를

(

텍사스는 = 엑스 [난];

타이 = y를 [나]에;

엑스 [나] = 엑스 [일본];

y를 [나]는 = y는]을 [j를;

엑스 [일본 정보] = 텍사스 주;

y는 [일본]은 = 티;

)별명 = I2;

일본 동안 (k 값이 <=)

(

일본 -= 헉;

케이>> = 1;

)

일본 는 = 헉;
)c1 = -1;

C2를 = 0;

L2 = 1;고도 <제품에 대한 (내가 = 0; 난, 난 )

(

L1 = L2;

L2 <<= 1;

U1 = 1;

U2가 = 0;)에 대한 (일본 = 0; 일본 <L1; j를

(

일본은 (i =; 난 <n; 전 = L2)

(

지미 = 나 L1;

T1의 = (y는 [U1 *은 * x는 [지미]은 - U2가 떨어 졌는데]);

T2 = (U1 *는 y를 [지미] U2가 * 엑스 [지미]);

엑스 [지미] = 엑스 [난] - T1의;

y는 [지미] = y를 [내가] - T2;

x는 [내가] = T1의;

y는가 [전] = T2;

)

z는 = (* c1 U1 - U2가 C2를 *);

U2가 = (U1 U2가 C2를 * * c1);

U1 = z는;

)

C2를 = Sqrt ((1.0 - c1) / 2.0);

(있다면 말일세 == 1)

C2를 = - C2를;

c1 = Sqrt ((1.0 c1) / 2.0);

)

(있다면 말일세 == -1)

(

0은 (i =; 난 <n; 난 )

(

엑스 [나] = 엑스 [나] / n;y를 [나] = y를 [내가] / n;)

)

)
미안하지만, 당신은 첨부 파일이 필요합니다 보려면 로그인을에

 

Welcome to EDABoard.com

Sponsor

Back
Top