2011-04-20 2 views
4

나는 마이크에서 실시간으로 FFT를 화면에 그릴 수있는 앱을 만들었다. x 축의 시간, y 축의 주파수 및 픽셀의 색상은 진폭을 나타냅니다 (거의 바닐라 FFT 스펙트로 그램).사운드 스펙트로 그램

내 문제는 음악에서 패턴을 볼 수 있지만 노이즈도 많다는 것입니다. 그것을 검색해 사람들이 진폭에 대수 계산을 적용하는 것을 봅니다. 내가 이걸해야 되니? 그렇다면 공식은 어떻게 생겼을까요? (저는 C#을 사용하고 있습니다. 그러나 어떤 샘플도 괜찮기 때문에 수학을 코드로 변환 할 수 있습니다.)

더 낮은 값을 나타내는 색 구성표를 더 어두운 색으로 적용하면이 문제를 피할 수 있습니다. 나는 오디오가 정확하게 대수 계산없이 표현되는지 확실치 않습니다.

+0

현재 출력물의 스크린 샷이 있습니까? – RQDQ

+0

더 나은 아직 로그 주파수 축을 사용하여 귀의 감도를보다 자세히 미러링합니다. 차이점을 이해하려면 http://wikidelia.net/wiki/Spectrogram for examples – martinwguy

답변

8

대수 눈금의 진폭 표현은 인간 청각 시스템의 감도를 대략적으로 나타내므로 비대칭 눈금과 비교할 때 듣는 것을 더 잘 표현할 수 있습니다. 수학적으로, 당신이해야 할 모든은 다음과 같습니다

Alog = 20*log10 (abs (A)) 
A는 FFT 데이터의 크기입니다

하고 Alog가 출력됩니다. 20의 요소는 관례에 불과하며 어쨌든 색 구성표로 확대 할 수있는 이미지에는 영향을주지 않습니다.

을 편집 20 인자 관한

설명 : dB (데시벨) 유닛 비율 측정 대수 단위 : 그것은 (100)와 (10) 사이의 거리 사이의 동일되어있는 스케일을 나타낸다 1000 및 100 (동일한 비율 : 1000/100 = 100/10이기 때문에). 당신이 dB에서 측정하면 얻을 :

10*log10 (1000/100) = 10*log10 (100/10) = 10 

deci 10 데시벨 1 벨을 의미입니다 tenth을, 의미하기 때문에 10의 요소는 인간의 청각 이후

(같은 1kg 1000 그램) 시스템은 또한 (대략) 측정 비율이기 때문에 음높이를 대수 규모로 측정하는 것이 좋습니다. 즉, 음량의 비율을 기준값과 비교하는 것입니다. 사운드 레벨은 음파의 파워 (와트)와 관련되어 있으므로 실제로는 P/Pref의 비율을 측정합니다. 또한 전력은 진폭 제곱에 비례하므로 모두 다음과 같이 나타납니다.

10*log10 (P/Pref) = 10*log10 (A^2/Aref^2) = 20*log10 (A/Aref) 

로그 규칙을 사용합니다. 그것이 20 요소의 근원입니다. 컴퓨터에서 오디오는 음파의 순간 진폭으로 나타납니다.

+0

을 참조하십시오. 20 조금 더 설명해 주시겠습니까? –

+0

내 대답을 수정했습니다. –

3

대수적으로 스펙트로 그램을 보는 것은 오디오 신호를 보는 더 좋은 방법입니다. 또한 시간 방향과 주파수 방향 모두에서 좋은 resolution이 필요함을 명심하십시오. 당신이 하나 또는 다른 것에 너무 적은 쓰레기통을 가지고 있다면 이상하게 보일 수 있습니다.

다른 중요한 점은 로그 스케일에서 STFT를 보는 것이 이 아니고 노이즈 제거 기술이라는 것입니다. "잡음"으로 보이는 것은 실제는 noise이거나 harmonics, transients, spectral leakage 및 기타 예상되는 것일 수 있습니다. 응용 프로그램에 따라 신호의 단기 분석이 필요한 경우 wavelet 변환이 사용자의 요구에 더 적합 할 수 있습니다.일정한 창 크기와 같은 STFT의 단점을 제거합니다.

관련 문제