2012-06-18 5 views
1

웨이브 파일이 있습니다. 픽셀 당 2 샘플을 검색 한 다음 줄을 그립니다. 나는 급상승과 거래하기 전에 빠르고 고통 스럽다. 난 진폭 값을 문제 파형의 정확한 이미지이다그림 파형 - DB로 변환합니다.

enter image description here

를 표시 할 수 없다. 이 작업을 수행하기 위해 다음 코드

//tempAllChannels[numOfSamples] holds amplitude data for the entire wav 
//oneChannel[numOfPixels*2] will hold 2 values per pixel in display area, an average of min amp, and average of max 
for(int i = 0; i < numOfSamples; i++)//loop through all samples in wave file 
{ 
    if (tempAllChannels[i] < 0) min += tempAllChannels[i];//if neg amp value, add amp value to min 
    if (tempAllChannels[i] >= 0) max += tempAllChannels[i]; 

    if(i%factor==0 && i!=0)  //factor is (numofsamples in wav)/(numofpixels) in display area 
    { 
     min = min/factor;  //get average amp value 
     max = max/factor; 
     oneChannel[j]=max; 
     oneChannel[j+1]=min; 
     j+=2;     //iterate for next time 
     min = 0;    //reset for next time 
     max = 0; 
    } 
} 

을 사용하고 중대하지만 조용한 물결 이미지는 터무니없이 작은이 arent 있도록 DB에 표시해야합니다,하지만 난 위의 코드

oneChannel[j]=10*log10(max); 
oneChannel[j+1]=-10*log10(-min); 
에 다음과 같이 변경을 할 때

파도 이미지가 이렇게 보입니다. 정확한 밤은

enter image description here

, 그것은 숙청되고 그처럼 보인다. 내가하고있는 일에 뭔가 이상이 있니? 다이나믹을 유지하면서 진폭을 데시벨로 변환하는 방법을 찾아야합니다. 나는 DB로 변환 평균을 복용해야한다고 생각하고있어.

+1

작은 값을 확장하면 큰 값을 스쿼시하게됩니다. 그것은 같은 간격을 유지하는 유일한 방법입니다. 그것은 수학의 자연스러운 결과입니다. –

+0

나는 그것이 사실일지도 모른다라고 생각했다. 그러나 나는 대담한 파형을 볼 때 파형이 더 평등합니다. 나는 그들이 데시벨로 표시하고 있다고 가정했지만 그들은 그렇지 않습니다. 평균 진폭의 배열을 채우는 방법에 문제가 있다고 생각합니다. 그 또는 그들은 인간에 의해 더 쉽게 읽을 수 있도록 약간 정규화하는 방법을 알아 냈습니다. –

답변

2

개요를 보려면 dB로 변환하지 마십시오. 아무도 그렇게하지 않습니다.

블록의 평균을 찾는 대신 절대 값의 최대 값을 찾아야합니다. 평균화하면 고주파 봉우리에서 많은 진폭을 잃게됩니다.

+0

나는 오늘 아침에 최대 값과 최소값을 나타내는 수평선을 그 어서 찾아 냈다. 내 조용한 wav를 너무 작게 만드는 평균을 사용했다는 것이 밝혀졌습니다. –