크리에이티브 커먼즈 라이선스
Creative Commons License

이틀에 걸쳐서 완성했습니다.

C# 이란 프로그램이 객체 지향으로 굉장히 쉽고도 강력한 기능을 제시해 준다고 하여 공부를 시작했었지요 ㅋ

사실 Labview 라는 강력한 프로그램이 있고, 신호처리 부분에서도 Matlab 이라는 강력한 프로그램이 있기에 크게 도움이 되지는 않을거라고 생각했었지만 윈도우 프로그래밍도 하나정도 할줄 알면 큰 도움이 될것이라는 생각에서 시작했었습니다.

어느정도 되었다고 생각하고 자체 프로젝트를 진행하기로 마음먹고
무엇을 할까? 하다가 Radix-4 FFT 를 구현해서 그래프로 표현해 주는 프로그램을 만들기로 하였습니다.

위에서 언급한 프로그램들이 있다면 내장함수를 이용해서 간단하게 실험해 볼수 있지만, 사용하지 않으시는 다른 분야의 연구자들은 간단한 주파수 분석을 하여 주파수 분포가 어느쪽에 대략적으로 위치하는지 확인해 보고 싶으신 경우가 있을것이라고 생각했습니다 ㅋ

사실 저도 머 학부때 위의 프로그램들을 잘 사용하던 것은 아니였으니까요 ㅋㅋㅋ

그리고 가장 큰 생각은!! ㅋㅋ

혹시나 Radix 4 FFT 구현해 오라고 숙제 내주시는 교수님들 때문에 네이버 검색하다가 이 홈페이지에 들어오게 되지 않을까 하는 나의 바램? ㅋㅋ
(굉장히 조회수에 신경쓰는 멘트네 ㅋㅋㅋ)


ㅋㅋ

여튼 일단 사진 부터 ㅋㅋ



대충 요로코롬 생겼답니다 ㅋㅋ

사실 제가 처음이 C++ 로 이것을 구현했을 때는 FFT 포인트수가 높아질 때 발생하는 Stack Overflow 를 막기 위해서 메모리를 할당하고 사용하였어요 ㅋㅋ

무적의 함수 malloc ! ㅋㅋ

근데 C# 에서 가비지 컬렉션 개념이 도입되면서 new 라는 명령어로 배열에 heap 메모리를 할당해 주어야 한답니다 ㅋ

사실 배열로 해도되고 List 로 해도되고 ㅋ

뭐 여타 컬렉션을 아무거나 사용해도 문제는 없지요 ㅋ

근데 여기서는 배열로 한번 해보았어요 ㅋ 배열을 사용하는 방법이 기존의 C 에서 선언하고 사용하던것과 는 달라서 연습좀 해볼려고 ㅋㅋ

또 문제는 typedef 가 안된다는것 ㅋㅋ

struct 로 선언해놓고 typedef 처럼 사용할수 있어용 ㅋㅋ 자세한거는 나중에 C# 강의에서 설명해드릴게요 ㅋ

간단하게 말씀드리자면 #define 문을 C# 에서 사용하고 싶으면 Constants 와 같은 클래스를 하나 생성해 놓고
Constants.(  ) 라는 식으로 #define 문을 대신 할 수 있습니다.

Decimation In TIme 방식으로 구현했는데요 저는 재귀함수 콜 형태로 구현했어요 ㅋ

아래에 올려드리는 것은 Radix4 FFT 의 핵심이라할수 있는 부분이지요 ㅋ

Twiddle Factor 를 구해서 값들을 구해가는 알고리즘 ㅋ
자세한것은 이것또한 나중에 DSP 부분 포스팅에서 알려드릴게요 ㅋ



아나 하나도 안보이네 제길 ㅋㅋㅋ

아래는 제가 배포하는 설치 화면 ㅋㅋ



요래요래 설치를 하면 요론 아이콘이 나오지요 ㅋㅋ


ㅋㅋㅋ 아이콘 예뿌네 ㅋㅋㅋ

아래는 설치파일 ㅋㅋ

필요하거나 궁금하신 분을 한번 설치해서 써보세요 ㅋㅋ


test 파일은 제가 코사인 함수파형 저장해 놓은것 ㅋㅋ


아 쓰다보니까 생각이 나네 ㅋㅋ

FFT 포인트 수 바꾸면 안될수도 있을듯 ㅋㅋ 이거 한다면서 하다 말았군 ㅋㅋㅋ
하지만 1024 포인트는 무조건 동작함 ㅋㅋ

나중에 필요한 사람들이 있다고 하면 시간날때 한번 업데이트 버젼을 배포해야겠군 ㅋㅋ
특징점들 잡아서 해당 주파수와 크기를 정확히 알려주는 기능도 좀 추가를 해야겠고 ㅋㅋㅋ

하지만 이것은 연습용이였으니까 ㅋㅋㅋ
정 필요하신 분들이 있다면 댓글로 요청하세용 ㅋ

프로젝트 파일이 필요하신 분들이 있으면 댓글로 멜주소 써서 요청하세요 ㅋ 보내드리겠습니다 ㅋ
걍 C++ 로 해놓은 것도 있으니 그것이 필요하시면 고걸로 드리고 ㅋ
사실 이 코드가 더 잘짠것 같은 느낌인데 ㅋㅋㅋ

여튼 오늘은 여기까지 ㅋㅋ
저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by J.Bear


티스토리 툴바