2016-12-07 5 views
-1

Ich mache ein Projekt, wo ich die Frequenzen von Echtzeit-Mikrofoneingang über fft zu einem txt doc ausgabe und dann abrufe (oder versuche, sie abzurufen) zu einer Liste von 4 Frequenzen. Mein Listen-Array wird leer, dh die Konsole druckt [] und keine Zahlen in ihnen. Bitte sagen Sie mir, was mit der Logik falsch ist. Dies ist innerhalb der Leere draw()Frequenzen - Von fft zu Datei zur Liste mit der Verarbeitung

for (int i = 0; i<fft.specSize(); i++) { 

float freq = fft.getFreq(i); 
int freqint = (int) freq; 
//println(freqint); 
output.println(freqint);} 



Scanner input = new Scanner("...\\list.txt"); 





while (input.hasNextInt()) { 
    list.get(input.nextInt(4)); 

} 




println(list); 


input.close(); 

Antwort

0

Teilen Sie Ihre taks in Teilaufgaben:

  1. get FFT-Daten (und 4 Frequenzen)
  2. Speichern/Laden Float-Werte auf der Festplatte
  3. Setzen Sie die 1 und 2 zusammen

Es sieht aus wie Sie bereits die erste p haben Kunst gemacht. Es ist unklar, was die 4 Frequenzen sind, aber Sie können das selbst herausfinden.

Der Teil, der verwirrend ist, ist, dass Sie die Get-FFT-Daten einmal aufrufen und dann versuchen, es direkt auf die Festplatte zu speichern. Ich bin nicht 100% das ist was du vorhast. Überprüfen Sie, ob Sie zuerst einige wenige Sekunden FFT-Daten speichern müssen.

Ich würde ein allgemeineres Szenario wie folgt vorstellen:

  1. Last FFT-Daten zuvor gespeichert (falls vorhanden)
  2. Prozess FFT-Daten (so lange wie erforderlich - könnte einen Start benötigen/Stopp boolean) und fügen Sie
  3. speichern aktuellen FFT-Daten

bewegen Sie sich auf Speichern und Laden von Daten. Sie haben ein paar Optionen in Verarbeitung bauen zum Speichern von Daten:

  1. Strings über saveStrings()/loadStrings()
  2. CSV Tabelle über saveTable()/loadTable()/Table
  3. JSON über JSONObject/JSONArray und verfügbar Last/speichern Funktionen
  4. XML

Ich empfehle allein, hier ist ein Grund Proof of Concept-Schnipsel mit Strings Daniel Shiffman's Data Tutorial

Umgang mit Speichern/Laden Gleitkommazahlen auf der Festplatte zu lesen:

int fftSpecSize = 10;//this will be fft.specSize() in your case 

String values = ""; 

for(int i = 0 ; i < fftSpecSize; i++){ 
    //random(1) is a placeholder for fft.getFreq(i); 
    values += random(1); 
    //if it's not the last value, add a separator character (in this case space) 
    if(i < fftSpecSize-1){ 
    values += " "; 
    } 
} 

println("values to save:"); 
println(values); 
println(); 
//save data 
saveStrings("fftSingleRead.txt",values.split(" ")); 

//load data 
String[] readValues = loadStrings("fftSingleRead.txt"); 

//print raw loaded data 
println("readValues from .txt file:"); 
println(readValues); 
println(); 

//parse values: 
for(int i = 0 ; i < readValues.length; i++){ 
    float value = float(readValues[i]); 
    println("readValues[",i,"] = ",value); 
} 

zusätzlich ist hier eine Tabelle Beispiel zu:

Table fftValues; 
int specSize = 10; 

//create a new table 
fftValues = new Table(); 
//add columns - one per FFT bin 
for(int i = 0 ; i < specSize; i++){ 
    fftValues.addColumn(); 
} 

//add some data, a row per reading 
//create a new row 
TableRow newRow = fftValues.addRow(); 
//add each fft value to the row 
for(int fftCount = 0 ; fftCount < specSize; fftCount++){ 
    //placeholder for newRow.setFloat(fftCount,fft.getFreq(fftCount)); 
    newRow.setFloat(fftCount,random(1)); 
} 
//add the row to the table 
fftValues.addRow(newRow); 

//save to disk 
saveTable(fftValues,"fftValues.csv","csv"); 

//load from disk 
Table readValues = loadTable("fftValues.csv","csv"); 
//access the data that has been saved in the table 
for(int rowCount = 0; rowCount < readValues.getRowCount(); rowCount++){ 
    TableRow currentRow = readValues.getRow(rowCount); 
    print("row[",rowCount,"] = "); 
    for(int columnCount = 0; columnCount < currentRow.getColumnCount(); columnCount++){ 

    float value = currentRow.getFloat(columnCount); 

    print(value); 

    if(columnCount < currentRow.getColumnCount() - 1){ 
     print(","); 
    } 
    } 
    println(); 
} 

Probieren Sie den Code, sehen Sie die Ausgabe, lesen Sie die Kommentare, lesen Sie die Referenz, zwicken/wiederholen/verstehen und an Ihr Problem anzupassen.

+0

Ich hatte vorgehabt, die ersten vier oder fünf Frequenzen nach fft zu bekommen. Das ist alles.Aber um das zu tun, musste ich eine Umschreibung in eine TXT-Datei schreiben und dann den Scanner verwenden, da der Scanner nur eine Zeichenkette oder Datei nimmt. Wenn ich renne, zeichnet die TXT-Datei die Frequenzen in int, und fast die ersten 800 bis 1000 Nummern sind 0 und dann nur andere Zahlen wie 1 oder 11 oder 14 oder was auch immer die Echtzeit-Eingabe von Mic-Rekorder bekommt. –

+0

Pl Überprüfen Sie auch meinen zweiten Post, der nach meinem ersten Post selbst angezeigt wird. Ich dachte, es wird nach deinem angezeigt werden. –

+0

Versuchte Ihren Code. Auf der ersten Instanz funktioniert es und ich denke, liest/speichert die ersten zehn Frequenzen. Ich werde es besser verstehen und mich meinem Problem anpassen, wie du es erwähnt hast. –

Verwandte Themen