FFT가 작동하는 방식을 이해하기 위해 구현하려고합니다. 임의의 사운드 파일을 사용하고 있습니다. 44,1Khz의 샘플링 주파수로 신호 크기를 제어 할 수 없습니다.이 라이브러리를 사용하고 있습니다.

https://www.nayuki.io/res/free-small-fft-in-multiple-languages/Fft.java

목표는이 공식을 다음에 적용하는 것입니다. 빈도 확인 : F = n * Fs / N

n 빈 수. Fs 샘플링 빈도 및 N FFT의 크기

1) Fft는 길이가 있어야하며, 대부분은 기수 2의 거듭 제곱을 사용합니다. 하지만 전체 데이터 배열에 적용하면 FFT의 길이를 어떻게 알 수 있습니까? 그 배열의 크기입니까?

2) Bin을 이해하지 못합니다. 어떻게 처리됩니까? FFT가 데이터 청크와 함께 작동한다는 것을 알고 있지만 전체 데이터 배열을 제공하면 Bin이 어떻게 “생성”됩니까?

댓글

  • 인터넷 검색과 읽기를 통해 이러한 질문에 대한 답을 얻을 수 있습니다. 또한 수학적으로 구성된 코드로 코딩을 시작하는 것이 좋습니다. 상당히 짧은 시간의 신호를 전송하고 FFT 소프트웨어를 적용하고 결과를 검토합니다.
  • 실제로 검색을 많이했지만 ' 이해할 수는 없었지만 아마도 ' 너무 느립니다. 걱정 해 주셔서 감사합니다.
  • " 이산 푸리에 변환 " 또는 " DFT 작동 방식 " 대신 " FFT는 어떻게 작동합니까 ". 고속 푸리에 변환은 이산 푸리에 변환의 계산 단축키입니다. 형태. 후자의 검색을 사용하면 기본 프로세스보다 계산 효율성에 대한 정보를 찾을 가능성이 더 큽니다. 저는 ' 누군가가 그렇게하는 데 전념하는 여러 웹 사이트보다 빠른 포럼 답변에서 기본 사항을 더 잘 설명 할 수있는 방법을 알지 못합니다. 내 블로그의 처음 4 개 기사도 유용 할 것입니다. dsprelated.com/showarticle/754.php 로 시작합니다.

답변

질문 1

배열의 전체 길이에 적용 할 경우 FFT의 길이는 배열의 길이가됩니다. 그러나 FFT는 길이가 2의 거듭 제곱이면 더 효율적이므로 길이가 2의 거듭 제곱이 될 때까지 신호 끝에 0 “을 채우는 것이 일반적입니다.

매우 간단한 예 …

x = [3.4, 2.56, 1.3]

x의 길이는 3이고 다음 거듭 제곱입니다. 3 이후의 2는 4이므로 x

x = [3.4, 2.56, 1.3, 0]

로 변경합니다. 길이가 4 인 FFT를 적용합니다.

또 다른 큰 하지만! 신호가 길면 한 번에 모든 작업을 수행하기에는 극도로 비효율적입니다. 짧은 노래 길이의 오디오 파일에 대해 FFT를 수행하려고하지 않을 것입니다.이 경우 신호를 적당한 크기의 청크로 나누고 각각에 대해 FFT를 수행하고 결과를 평균화합니다.

데이터로 실제로 수행하려는 작업이 표준 FFT가 아니라 위에서 설명한 평균화 프로세스라는 점이 좋습니다. Google Bartlett 및 Welch 더 많은 d를위한 방법 etails.

질문 2

당신이 여기서 무엇을 묻는 지 100 % 확실하지 않습니다. 주파수 빈의 너비가 결정되고 실행되는 방법을 알고 싶은 것으로 해석하겠습니다.

각 주파수 빈의 너비는 신호가 샘플링 된 속도에 의해서만 결정됩니다. FFT의 길이입니다. 각 빈의 너비는 샘플링 주파수를 FFT의 샘플 수로 나눈 값입니다.

df = fs / N

주파수 빈은 -fs/2에서 시작하여 fs/2까지 올라갑니다. 즉, 100 개 샘플에 대해 100Hz로 샘플링하면 주파수 빈이 너비가됩니다. 1Hz. 샘플 200 개를 가져 오면 이제 2 배의 주파수 빈이 생기고 너비는 각각 1 / 2Hz가됩니다.

댓글

  • 정말 감사합니다. 제가 이해하지 못한 모든 것이 ' 다었습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다