FFT의 구현 17th of October, November.

Slides:



Advertisements
Similar presentations
프로그램이란 프로그램 생성 과정 프로젝트 생성 프로그램 실행 컴퓨터를 사용하는 이유는 무엇인가 ? – 주어진 문제를 쉽고, 빠르게 해결하기 위해서 사용한다. 컴퓨터를 사용한다는 것은 ? – 컴퓨터에 설치 혹은 저장된 프로그램을 사용하는 것이다. 문제를 해결하기 위한.
Advertisements

Format String Attack! 포맷 스트링 공격 경일대학교 사이버보안학과 학년 남주호.
목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
Term Project iTUTOR를 이용한 PIC 동작 검증 보고서와 모든 소스코드 압축하여 제출
ㅎㅎ C++ 프로그래밍의 첫 걸음 C++로 프로그래밍한다는 것의 의미 세상에서 가장 간단한 C++ 프로그램
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
컴퓨터프로그래밍 1주차실습자료 Visual Studio 2005 사용법 익히기.
Image & Video processing
Database Laboratory, Hong Ik University
Power Java 제3장 이클립스 사용하기.
Power Java 제3장 이클립스 사용하기.
Introduction To Computers
1장. 이것이 C 언어다.. 1장. 이것이 C 언어다. 프로그래밍 언어 1-1 C 언어의 개론적 이야기 한글, 엑셀, 게임 등의 프로그램을 만들 때 사용하는 언어 ‘컴퓨터 프로그래머’라는 사람들이 제작 C 언어(C++ 포함)를 가장 많이 사용함.
컴퓨터 프로그래밍 기초 [Final] 기말고사
C 언어 1 1주차 C언어 시작하기 - 1차시 C 언어 특징 및 프로젝트 생성 Programming Language.
나민영 서경대학교 컴퓨터공학과 CGVR Lab 같이만들어보자 5주차 OpenCV 설정 및 기초.
QT 프로그래밍 발표: 김래영.
제15장 파일 입출력 문자열을 출력하는 여러가지 방법 (15-2쪽) 문자열만 처리하는 입출력 함수
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
Java 기초 (Java JDK 설치 및 환경설정)
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
Lex와 Yacc을 이용한 Calculator 구현
25강. Security-I 보안 관련 프로젝트 생성 보안 관련 라이브러리 추가 보안 관련 설정 파일 만들기
Root Filesystem Porting
C / C++ Programming in multi platform
Visual Basic .NET 처음 사용하기.
1. C++ 시작하기.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
Root Filesystem Porting
WinCE Device Driver 실습 #3
WinCE Device Driver 실습 #2
ARM Development Suite v1.2
Cross Compiler 설치.
14장. 포인터와 함수에 대한 이해.
10강. JSP 본격적으로 살펴보기-II 스크립트릿, 선언, 표현식 지시자 주석 Lecturer Kim Myoung-Ho
Method & library.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
27장. 모듈화 프로그래밍.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
영상처리 실습 인공지능연구실.
제 1장. C++ 시작하기.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
자바 5.0 프로그래밍.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
컴퓨터 프로그래밍 기초 [01] Visual Studio 설치 및 사용방법
빌드 성공.
Fucntion 요약.
( Windows Service Application Debugging )
함수(Function) ◈ 함수의 개념 및 사용 이유 ◈ 함수 정의, 호출 및 선언 ◈ 지역변수와 전역변수 ◈ return 문
학습목표 처음 만드는 비주얼 베이직 프로그램 프로그램 실행과 실행 파일 생성. 학습목표 처음 만드는 비주얼 베이직 프로그램 프로그램 실행과 실행 파일 생성.
OpenCV 설정 2.21 만든이 딩딩.
DK-128 개발환경 설정 아이티즌 기술연구소
STS 또는 Eclipse 에서 프로젝트를 Export 하고 Import 하는 방법
05. General Linear List – Homework
기초C언어 제2주 실습 프로그래밍의 개념, 프로그램 작성 과정 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원
구조체(struct)와 공용체(union)
Numerical Analysis Programming using NRs
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
1장 C 언어의 개요 C 언어의 역사와 기원 C 언어의 특징 프로그램 과정 C 프로그램 구조 C 프로그램 예제.
1. 지역변수와 전역변수 2. auto, register 3. static,extern 4. 도움말 사용법
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
숙제 작성 및 제출 과정 김진하 2008/03/14.
Homework #7 (1/3) 1. 다음 순서에 따라 수행하고, 그 과정의 화면을 캡쳐한다.
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
CODE INJECTION 시스템B 김한슬.
Docker Study 6~7.
7 생성자 함수.
Presentation transcript:

