- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 241

Thema: wav Dateien: Programieren von Wiedergabe und Aufnahme

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    HaWe
    Gast
    ja, ich habe die Grenzen noch optimiert, nach ein paar Serien sehr ausgefallener random-Waves.
    zur Zeit ver 0005-0007.
    im Raspy Code mus es ntl als array-Größe SHRT_MAX heißen statt arrlen, und int32_t statt int16_t.

    wenn nach dem Rausch-ex vorher/hinterher beim Abhören immer noch alles klar ist, dann kann man jetzt die Grenzen des Signals setzen:

    int signalstart=0;
    int i=0;
    while( (wavbuffer[i]<=baseline+bias) && (i<SHORT_MAX-1) ) ++i;
    signalstart=i;

    int signalend=SHORT_MAX-1;
    i=SHORT_MAX-1;
    while( (wavbuffer[i]<=baseline+bias) && (i>signalstart) ) --i;
    signalend=i;

    jetzt müsten die Grenzen feststehen.
    Ich teste es auf dem Arduino aus.
    ver 0007c

    - - - Aktualisiert - - -

    jawohl, klappt!

    Code:
    
    // ver 0007c
    
    void arrayinit(int16_t * array, int16_t arrlen) {
       char      sbuf[128];
       int16_t   bias, minr, maxr, baseline, 
                   maximum, minimum, maxpos, minpos,
                   signalstart, signalend;
       uint16_t  i;
    
    
       // simulated noisy word-command or signal
       for (i=0; i<arrlen; ++i) {    
         array[i] = 128 + random(11) - 5;  // simulated noise  +/- 5;      
       }
       for (i=33; i<arrlen-101; ++i) {  // simulated word/signal +/- 100
         array[i] = 128 + random(201) - 100;      
       }
    
       curlf();
       sprintf(sbuf, "arrayinit[0] vorher %d ", array[0] );  
       Serial.println(sbuf);
       lcdprint(sbuf);
      
       // dynamics: min, max 
    
       maximum = array[0];
       minimum = array[0]; 
     
      
       for(i=0;i<arrlen; ++i)
       {
         if(array[i] > maximum)    {
            maximum = array[i];      
            maxpos = i;
         }
         if(array[i] < minimum)     {
           minimum = array[i];      
           minpos = i;
         }
       }
    
    
       // calculate baseline from last 100 array cells:
       // init vars
       baseline=( array[minpos] + array[maxpos] ) / 2;  // init baseline by (min+max)/2
       minr=baseline - 1;
       maxr=baseline + 1;
      
       // auto-adjust:  
       for (i=arrlen-100; i<arrlen; ++i) {    
         // mean baseline
         baseline = round ( ( 0.5*(float)array[i]  + 0.5*(float)baseline )) ;
    
         // smoothed out max noise
         if (array[i] >= baseline) maxr = round ( ( 0.6*(float)array[i]  + 0.4*(float)maxr )) +1 ;
    
         // smoothed out min noise
         if (array[i] <= baseline) minr = round ( ( 0.6*(float)array[i]  + 0.4*(float)minr )) -1 ;       
       }
     
       bias = max(baseline-minr, maxr-baseline) +1;  // 
      
       curlf();
       sprintf(sbuf, "baseline %d ", baseline );  
       Serial.println(sbuf);
       lcdprint(sbuf);
    
       curlf();
       sprintf(sbuf, "bias %d ", bias );  
       Serial.println(sbuf);
       lcdprint(sbuf);
    
    
       // noise reduction start/end 
       // drop small noise
       for (i=0; i<arrlen; ++i) {
          if( (array[i]>baseline ) && (array[i] <= baseline + bias)) array[i] = baseline ; // little higher value => drop to baseline
          else
          if( (array[i]<baseline ) && (array[i] >= baseline - bias)) array[i] = baseline ; // little lower value => rise to baseline
       }
    
    
       // signalstart, signalend: threshold = bias + (bias/2)   
       signalstart=0;
       i=0;
       while( (array[i]<=baseline + 4*bias/3) && (i<arrlen-1) ) ++i;
       signalstart = i;
       if (i>0) signalstart -=1;   
       signalend=arrlen-1;
       i=arrlen-1;
       while( (array[i]<=baseline + + 4*bias/3) && (i>signalstart) ) --i;
       signalend = i;
       if (i<arrlen-1) signalstart +=1;     
      
       curlf();  
       sprintf(sbuf, "arrayinit[0] nachher %d", array[0] );  
       lcdprint(sbuf);
       Serial.println(sbuf);
    
       curlf(); _curx_=80;
       sprintf(sbuf, "signalstart %d", signalstart );  
       lcdprint(sbuf);
       Serial.println(sbuf);
    
       curlf(); _curx_=80;
       sprintf(sbuf, "signalend  %d", signalend );  
       lcdprint(sbuf);
       Serial.println(sbuf); 
    
    }
    jetzt bei 7c: Grenzenerkennung funktioniert sogar bei 20% Rauschen sehr gut.
    neuestes Bild ganz unten hier im Post:

    http://www.mindstormsforum.de/viewto...p=69409#p69409
    Geändert von HaWe (08.06.2016 um 13:48 Uhr)

  2. #2
    HaWe
    Gast
    @hirnfrei:
    lässt sich jetzt wieder playCaptured verwenden?
    wenn du meine Array-Veränderungen (analog Arduino-Code) auf wavbuffer anwendest: lässt sich der Sound dann damit abspielen?
    Wie klingt es, verglichen mit dem Original (input) ?

    Wenn alles ok ist (und auch dein "Wort" sogar schärfer abgegrenzt zu hören ist, wie es ja sein soll):
    sollen wir dann die FFT in Angriff nehmen?

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    397
    Ich hoffe das ich dir da heute noch eine Antwort drauf geben kann. Habe ja am Sonntag mein Gentoo auf systemd umgestellt und da müssen viele fette Programme neu compiliert werden. Firefox, Thunderbird, LibreOffice usw. Bin leider immer noch nicht fertig damit.

    Spätestens morgen geht es weiter!

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    397
    So. System erfolgreich umgestellt. Morgen gehts wieder ans Projekt!

  5. #5
    HaWe
    Gast
    Gentoo für den Raspi...?

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    397
    Später vielleicht. Bislang ist es den Aufwand nicht wert.

    Aber nein ich habe mein Desktop mal auf systemd um gestellt und aktualisiert. Das dauert leider ewig und da ich ja ausschliesslich mit ssh auf dem Raspi arbeite ging das eben nicht, solange der updated, sonst hätte es noch viel länger gedauert.

  7. #7
    HaWe
    Gast
    willst du nicht langsam mal direkt auf dem Pi programmieren und compilieren?
    Einfach einen großen HDMI-Screen + Maus + Tastatur dran, fertig,
    Full-HD-HDMI Monitore (oder DVI mit HDMI-Adapter) gibts gebraucht bei Ebay für unter 50 EUR, und kleine HDMIs dann zum einfach-umstecken für den mobilen Einsatz im 7-10".

Ähnliche Themen

  1. Video Aufnahme (+12std.)
    Von highdef im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 8
    Letzter Beitrag: 03.06.2011, 10:08
  2. led ein/aus programieren
    Von anthony im Forum PIC Controller
    Antworten: 6
    Letzter Beitrag: 15.07.2008, 17:44
  3. hex-dateien in bin-dateien umwandeln
    Von roboterheld im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 02.10.2007, 20:25
  4. Richtiges Drehen einer Flasche/Dose zur Aufnahme
    Von ähM_Key im Forum Mechanik
    Antworten: 2
    Letzter Beitrag: 06.10.2006, 15:43
  5. Automatische Audio-Aufnahme
    Von the_Ghost666 im Forum Software, Algorithmen und KI
    Antworten: 6
    Letzter Beitrag: 11.09.2005, 20:27

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test