온라인에서 비트와 조각을 읽었지만 모두 함께 조각 할 수는 없습니다. 신호 / DSP에 대한 배경 지식이있어 충분한 전제 조건이되어야합니다. 결국이 알고리즘을 Java로 코딩하는 데 관심이 있지만 아직 완전히 이해하지 못하므로 여기에 있습니다 (수학으로 계산됩니다).
내 지식의 격차와 함께 작동한다고 생각합니다.
배열로 읽을 수있는 오디오 음성 샘플 (예 : .wav 파일)로 시작하십시오. 이 배열을 부릅니다 . 여기서 범위는 ( 샘플)입니다. 값은 내가 생각하는 오디오 강도-진폭에 해당합니다.n은 0 , 1 , ... , N - 1 N
음성 신호가 "정적"인 것으로 가정하면 오디오 신호를 10ms 정도의 별개의 "프레임"으로 분할하십시오. 이것은 양자화의 한 형태입니다. 따라서 샘플 속도가 44.1KHz 인 경우 10ms는 441 샘플 또는 값과 같습니다 .
푸리에 변환 (FFT)을 수행하십시오. 이제 이것은 전체 신호 또는 의 각 개별 프레임에서 수행 됩니까? I는 일반적으로 푸리에 변환은 신호의 모든 요소에 보이는 변환 때문에 차이가 있다고 생각 때문에 와 결합 를 와 결합했습니다. 여기서 은 더 작은 프레임입니다. 어쨌든 FFT를 수행 하고 나머지는 로 끝납니다 .F ( x [ n ] ) ≠ F ( x 1 [ n ] ) F ( x 2 [ n ] ) … F ( x N [ n ] ) x i [ n ] X [ k ]
Mel scale에 매핑 및 로깅 정규 주파수 숫자를 Mel 스케일로 변환하는 방법을 알고 있습니다. 의 각 (나를 허용 할 경우 "x 축")에 대해 http://en.wikipedia.org/wiki/Mel_scale 에서 공식을 수행 할 수 있습니다 . 그러나 "y- 값"또는 의 진폭은 어떻습니까? 그것들은 단지 동일한 값을 유지하지만 새로운 Mel (x-) 축의 적절한 지점으로 이동 되었습니까? 나는의 실제 값 로깅에 대해 뭔가가 있었다 일부 신문에서 보았다 다음 경우 때문에 그 신호 중 하나가 추정되는 경우 소음으로 원하지 않는이 이 방정식에 대한 로그 연산은 곱셈 노이즈를 가산 노이즈로 바꾸어 희망적으로 필터링 할 수 있습니다 (?).
이제 마지막 단계는 위에서 수정 한 의 DCT를 가져 오는 것입니다 (그러나 결국 수정되었습니다). 그런 다음이 최종 결과의 진폭을 가져와 이것이 MFCC입니다. 고주파수를 버리는 것에 대해 읽었습니다.
그래서 나는이 녀석을 단계별로 계산하는 방법을 실제로 철분하려고 노력하고 있으며, 분명히 어떤 것들이 위에서 나를 피하고 있습니다.
또한 "필터 뱅크"(기본적으로 대역 통과 필터 배열)를 사용하는 것에 대해 들었고 이것이 원래 신호에서 프레임을 만드는지 또는 FFT 후에 프레임을 만드는지 알 수 있습니까?
마지막으로 계수가 13 인 MFCC에 대해 보았던 것이 있습니까?