이 작업의 논리를 해결하려고 노력했으며 빠른 푸리에 변환을 수행하기 위해 KissFFT 소스 패키지를 사용할 계획입니다. 이것이 올바르게 보이는 경우 알려주십시오.
- FFT 구조를 할당하십시오. 사용중인 창 크기는
kiss_fft_alloc(N,0,NULL,NULL)
어디에 있습니까N
? 입력 버퍼는N
유형 의 요소 배열입니다kiss_fft_scalar
. 출력 버퍼는N/2 + 1
유형 의 요소 배열입니다kiss_fft_cpx
. N
PCM 샘플의 디코드 (창 크기) 수.- 각 PCM 샘플에 대해 각 채널의 진폭 (부호없는 샘플)의 평균을 구하고 0에서 2까지 스케일 (65536.0으로 나눔)하여 결과를 입력 버퍼에 저장합니다.
- 입력 버퍼에서 윈도 잉 (즉, Hanning)을 수행합니다.
- 입력 버퍼에서 빠른 푸리에 변환을 수행하여 출력 버퍼에 저장합니다. 실제 값을 입력으로 사용하고 있기 때문에 사용할 수 있습니다
kiss_fftr()
. - 들어
N/2
출력값은 변환 된 데이터의 제곱 크기를 구하여 다음 식와 dB 스케일 값으로 변환 :10 * log10 (re * re + im * im)
N/2
6 단계 의 값을 플로팅합니다 .- 입력 버퍼의 전반부를 버리고 다음 (윈도우 크기 / 2) PCM 샘플을 디코딩하고 데이터에 대한 스케일링 및 윈도 잉을 수행합니다. 이렇게하면 입력 창을 효과적으로 밀고 처리 된 PCM 샘플에서 수학을 다시 실행할 필요가 없습니다.
- 모든 샘플이 처리 될 때까지이 단계를 반복하여 5 단계로 반복합니다.
- 에서 사용한 메모리를 비 웁니다
kiss_fft_alloc()
.
FFT를 수행하기 전에 입력 창에서 값을 빼서 결과 DC 값의 크기가 0이되도록 제안했습니다. 입력 데이터에서 평균 또는 평균을 빼야합니까?
또한 창 크기를 선택할 때 고려해야 할 사항은 무엇입니까? KissFFT의 지침에 따라 짝수 여야하는 것 외에도 작은 창 크기를 사용하면 이점이 있습니다. 더 나은 그래프를 제공할까요? 큰 창 크기는 수행해야하는 FFT 수를 줄인다고 가정합니다. 큰 창 크기를 사용하는 유일한 이점은 무엇입니까?
마지막으로, 데이터를 그릴 준비가 된 시점에 도달하면 데이터를 플로팅하는 방법은 무엇입니까? 과거에 일부 파형 그래프 로직을 작업 할 때 축 (최소 진폭, 최대 진폭, RMS 진폭)을 따라 각 픽셀에 대해 3 개의 값을 플로팅 했지만 무엇을해야할지 모르겠습니다. 스펙트로 그램 데이터.
제공 할 수있는 모든 지침에 대해 미리 감사드립니다.