FFT 파워스펙트럼에 대한 이야기

전 직장 다닐때 그렇게 해결이 안되서 삽질하다가 결국 포기했던 FFT 그래프 그리는 문제가 드디어 풀렸음
갑님은 Labview로 작성된 FPGA 기기에서 뽑힌 데이터를 C랑 java로 핸폰 앱이랑 pc용 앱을 만드는 일이였는데
당시 PCM에 대한 지식도 없고 주파수 스펙트럼 이런거에 대한 지식이 전혀 없는 상태에서 시작함.

1년인가 2년정도 했던 플젝이고 첨부터 끝까지 다 만든 앱이라 그런지 나름 애착(?)이 갔던 플젝이었는데
거기서 끝끝내 해결하지 못한 문제가 하나 있었음.

갑님은 FFT 그래프라 불렀고 갑님측에서 제작된 SW에선 Power Spectrum이라고만 써 있었음.
그걸 토대로 java나 c용 소스를 구했는데 희안하게도 인터넷에 돌아다니는 유명한 소스를 쓰면 절대 저 그래프가 안나왔옴 당시엔 이것저것 해보다가 결국 못해서 갑님 장비에서 아예 fft그래프 데이터를 받아서 작도만 해주는 걸로 마무릴 지었는데

그게 문득 생각나서 인터넷 검색하다가  http://som-itsolutions.blogspot.kr/2012/01/fft-based-simple-spectrum-analyzer.html 이 사이트를 발견하고 소스를 받아서 돌려봄.
그리고 마침 JNI 이런저런 삽질 해보고 있는 상황이라 여기서 연산 부하가 많이 걸리는 부분을 JNI로 옮겨보기로 했음.

FFT연산에 대해 정말 이것저것 많이 찾아 봤음 그중 http://ghebook.blogspot.kr/2012/08/fourier-transform.html 사이트를 보면

[경고] 아래 글을 읽지 않고 “푸리에 변환”을 보면 바보로 느껴질 수 있습니다. 라고 써 있던데
솔직히 아랫글도 봤는데 아랫글 자체에서도 바보로 느껴지고 그걸 다 읽고 푸리에 변환을 읽어도 뭔소리인지 하나도 모르겠음 -_-;

결국 FFT는 잘 퍼다가 쓰고 애플리케이션 껍데기 틀만 새로 만들었는데
갑님이 원한 그래프는 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말
안나오는거다.

플젝할때도 그렇고 최근에 삽질한것만 해도 그렇고 인터넷에서 파워스펙트럼이라고 나온 소스는 다 퍼다가 테스트 해본거 같은데 저게 안나오는거다

그렇게 이건 정말 포기해야 하는건가 하고 있었는데
어떤분이 대학강의인지 pdf랑 파워포인트 자료 그리고 스샷 올려놓은게 있어서 봤는데 거기 버튼중에 이런게 있었음.

파워스펙트럼, 파워스펙트럼디비

파워 스펙트럼이랑 파워스펙트럼db가 다른건가?
혹시나 해서 pcm raw값을 데시벨로 바꾸는 공식 찾아서 넣어봄.
http://stackoverflow.com/questions/2917762/android-pcm-bytes

그랬더니 드디어 나옴..
아하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하하

근데 뭔가 잘못한건지.. 다른 앱은 -20dB뭐 이렇게 나오는데 난 -200으로 나오네
저 대학강의 같은거 읽어보면 마이크 스펙에 따라 뭘 곱하냐 나누냐 하는거 같은데
PCM이나 사운드에 대한 기본 이론 부족으로 정확히는 모르겠음.

뭔가 이론을 더 파야 제대로 정확한 수치값이 나올거 같은데 슬슬 귀찮아지네 그만할까나

크리에이티브 커먼즈 라이선스 Linsoo 의 저작물인 이 저작물은(는) 크리에이티브 커먼즈 저작자표시-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.

댓글 2개

  1. 단지 스펙트럼에서 주파수 측면에서 저 값들(그래프)을 얻길 원하셨다면,
    저 값은 복소수의 abs 값 입니다.
    아마 FFT 변환을 하셨다면, Real number 와 Imaginary number 가 나오셨을 겁니다.
    Re 넘버제곱과 Im넘버제곱을 더해줘서 루트를 취하는 형식의 값입니다.
    취해주셨던 db 같은경우는 abs 값에서 20*log(abs값) 을 취하는 형태 이셨을 거구요.
    아마.. 지나간 프로젝트이긴 하실테지만, 제 생각엔 그렇게 보이네요.

댓글 달기

이메일 주소는 공개되지 않습니다.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.