2014-04-30 3 views
0

AndroidPlot으로 플로팅 할 때 내 X 축 값을 수정하려고합니다. 오디오 스펙트럼의 FFT를 나타 내기 위해 노력 중이므로 X 축에 다른 주파수를 표시하고 싶습니다. 문서에서 은 사용하는 시스템 권장입니다 : x 값으로 요소 인덱스를 사용AndroidPlot에서 축 값 설정

SimpleXYSeries.ArrayFormat.Y_VALS_ONLY 

을,하지만 내가 필요하지 않습니다.

f = i * Fs/N 축을 변환하려면 다음 작업을 수행해야합니다. Fs, 샘플 속도는 Hz 및 N은 FFT의 포인트 수입니다.

나는 새로운 포매터를 만들 필요가 있음을 알고 이미이 같은 몇 가지 예를 점검 한

this.getGraphWidget().setDomainValueFormat(new GraphXLabelFormat()); 

// ... 

private class GraphXLabelFormat extends Format { 

private static LABELS = ["Label 1", "Label 2", "Label 3"]; 

@Override 
public StringBuffer format(Object object, StringBuffer buffer, FieldPosition field) { 
    int parsedInt = Math.round(Float.parseFloat(object.toString())); 
    String labelString = = LABELS[parsedInt]; 

    buffer.append(labelString); 
    return buffer; 
} 

@Override 
public Object parseObject(String string, ParsePosition position) { 
    return java.util.Arrays.asList(LABELS).indexOf(string); 
} 

}

문제는 내가 작동 내가 돈 방법을 이해 정말 해달라고입니다 내 necesities에 적응하는 방법을 알아.

미리 감사드립니다.

답변

0

기본적으로 사용자 지정 Format 형식 (Object, StringBuffer, FieldPosition) 메서드의 "object"필드는 방정식에서 'i'와 일치합니다. 따라서 다음과 같이 할 수 있어야합니다.

@Override 
public StringBuffer format(Object object, StringBuffer buffer, FieldPosition field) { 
    int i = Math.round(Float.parseFloat(object.toString())); 

    // assumes 'freqHz' and 'samples' (your array or list of of underlying samples) is 
    // within scope of this method call: 
    String thisFreq = i * (freqHz/samples.length); 
    buffer.append(thisFreq + "Hz"); 
    return buffer; 
}