FFT의 구현 17th of October, November

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

DIY의 한계 제품 개발 기간 개발->평가->디버깅->평가-> ->… 기획->개발->평가->디버깅->개발->완성? 이 중 가장 많은 시간이 소요되는 부분은? 개발->평가->디버깅->평가-> ->… Programmer의 역할 과거에는 매우 대접받은 직업 현재에는 3D-업종? 인터넷의 발달에 따른 사용자 포럼의 활성화 다른 사람이 작성한 프로그램을 다운받는 것 가능 DIY가 능사는 아니다..

모의실험과 구현 알고리즘의 C-언어 구현 현재 사용되고 있는 DSP는 표준 C-코드를 거의 수용함. Matlab을 이용한 simulation과는 달리 향후 application의 개발을 염두하는 경우 최근의 embedded processor는 거의 모두 C-code를 지원함. 즉, simulation과 동시에 개발이 이루어짐 단, HW-oriented programming (e.g. VHDL) 에서는 별도의 개발과정이 이루어짐 현재 사용되고 있는 DSP는 표준 C-코드를 거의 수용함.

검증된 코드의 필요성 수많은 사용자 포럼 Google에 접속, “MPEG source code” 검색어 입력 2,360,000개의 관련 site 수 많은 source code가 범람 Commercial/non-commercial 이 중 안정적이고 오류가 없는 코드는? 오류가 많고 안정적이지 않은 코드는 오히려 개발 기간을 늘림.

Numerical Recipes in C 수치연산과 관련된 함수의 C-언어 코드 행렬연산 벡터연산 신호처리관련 연산 FFT DFT FIR filter IIR filter 기타.

행렬/벡터 연산 관련 함수들 #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);

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);

Library의 생성 C-코드에서 컴파일/building을 수행하면 실행파일 (.exe)가 생성 실행 파일을 다른 project에 추가하여 사용할 수 없음 다른 project에 추가 가능한 파일들 소스파일 (*.c) 정적라이브러리 (*.lib) 동적라이브러리 (*.dll) 오브젝트코드 (*.obj)

C-코드를 직접 프로젝트에 추가 Add to project 메뉴에서 추가할 c-코드를 직접 선택

외부에서 라이브러리를 생성 C-코드를 직접 프로젝트에 넣기 위해서는 소스 코드가 필요 일반적으로 보안의 이유로 소스코드가 공개되는 경우는 드묾. 프로그램 개발자 입장에서도 소스코드의 공개를 꺼릴 수 있음 따라서, 미리 컴파일된 object code 형식의 라이브러리를 제공하고 이를 사용하는 것이 일반적.

라이브러리의 생성1 라이브러리 이름

라이브러리 생성2 미리 준비된 C-코드가 있을 때는 비워둠

라이브러리 생성3 Pre-complied header가 없으므로 아무 파일도 들어가 있지 않음.

Add to project 메뉴에서 라이브러리를 생성할 c-코드를 선택

라이브러리의 생성 오류가 없다면 .\debug 또는 ,\release 디렉토리에 해당 라이브러리 파일이 생성됨

생성된 라이브러리를 호출하는 법 Add to project 메뉴에서 링크시킬 라이브러리 파일을 선택

예제 코드 분석 복소수형식의 변수 type FFT_SIZE 만큼 복소변수 할당 실수(real) 부분에 읽어들인 값을 넣고 허수(imag) 부분엔 0을 넣음 FFT수행 (2번째 인수 주의)

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간의 소요 시간 비교