Forum: Digitale Signalverarbeitung / DSP / Machine Learning DFT, VAD (Voice activity detection)


von obeflix (Gast)


Lesenswert?

Hallo community,

es geht um folgendes Problem:
Über ein Mikrofon wird Sprache in Echtzeit übertragen. Leider werden 
dabei extrem viele, laute Nebengeräusche durch Lüfter, Motorgeräusch 
usw. eingefangen. Um diese Geräusche zu eliminieren, möchte ich 
folgendes tun:
-Development kit mit DSP kaufen
-Kit auf platine später auflöten, auf der Platine befindet sich dann ADC 
und Stecker für Mikrofon

Der Algorithmus besteht aus folgenden Modulen:

DFT - Blockbildung aus mehreren Abtastwerten - Erkennung ob Sprache 
aktiv ist - bei nicht aktiver Sprache->Abspeichern des Datenblocks - bei 
aktiver Sprache-> Subtratktion des Datenblocks mit keiner Sprache von 
Datenblock mit Sprache=> Erhofftes Ergebnis: Erhebliche Dämpfung des 
Hintergrundlärms - inverse DFT

Fragen bzgl. DFT:
1. Habe ich richtig erkannt das ich um eine Umwandlung von Zeit in 
Frequenzbereich für einen geeigneten dynamischen Filter nicht umgehen 
kann?

2. Gibt es Möglichkeiten die Implementierung der DFT zu umgehen (durch 
Autocode oder bestehende Codes)?
Ich habe von FFTW und Spiral gelesen. Es handelt sich jedoch 
lizenzbedingt um nichtkommerzielle Nutzung der Produkte.

3. Auf der Seite:
http://www.dspdimension.com/admin/dft-a-pied/
Habe ich folgenden Code entdeckt:
1
#define M_PI 3.14159265358979323846
2
3
long bin;
4
for (bin = 0; bin <= transformLength/2; bin++) {
5
  
6
  /* frequency */
7
  frequency[bin] = (float)bin * sampleRate / (float)transformLength;
8
  /* magnitude */
9
  magnitude[bin] = 20. * log10( 2. * sqrt( sinPart[bin] * sinPart[bin] +
10
                       cosPart[bin] * cosPart[bin]) / 
11
                      (float)transformLength);
12
  
13
  /* phase */
14
  phase[bin] = 180.*atan2(sinPart[bin], cosPart[bin]) / M_PI - 90.;
15
}

Ist dieser so realisierbar oder ist die Implementierung auf dem DSP wie 
in anderen Beispielen einige hundert Zeilen lang?

4. Gibt es bestehende für mich nutzbare Codes für die Erkennung von 
aktiver oder inaktiver Sprache?

5. Welcher DSP bevorzugt ihr nach den Aspekten: Firma, ADC integriert 
oder nicht, Entwicklungsumgebung der Software usw.

Vielen Dank im Vorraus

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

obeflix schrieb:
> es geht um folgendes Problem:
> Über ein Mikrofon wird Sprache in Echtzeit übertragen. Leider werden
> dabei extrem viele, laute Nebengeräusche durch Lüfter, Motorgeräusch
> usw. eingefangen. Um diese Geräusche zu eliminieren, möchte ich

"Eliminieren" ist sehr optimistisch. Wirklich viel kann man bei einem 
einzelnen Mikrofon durch Signalverarbeitung nicht rausholen. Wenn du 
stationaere, relativ schmalbandige Stoerer hast, dann ist das gut; 
Windgeraeusche und breitbandiges Rauschen ist sehr schlecht.

> DFT - Blockbildung aus mehreren Abtastwerten - Erkennung ob Sprache
> aktiv ist - bei nicht aktiver Sprache->Abspeichern des Datenblocks - bei
> aktiver Sprache-> Subtratktion des Datenblocks mit keiner Sprache von
> Datenblock mit Sprache=> Erhofftes Ergebnis: Erhebliche Dämpfung des
> Hintergrundlärms - inverse DFT

So aehnlich geht das, wenn auch nicht wirklich so einfach. Mit den 
Stichworten Spektrale Subtraktion und Wiener-Filter duerftest du genug 
finden. Die Transformation in den Frequenzbereich ist aber mit einer DFT 
nicht getan, da muss man sich ein paar mehr Gedanken zur Blockbildung 
und Fensterung machen. Das Stichwort hierfuer heisst DFT-Filterbank. 
Erwarte aber nicht dass du das in ein paar Wochen hinbekommst, wenn du 
keine Vorkenntnisse hast.

