스펙트로 그램 생성


10

이 작업의 논리를 해결하려고 노력했으며 빠른 푸리에 변환을 수행하기 위해 KissFFT 소스 패키지를 사용할 계획입니다. 이것이 올바르게 보이는 경우 알려주십시오.

  1. FFT 구조를 할당하십시오. 사용중인 창 크기는 kiss_fft_alloc(N,0,NULL,NULL) 어디에 있습니까 N? 입력 버퍼는 N유형 의 요소 배열입니다 kiss_fft_scalar. 출력 버퍼는 N/2 + 1유형 의 요소 배열입니다 kiss_fft_cpx.
  2. NPCM 샘플의 디코드 (창 크기) 수.
  3. 각 PCM 샘플에 대해 각 채널의 진폭 (부호없는 샘플)의 평균을 구하고 0에서 2까지 스케일 (65536.0으로 나눔)하여 결과를 입력 버퍼에 저장합니다.
  4. 입력 버퍼에서 윈도 잉 (즉, Hanning)을 수행합니다.
  5. 입력 버퍼에서 빠른 푸리에 변환을 수행하여 출력 버퍼에 저장합니다. 실제 값을 입력으로 사용하고 있기 때문에 사용할 수 있습니다 kiss_fftr().
  6. 들어 N/2출력값은 변환 된 데이터의 제곱 크기를 구하여 다음 식와 dB 스케일 값으로 변환 : 10 * log10 (re * re + im * im)
  7. N/26 단계 의 값을 플로팅합니다 .
  8. 입력 버퍼의 전반부를 버리고 다음 (윈도우 크기 / 2) PCM 샘플을 디코딩하고 데이터에 대한 스케일링 및 윈도 잉을 수행합니다. 이렇게하면 입력 창을 효과적으로 밀고 처리 된 PCM 샘플에서 수학을 다시 실행할 필요가 없습니다.
  9. 모든 샘플이 처리 될 때까지이 단계를 반복하여 5 단계로 반복합니다.
  10. 에서 사용한 메모리를 비 웁니다 kiss_fft_alloc().

FFT를 수행하기 전에 입력 창에서 값을 빼서 결과 DC 값의 크기가 0이되도록 제안했습니다. 입력 데이터에서 평균 또는 평균을 빼야합니까?

또한 창 크기를 선택할 때 고려해야 할 사항은 무엇입니까? KissFFT의 지침에 따라 짝수 여야하는 것 외에도 작은 창 크기를 사용하면 이점이 있습니다. 더 나은 그래프를 제공할까요? 큰 창 크기는 수행해야하는 FFT 수를 줄인다고 가정합니다. 큰 창 크기를 사용하는 유일한 이점은 무엇입니까?

마지막으로, 데이터를 그릴 준비가 된 시점에 도달하면 데이터를 플로팅하는 방법은 무엇입니까? 과거에 일부 파형 그래프 로직을 작업 할 때 축 (최소 진폭, 최대 진폭, RMS 진폭)을 따라 각 픽셀에 대해 3 개의 값을 플로팅 했지만 무엇을해야할지 모르겠습니다. 스펙트로 그램 데이터.엑스

제공 할 수있는 모든 지침에 대해 미리 감사드립니다.

답변:


8

나에게 꽤 좋아 보인다. 그러나 3 단계에서 실제로 신호를 -1에서 1로 스케일링하려고합니다. 그렇지 않으면 DC를 추가합니다. 평균을 빼는 것에 대해 언급했습니다. 스펙트로 그램에 대해이 작업을 수행하는 것은 권장하지 않습니다 .DC가 효과적으로 필터링되므로 스펙트로 그램이 있으면 DC가 표시되어야합니다.

창 크기를 선택하는 것은 트레이드 오프에 관한 것입니다. 창이 클수록 주파수 해상도는 더 선명 해지지 만 시간 해상도는 더 흐려집니다. 창이 짧을수록 반대의 결과를 얻을 수 있습니다. 더 선명한 시간 해상도이지만 더 흐릿한 주파수 해상도입니다. 창 크기의 적절한 선택은 분석하려는 데이터에 따라 다릅니다. 일반적으로 FFT는 2의 거듭 제곱을 선호하기 때문에 2의 거듭 제곱이됩니다. 알맞은 경험 법칙은 가장 낮은 주파수의주기가 정확하게 측정 할 수있는 기간의 2 배 이상이어야한다는 것입니다. 결의.

이 트레이드 오프를 더 잘 처리 할 수 ​​있는지 궁금해 할 수도 있고, 이에 대한 기술이 있습니다. 일반적으로 한 번에 여러 다른 FFT 크기를 가진 스펙트로 그램을 계산하고 결합합니다. 이 웹 페이지에는 다음과 같은 시각적 정보가 있습니다. http://www.izotope.com/tech/aes_adapt/

창 크기가 너무 작은 경우 두 개의 매우 가까운 주파수는 모두 같은 FFT 빈에있게되므로 서로 구별 할 수 없을 수 있습니다. 창 크기가 너무 크면 두 번의 종료 이벤트가 결합되거나 급격한 과도 현상이 점진적인 공격으로 바뀔 수 있습니다. 이것을 시각화하는 몇 가지 방법을 게시 한 웹 페이지를 확인하십시오.

더 큰 창 크기가 반드시 FFT 수를 줄일 필요는 없습니다. FFT 크기의 절반이 겹치는 단기 푸리에 변환을 사용하여 스펙트로 그램을 계산하도록 선택했습니다. 원하는 경우 더 높은 중첩 계수를 사용할 수 있습니다. 창 크기를 선택하는 것은 계산해야하는 FFT 수보다 시간 / 주파수 균형을 맞추는 데 훨씬 더 중요합니다. 스펙트로 그램 (또는 모든 STFT)을 설계 할 때 창 크기와 블록 사이의 거리 인 홉 크기 를 독립 매개 변수로 선택하는 것을 생각할 수 있습니다 .

플롯 할 때 시간은 일반적으로 x 축에 있고 주파수는 y 축에 있으며 (보통 선형 스케일이 아닌 로그 스케일, 멜 스케일 등) 크기는 색상 강도로 표시됩니다. 매우 어두운 색은 작은 크기에 해당하고 매우 밝은 색은 큰 크기에 해당합니다.


연결이 끊어진 것 같습니다. 업데이트 할 수 있습니까?
Daniel Wolf
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.