DFT / FFT 계산의 출력을 이해하는 데 도움이 필요합니다.
저는 숙련 된 소프트웨어 엔지니어이며 주요 주파수 찾기와 같은 일부 스마트 폰 가속도계 판독 값을 해석해야합니다. 불행히도, 저는 15 년 전에 대부분의 대학 EE 수업을 잤지 만 지난 며칠 동안 DFT와 FFT를 읽고있었습니다.
"EE 수업을 들어라"라는 응답은 없습니다. 고용주가 저에게 돈을 지불하면 실제로 그렇게 할 계획입니다. :)
그래서 여기 내 문제가 있습니다.
32Hz에서 신호를 캡처했습니다. 다음은 Excel에서 차트로 작성한 32 점의 1 초 샘플입니다.
그런 다음 Columbia University에서 Java로 작성된 일부 FFT 코드 를 얻었습니다 ( " Reliable and fast FFT in Java " 에 대한 게시물의 제안 사항을 따름 ).
이 프로그램의 출력은 다음과 같습니다. 나는 그것이 내부 FFT를 실행하고 있다고 믿기 때문에 입력과 출력 모두에 동일한 버퍼를 재사용합니다.
Before:
Re: [0.887 1.645 2.005 1.069 1.069 0.69 1.046 1.847 0.808 0.617 0.792 1.384 1.782 0.925 0.751 0.858 0.915 1.006 0.985 0.97 1.075 1.183 1.408 1.575 1.556 1.282 1.06 1.061 1.283 1.701 1.101 0.702 ]
Im: [0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ]
After:
Re: [37.054 1.774 -1.075 1.451 -0.653 -0.253 -1.686 -3.602 0.226 0.374 -0.194 -0.312 -1.432 0.429 0.709 -0.085 0.0090 -0.085 0.709 0.429 -1.432 -0.312 -0.194 0.374 0.226 -3.602 -1.686 -0.253 -0.653 1.451 -1.075 1.774 ]
Im: [0.0 1.474 -0.238 -2.026 -0.22 -0.24 -5.009 -1.398 0.416 -1.251 -0.708 -0.713 0.851 1.882 0.379 0.021 0.0 -0.021 -0.379 -1.882 -0.851 0.713 0.708 1.251 -0.416 1.398 5.009 0.24 0.22 2.026 0.238 -1.474 ]
따라서이 시점에서는 출력의 앞면이나 뒷면을 만들 수 없습니다. 나는 실수 부분이 성분 코사인 파의 진폭이고 허수 부분이 성분 사인파의 진폭 인 DFT 개념을 이해합니다. 또한 " 디지털 신호 처리에 대한 과학자 및 엔지니어 가이드 "에서이 다이어그램을 따를 수도 있습니다 .
그래서 내 구체적인 질문은 다음과 같습니다.
FFT의 출력에서 "가장 많이 발생하는 주파수"를 어떻게 찾을 수 있습니까? 이것은 내 가속도계 데이터 분석의 일부입니다. 실수 (코사인) 또는 가상 (사인) 배열을 읽어야합니까?
시간 영역에 32 점 입력이 있습니다. FFT의 출력은 실수의 경우 16 개 요소 배열이고 가상의 경우 16 개 요소 배열이어야하지 않습니까? 프로그램이 크기 32의 실제 및 가상 배열 출력을 제공하는 이유는 무엇입니까?
이전 질문과 관련하여 출력 배열의 인덱스를 어떻게 구문 분석합니까? 32Hz로 샘플링 된 32 개 샘플의 입력을 감안할 때, 16 요소 배열 출력은 샘플링 속도 (32Hz)의 1/2까지 인덱스가 균일하게 분산되어야한다는 것을 이해하고 있으므로 각 요소를 이해하는 것이 맞습니까? 배열의 (32Hz * 1/2) / 16 = 1Hz?
FFT 출력에 음수 값이있는 이유는 무엇입니까? 값이 정현파의 진폭을 나타내는 것으로 생각했습니다. 예를 들어, Real [3] = -1.075의 출력은 주파수 3의 코사인 파에 대해 -1.075의 진폭을 의미해야합니다. 맞습니까? 진폭이 어떻게 음수 일 수 있습니까?