본문 바로가기

푸리에 변환, 신호

(38)
[목차]푸리에 변환의 모든 것 01. 푸리에 변환이란 https://infograph.tistory.com/220 01. 푸리에 변환이란 통신 이론, 디지털 신호, 음성처리 , 영상처리 등에서 항상 나오는 이론이 푸리에 변환이고, 가장 어려워하는 것이고, 내용을 이해하려고 많은 노력을 기울이면서도 정작 잘 파악이 안 되고, 다 infograph.tistory.com 02. 푸리에 급수 : 주기신호, 삼각 함수(사인, 코사인 그래프) https://infograph.tistory.com/221 02. 푸리에 급수 : 주기신호, 삼각 함수(사인, 코사인 그래프) 푸리에 변환을 바로 설명하기 전에 푸리에 급수부터 파악해볼 것이다. 푸리에 변환은 주기적인 신호이건 아니건, 모든 신호에 대해 적용할 수 있는 변환 방법이다. 반면에 푸리에 급수..
[07-7 Code]FFT source code for C 1. fft.h int fft(long N, double XR[], double XI[]); char * cplxStr(double re, double im); 2. fft.c /* fft.c */ /* 2022.8.7 Created by HJ */ #include #include #define PI 3.14159265358979 int fft(long N, double XR[], double XI[]){ /* 1. check 2^n count -> if else then return -1 */ if ((N !=0) && ((N & (N-1)) != 0) ) return -1; /* 2. calculate W */ long N2 = N >> 1; double WR[N2], WI[N2]; /* Real a..
07-7. C로 짠 FFT Code C나 C++로 된 FFT 코드는 예전부터 많이 있을 것이기에, C용 FFT 코드는 잘 되어 있는 코드를 소개만 하려고 했었다. 그러나, 여러 코드들을 구글링해서 찾아봤으나, 예상외로 맘에 드는 코드를 찾지 못했다. 간단히 짤 수 있을 거 같은데, 복잡하게 짰거나, 너무 길게 짠 코드가 대부분이었다. 그래서, 계획에 없었으나 C로 FFT를 짜기로 한다. 코드 작성 방침 가능한 간단히 짠다. 최상의 속도가 나오도록 한다. 포인터를 사용하지 않는다. 신호데이터를 double형 배열로 처리 기본 제공되는 cos 함수 정도만 사용하고, 특수한 함수를 사용하지 않는다. 입력 데이터의 개수 제한을 하지 않는다. 메모리가 허용하는 한 쿨리-튜키 알고리즘 사용 fft만 구현 (ifft는 구현하지 않음) 2^n 사이즈의 ..
[07-6 Code] FFT program for Java This page introduce FFT sourece code. There are 4 java soure file and 1 text file. - fourier/FFT.java - fourier/Complex.java - fourier/CMath.java - test/Test_FFT.java - data/input.txt 1. fourier/FFT.java package fourier; public class FFT { private static double log2(double a) { return Math.log(a) / Math.log(2); } /** * Check the number is power of 2 or not. * @param N * @return * 0 : it is power..
07-6. Java로 FFT 알고리즘 충실히 구현하기 이번 페이지에서는 FFT 알고리즘을 Java 언어의 특성을 충실히 살리면서, 읽을 수 있는 수준의 알고리즘 구현을 해보고자 한다. Java 언어의 특성을 살린다는 의미는, 복소수의 표현을 Complex라는 객체를 만들어서 사용함으로써 표현의 간단함과 확장성을 늘리고, 에러 처리를 Exception을 사용해서 하고, 메서드 오버로딩을 통해서 fft의 다양한 호출이 가능하게 한다는 의미. 읽을 수 있는 수준의 알고리즘이라는 것은, FFT의 구현을 각 의미있는 부분에 대해 별도의 메서드를 만들어서 구분되게 하고, 가능한 알고리즘에서 표현된 방법으로 코딩을 했다는 의미이다. 그러나, 위와 같이만 하면 속도에 손해를 보기에, 수행 속도에 지대한 영향을 끼치는 부분은 코드 가독성이 좀 떨어지더라도, 효율적인 코드로..
[07-5 Code] Fastest FFT code for Java This page introduce very fast FFT code for Java. It will execute FFT calculation for 64 kBytes input data in 10ms. Execution result of Test_FFFT class ** test_simple_fft ** 8.0, 0, -2.0+4.82842712474619i, 0, 0, 0, -2.0+0.8284271247461898i, 0, 0, 0, -1.9999999999999998-0.8284271247461898i, 0, 0, 0, -1.9999999999999993-4.82842712474619i, 0, ** test_measure_time ** Execution Time(32kB): 5ms [0]17.4..
07-5. 가장 빠른 Java용 FFT 구현해보기 이 페이지는 Java로 구현하는 FFT, 그것도 수행 속도를 빠르게 하는 것에 목적을 둔 프로그래밍 코드를 소개한다. 전체 소스코드는 여기 참조 앞 페이지에서 엑셀로 만드는 FFT의 경우는, 속도는 느리지만 엑셀 자체에서 데이터를 다루거나 분석을 하고, 그래프를 그리고 등 부가적인 기능으로 해서, 필요성이 있어 FFT 프로그램을 만들어서 소개했다. Java로는 만들 생각을 안했었다. FFT가 주로 쓰이는 것이, 연구 목적으로 신호를 분석하거나(그래서 엑셀에서의 FFT가 유용), 실시간으로 신호를 FFT 변환을 해야 하는 것이기에, C나 C++을 이용해서 코드 수행을 빠르게 하는 게 중요하지, Java 같은 Virtual Machine 기반의 언어로는 유용성이 떨어질 것이기 때문이다. 그런데, 안드로이드에..
[07-4 Code] Fastest FFT code for Excel VBA This page explain FFT program made for Excel VBA. It is no limit of input data size, therefore you can calculate over 4096 size data and it will perform very fast. FFT Execution time in the Excel by self-made FFT program Computer Specification: 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz Input data count FFT execution time [ms] 4 kBytes(4096) 62 8 kBytes 115 16 kBytes 235 64 kBytes 984 I thin..
07-4. 엑셀에서 직접 FFT 프로그램 만들기 이 페이지에서는 엑셀 VBA를 이용해서 FFT 프로그래밍을 하는 것을 설명할 것이다. 사실 엑셀에서 FFT 프로그래밍을 직접 한 것은 구글링을 해봐도 별로 없다. 없다는 것은 다 그 이유가 있는데, 가장 큰 이유는 굳이 따로 프로그래밍할 필요가 없다일 것 같다. 속도도 느린 엑셀 VBA를 이용해서 굳이 FFT를 해야 할 일도 없겠고, 또한 엑셀 자체로 FFT 함수가 있으니깐. 그렇지만, 내게는 다음과 같은 작성 이유가 있다. 신호 데이터를 분석하거나 할 때 엑셀만큼 좋은 툴이 없다. 해서, FFT도 엑셀에서 바로 수행하고, 그 결과 데이터를 엑셀에서 분석하면서 인사이트를 얻고 하면 좋겠다. 근데, 엑셀에 있는 FFT 함수는 4096개 데이터가 한계다. 그 이상의 데이터는 처리할 수 없다. 4096으로는 ..
07-3. 엑셀에서 FFT 계산하기 (엑셀 자체 FFT 기능) 엑셀에는 FFT 계산을 할 수 있는 기능이 있다. 디폴트 기능으로 오픈되어 있는 것은 아니고, 사용할 수 있도록 몇 가지 설정을 하면 FFT 계산을 할 수 있다. 엑셀에서 FFT 기능 활성화 하기 1. 엑셀 메뉴에서 "파일 - 옵션" 선택하고, "추가 기능"에서 "관리" 부분에서 'Excel 추가 기능'에 대해 "이동" 클릭 2. "추가 기능"에서 "분석 도구 - VBA"를 체크하고 "확인" 버튼 누른다. 이제 엑셀에서 FFT 함수를 사용할 수 있다. 엑셀에서 FFT 기능 사용해서 값 구하기 $y(n)={0,0,0,0,1,1,1,1}$에 대해 FFT를 수행해서 푸리에 변환값 $Y(k)$를 구해보자. 1. $y(n)$값을 아래와 같이 엑셀에 입력한다. 2. 엑셀 메뉴에서 "데이터" 선태하고, 우측 상단에 ..