Download presentation
Presentation is loading. Please wait.
1
FFT의 구현 17th of October, November
2
Today’s topic Numerical Recipes in C 의 사용법 Related issues Exercise FFT
IFFT Related issues 외부 C코드의 링크방법 외부 C코드의 함수 호출 방법 Exercise Replace the DFT with the FFT in the previous exercise
3
DIY의 한계 제품 개발 기간 개발->평가->디버깅->평가-> ->…
기획->개발->평가->디버깅->개발->완성? 이 중 가장 많은 시간이 소요되는 부분은? 개발->평가->디버깅->평가-> ->… Programmer의 역할 과거에는 매우 대접받은 직업 현재에는 3D-업종? 인터넷의 발달에 따른 사용자 포럼의 활성화 다른 사람이 작성한 프로그램을 다운받는 것 가능 DIY가 능사는 아니다..
4
모의실험과 구현 알고리즘의 C-언어 구현 현재 사용되고 있는 DSP는 표준 C-코드를 거의 수용함.
Matlab을 이용한 simulation과는 달리 향후 application의 개발을 염두하는 경우 최근의 embedded processor는 거의 모두 C-code를 지원함. 즉, simulation과 동시에 개발이 이루어짐 단, HW-oriented programming (e.g. VHDL) 에서는 별도의 개발과정이 이루어짐 현재 사용되고 있는 DSP는 표준 C-코드를 거의 수용함.
5
검증된 코드의 필요성 수많은 사용자 포럼 Google에 접속, “MPEG source code” 검색어 입력
2,360,000개의 관련 site 수 많은 source code가 범람 Commercial/non-commercial 이 중 안정적이고 오류가 없는 코드는? 오류가 많고 안정적이지 않은 코드는 오히려 개발 기간을 늘림.
6
Numerical Recipes in C 수치연산과 관련된 함수의 C-언어 코드 행렬연산 벡터연산 신호처리관련 연산 FFT
DFT FIR filter IIR filter 기타.
7
행렬/벡터 연산 관련 함수들 #include <stdio.h> #include <math.h>
#include <stdlib.h> #define MTX_ERROR -1 #define MTX_OK 0 void Mat_Read(double **out_mat, int col, int row, FILE *fp); void Mat_Write(double **in_mat, int col, int row, FILE *fp); void Transpose_Matrix(double **mtrx_s, double **mtrx_d, int col, int row); void Cal_Matrix_nby1(double **coef, double *in, double *out, int n); int Cal_Matrix_nbyn(double **in1, double **in2, double **out,int c1, int r1, int c2, int r2); void Input_Matrix(double **mtrx, int col, int row); void View_Matrix(double **mtrx, int col, int row); void Copy_Matrix(double **mtrx_s, double **mtrx_d, int col, int row); void View_dMatrix(double **mtrx, int col, int row); void Copy_dMatrix(double **mtrx_s, double **mtrx_d, int col, int row); double *vector(int n); double **matrix(int m, int n); double *d_vector(int n); double **d_matrix(int m, int n); void free_vector(double *v); void free_matrix(double **v, int m); void Mat_Mpy(double **x, double **y, double **z, int n); void Mat_Add(double **x, double **y, double **z, int n); void Mat_Sub(double **x, double **y, double **z, int n); void GInv_Mat(double **u, int n); void Inv_Mat(double **u, int n); void ludcmp(double **a, int n, int *indx, double *d); void lubksb(double **a, int n, int *indx, double b[]); void svdcmp(double **a, int m, int n, double *w, double **v);
8
DFT/FFT 관련함수들 /* dft.h - function prototypes and structures for dft and fft functions */ /* COMPLEX STRUCTURE */ typedef struct { float real, imag; } COMPLEX; /* function prototypes for dft and inverse dft functions */ extern void fft(COMPLEX *,int); extern void ifft(COMPLEX *,int); extern void dft(COMPLEX *,COMPLEX *,int); extern void idft(COMPLEX *,COMPLEX *,int); extern void rfft(float *,COMPLEX *,int); extern void ham(COMPLEX *,int); extern void han(COMPLEX *,int); extern void triang(COMPLEX *,int); extern void black(COMPLEX *,int); extern void harris(COMPLEX *,int); extern int log2(unsigned int);
9
Library의 생성 C-코드에서 컴파일/building을 수행하면 실행파일 (.exe)가 생성
실행 파일을 다른 project에 추가하여 사용할 수 없음 다른 project에 추가 가능한 파일들 소스파일 (*.c) 정적라이브러리 (*.lib) 동적라이브러리 (*.dll) 오브젝트코드 (*.obj)
10
C-코드를 직접 프로젝트에 추가 Add to project 메뉴에서 추가할 c-코드를 직접 선택
11
외부에서 라이브러리를 생성 C-코드를 직접 프로젝트에 넣기 위해서는 소스 코드가 필요
일반적으로 보안의 이유로 소스코드가 공개되는 경우는 드묾. 프로그램 개발자 입장에서도 소스코드의 공개를 꺼릴 수 있음 따라서, 미리 컴파일된 object code 형식의 라이브러리를 제공하고 이를 사용하는 것이 일반적.
12
라이브러리의 생성1 라이브러리 이름
13
라이브러리 생성2 미리 준비된 C-코드가 있을 때는 비워둠
14
라이브러리 생성3 Pre-complied header가 없으므로 아무 파일도 들어가 있지 않음.
15
Add to project 메뉴에서 라이브러리를 생성할 c-코드를 선택
16
라이브러리의 생성 오류가 없다면 .\debug 또는 ,\release 디렉토리에 해당 라이브러리 파일이 생성됨
17
생성된 라이브러리를 호출하는 법 Add to project 메뉴에서 링크시킬 라이브러리 파일을 선택
18
예제 코드 분석 복소수형식의 변수 type FFT_SIZE 만큼 복소변수 할당
실수(real) 부분에 읽어들인 값을 넣고 허수(imag) 부분엔 0을 넣음 FFT수행 (2번째 인수 주의)
19
Homework 이 들 함수들을 이용하여 다음 프로그램 작성 DFT.c에 포함된 각종 함수 중 DFT-IDFT loopback
fft(COMPLEX *,int); ifft(COMPLEX *,int); dft(COMPLEX *,COMPLEX *,int); idft(COMPLEX *,COMPLEX *,int); 이 들 함수의 사용 법을 숙지 예제 프로그램 참고 이 들 함수들을 이용하여 다음 프로그램 작성 DFT-IDFT loopback 어떤 임의의 data sequence를 DFT하고 아무 처리도 하지 않은 채 IDFT 수행, data sequence가 동일하게 얻어지는 가를 check FFT-IFFT loopback DFT를 FFT로 바꾸어서 수행 DFT/FFT간의 소요 시간 비교
Similar presentations