> Fragen bzgl. DFT:
> 1. Habe ich richtig erkannt das ich um eine Umwandlung von Zeit in
> Frequenzbereich für einen geeigneten dynamischen Filter nicht umgehen
> kann?

Arbeiten im Frequenzbereich ist fuer die Anwendung auf jeden Fall 
noetig.

> 2. Gibt es Möglichkeiten die Implementierung der DFT zu umgehen (durch
> Autocode oder bestehende Codes)?

Bei jedem DSP wirst du in der Standardbibliothek eine 
FFT-Implementierung finden (FFT ist ein schneller Algorithmus fuer die 
DFT).

> Ist dieser so realisierbar

Nein, das waere katastrophal. Verwende eine FFT die fuer deinen DSP 
angepasst ist.

> 4. Gibt es bestehende für mich nutzbare Codes für die Erkennung von
> aktiver oder inaktiver Sprache?

Ich wuerde mal mit einer einfachen rekursiven Leistungsmittelung und 
einem Schwellwert anfangen.

> 5. Welcher DSP bevorzugt ihr nach den Aspekten: Firma, ADC integriert
> oder nicht, Entwicklungsumgebung der Software usw.

TI C5000 wuerde z.B. passen, siehe 
http://www.mikrocontroller.net/articles/TMS320VC5505_eZDSP_USB_Stick.

von obeflix (Gast)


Lesenswert?

Hallo Andreas,

>Wenn du
>stationaere, relativ schmalbandige Stoerer hast, dann ist das gut;
>Windgeraeusche und breitbandiges Rauschen ist sehr schlecht.

Ich werde mir die Störgeräusche und das Spektrum noch näher anschauen.

>> 5. Welcher DSP bevorzugt ihr nach den Aspekten: Firma, ADC integriert
>> oder nicht, Entwicklungsumgebung der Software usw.

>TI C5000 wuerde z.B. passen, siehe
>http://www.mikrocontroller.net/articles/TMS320VC55....

Wieso schlägst du einen Festkomma DSP vor. Ich weiß  zwar dass dieser 
schneller ist, jedoch ist der Programmieraufwand um einiges größer. Mir 
persönlicher wäre ein floating point lieber.
Mit einem TMS320F28335 
(http://focus.ti.com/docs/prod/folders/print/tms320f28335.html)
müsste es doch auch gehen.
(FFT und ADC vorhanden; ausreichend dimensioniert)

Ist ein c6000 auch wählbar? Die Frage stellt sich mir, da die 6000er 
keinen separaten ADC besitzen. Auf dem Evalboard gibt es jedoch das 
Modul AIC3106, welches einen stereo ADC besitzt. Sicherlich kann man 
diesen aber auch Mono benutzen.
(http://focus.ti.com/lit/ds/symlink/tlv320aic3106.pdf

Gruß obeflix

von Martin (Gast)


Lesenswert?

Um dieses Problem anzugehen, empfehle ich eher einen praktischen, denn 
einen technischen Weg:

Bei Windgeräuschen zum Beispiel wird ein "Aufsatz" für das Mikrofon 
gesteckt. Vielleicht gibt es eine entsprechende Lösung für dein Problem.

http://de.wikipedia.org/wiki/Mikrofon-Windschutz

von obeflix (Gast)


Lesenswert?

@Martin

Danke für den praktischen Tipp.
Leider bringt so ein Windschutz bei Motorlärm und Ventilatoren nur sehr 
wenig. Zudem möchte ich auch den Weg über DSP gehen.

von Michael H. (spechthuhn)


Lesenswert?

gehe doch mal das problem von der technischen seite an.
bei elv gibt es ein kleines modul, das mittels eines speziellen ic's von 
semi cond. nebengeräusche ausblenden soll.
das teil heisst MGU100 und kostet mit zwei microkapseln 24,95

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Ich würde dazu raten, ein solches Signal unter realen Bedingungen 
aufzuzeichnen und erstmal am PC zu untersuchen, ob die zur Verfügung 
stehenden mathematischen Verfahren den gewünschten Erfolg bringen. Erst 
dann würde ich in DSP-Hardware investieren.

Grüße,

Peter

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.