2010-10-07 10 views
31

Der Dell Streak wurde entdeckt, um ein UKW-Radio zu haben, das sehr grobe Kontrollen hat. "Scannen" ist standardmäßig nicht verfügbar. Meine Frage ist also, ob jemand weiß, wie man mit Java unter Android das UKW-Radio "hört", wenn wir im Frequenzbereich das weiße Rauschen (oder ein gutes Signal) erkennen ähnlich wie die normale Suchfunktion eines Radios zu handeln?Können Sie programmgesteuert weißes Rauschen erkennen?

+0

Ich habe einen Dell Streak und habe Android-Tools installiert. Triff mich, wenn du einen Beta-Tester brauchst :-) – CiscoIPPhone

Antwort

15

Ich habe einige praktische Arbeit in diesem speziellen Bereich gemacht, würde ich empfehlen (wenn Sie ein wenig Zeit dafür haben), nur ein wenig experimentieren vor dem Rückgriff auf fft'ing. Der PCM-Strom kann sehr komplex und subtil interpretiert werden (wie durch hochqualitatives Filtern und Neuabtasten), kann aber auch praktisch für viele Zwecke als der Pfad einer wackeligen Leitung behandelt werden.

Weißes Rauschen unberechenbar Schütteln der Linie ist, die nie-the-less ist ziemlich kontinuierlich in Intensität (rms, absoluter Mittelwert ..) Akustisches Inhalt sind immer wieder wackeln und gelegentliche Überraschungen (Sprünge, Sprünge):]

Der nicht-rauschartige Inhalt eines Signals kann geschätzt werden, indem schnelle Berechnungen an einem laufenden Fenster des PCM-Stroms durchgeführt werden.

Zum Beispiel wird Rauschen tendenziell einen höheren Wert für das absolute Integral seiner Ableitung haben als Nicht-Rauschen. Ich denke, das ist die akademische Art zu sagen:

loop(n+1 to n.length) 
{ sumd0+= abs(pcm[n]); 
    sumd1+= abs(pcm[n]-pcm[n-1]); 
} 

wNoiseRatio = ?0.8; //quite easily discovered, bit tricky to calculate. 

if((sumd1/sumd0)<wNoiseRatio) 
{ /*not like noise*/ } 

Auch der Lauf absolute Durchschnitt über ~ 16 bis ~ 30 Proben von weißem Rauschen neigen dazu, weniger zu variieren, über weißes Rauschen als akustisches Signal:

loop(n+24 to n.length-16) 
{ runAbsAve1 += abs(pcm[n]) - abs(pcm[n-24]); } 

loop(n+24+16 to n.length) 
{ runAbsAve2 += abs(pcm[n]) - abs(pcm[n-24]); } 

unusualDif= 5; //a factor. tighter values for longer measures. 

if(abs(runAbsAve1-runAbsAve2)>(runAbsAve1+runAbsAve2)/(2*unusualDif)) 
{ /*not like noise*/ } 

Dies betrifft, wie weißes Rauschen tendenziell nicht sporadisch über ausreichend große Spannweite neigt, um seine Entropie zu mitteln. Akustischer Inhalt ist sporadisch (lokalisierte Kraft) und rezidivierend (repetitive Kraft). Der einfache Test reagiert auf akustischen Inhalt mit niedrigeren Frequenzen und könnte durch Hochfrequenzinhalt übertönt werden. Es gibt einfache Tiefpassfilter, die helfen können (und zweifellos andere Anpassungen).

Auch der quadratische Mittelwert kann durch die mittlere absolute Summe geteilt werden, die ein anderes Verhältnis liefert, das speziell für weißes Rauschen sein sollte, obwohl ich nicht genau sagen kann, was es gerade ist. Das Verhältnis wird sich auch für die Signalderivate unterscheiden.

Ich denke an diese als einfache formelhafte Signaturen von Rauschen. Ich bin mir sicher, dass es mehr gibt .. Sorry, um nicht genauer zu sein, es ist verschwommen und ungenau Rat, aber so ist die Durchführung einfacher Tests auf die Ausgabe eines fft.Zur besseren Erklärung und mehr Ideen vielleicht statistische und stochastische (?) Messungen der Entropie und Zufälligkeit auf Wikipedia etc.

+0

+1 Ich denke, es ist die einfachste und performanteste Lösung. Indem es abgeleitet wird, wird es tatsächlich die zufällige Natur des Geräusches erkennen. Und es funktioniert auch mit kurzer Abtastzeit, was schnelles Scannen bedeutet. –

+0

Es muss ein guter Punkt sein, weil meine Erklärung war so chaotisch. Ich habe versucht, es ein wenig zu reparieren. – strainer

+0

Danke dafür - die Bemerkung unten zu Android, die keinen API-Zugang hat, könnte (und ist wahrscheinlich) ein Stolperstein sein, aber wenn ich Zugang dazu habe, werde ich wahrscheinlich diese Methode anwenden. –

3

Für die Erkennung von weißem Rauschen müssen Sie FFT durchführen und sehen, dass es ein mehr oder weniger kontinuierliches Spektrum hat. Aber die Aufnahme von FM könnte ein Problem sein.

14

Verwenden Sie eine schnelle Fourier-Transformation.

Dies ist, wofür Sie eine schnelle Fourier-Transformation verwenden können. Es analysiert das Signal und bestimmt die Stärke des Signals bei verschiedenen Frequenzen. Wenn es überhaupt eine Spitze in der FFT-Kurve gibt, sollte dies anzeigen, dass das Signal nicht einfach weißes Rauschen ist.

Here ist eine Bibliothek, die FFTs unterstützt. Außerdem ist here ein Blog mit Quellcode für den Fall, dass Sie etwas über die Funktionsweise der FFT erfahren möchten.

+0

Wie viele Millisekunden Audio musst du sammeln, bevor du eine brauchbare FFT anwenden kannst? –

+0

Sie sprechen hier über das EM-Signal, das er bekommen würde. FFT kann helfen, aber PLL wäre besser. Leider haben Sie dieses Signal nicht ... – BenoitParis

+0

Jede fft-Fenstergröße über etwa 32 Samples wird perfekt brauchbare Werte zum Testen von Rauschen liefern (32 Instanzen reichen aus, um die Entropie des weißen Rauschens im Vergleich zu akustischen Details ausreichend zu mitteln). Ich würde empfehlen, nur etwa 1/10 des gesamten Signals zu fiften und das Fenster unter 200 Samples zu belassen, es vermeidet überflüssige Verarbeitungsanforderungen und entfernt übrigens lokalisierte/perkussive Laute nicht übermäßig lange. – strainer

7

Wenn Sie nicht über FFT-Tools zur Verfügung, nur einen wilden Vorschlag:
Versuchen Sie, Kompresse wenige Millisekunden von Audio.

Ein typisches Merkmal von Rauschen ist, dass es viel weniger als klares Signal komprimiert.

+1

Das ist ein interessanter Weg, aber ich habe Zweifel ... würde es in der Lage sein, einen Kanal zu erkennen, der wenig Rauschen hat? Außerdem wäre es sehr abhängig von dem verwendeten Komprimierungsalgorithmus - was wäre ein guter Algorithmus? – CiscoIPPhone

+0

Das ist wirklich ein wilder Vorschlag. Denkst du über verlustfreie Kompression (zip) oder Audiokompression wie mp3 oder ogg? –

+0

Extrem wild in der Tat! Ich habe über etwas wie zip nachgedacht, aber jetzt, wo du das sagst, ist mp3/ogg eine sehr interessante Idee, näher an einer FFT. –

1

Haben Sie ein Abonnement für die IEEE Xplore-Bibliothek? Es gibt unzählige Papiere (one zufällig ausgewählt) zu diesem Thema.

Eine sehr einfache Methode wäre es, die "Flachheit" der Leistung spectral density zu beobachten. Man könnte dies unter Verwendung eines Fast Fourier Transform des Signals im Zeitbereich machen und die standard deviation der spektralen Dichte finden. Wenn es unter einem Schwellenwert liegt, haben Sie Ihr weißes Rauschen.

0

Die Hauptfrage hier ist: auf welche Art von Signal haben Sie Zugriff?

Ich wette, Sie haben keinen direkten Zugriff auf das analoge EM-Signal direkt. Also keine Verwendung von FFT auf dieses Signal möglich. Sie können auch nicht versuchen, eine phased-lock loop zu bauen, so wie Ihr Standard-Radio-Tuner funktioniert ("Scanning" in Ihrem Fall).

Ihre einzige Option ist in der Tat, wählen Sie eine Frequenz und hören Sie es auch (und versuchen, erkennen, wenn es Rauschen mit FFT auf Ton ist). Möglicherweise haben Sie sogar nur Zugriff auf das FFTed-Signal.

Problem hier: Wenn Sie eine potenzielle Frequenz mit weißem Rauschen erkennen möchten, werden Sie Signale zu leicht aufnehmen.


Wie auch immer, hier ist das, was ich mit dieser Strategie zu tun versuchen würde:

Doppel die autocorrelation der spectral density über einen Bruchteil einer Sekunde von Audio integrieren. Und das für jede Frequenz.

Dann suchen Sie nach einer UKW-Frequenz, wo diese Nummer maximal ist.

Kleine Erklärung hier:

  • Spektraldichte gibt Ihnen ein Signal, das am häufigsten verwendeten Frequenzen ausgereizt sind.
  • Wenn ein bisschen später, wenn die gleichen Frequenzen maximal sind, dann haben Sie einige angeblich klare Audio. Sie erhalten dies durch die Integration der Autokorrelation der spektralen Dichte für eine Audiofrequenz für einen Bruchteil einer Sekunde (mit einer Funktion, die größer als linear auch funktioniert)
  • Sie müssen nur für alle Audiofrequenzen
integrieren

Achten Sie auch darauf, die Integrale zu normalisieren: Ein lautes weißes Rauschsignal sollte keine höhere Punktzahl erhalten als ein klares, aber leises Audiosignal.

+0

Komprimieren könnte auch helfen (möglicherweise ressourcenintensiv?) – BenoitParis

5

Soweit ich weiß gibt es keine API oder gar Treiber für das FM-Radio in der Android SDK und wenn Dell nicht eins veröffentlicht, müssen Sie Ihre eigenen rollen. Es ist sogar noch schlimmer. Alle (?) Neuen chipsets haben FM-Radio, aber not all phones hat eine FM Radio application.

Das alte Windows Mobile hatte die gleiche problem.

0

Mehrere Leute haben die FFT erwähnt, die Sie tun möchten, aber dann weißes Rauschen erkennen Sie müssen sicherstellen, dass die Amplitude über den Bereich der Audiofrequenzen relativ konstant ist. Sie werden nur Größen betrachten wollen, Sie können die Phasen wegwerfen. Sie können eine Durchschnitts- und Standardabweichung für die Größen in O (N) -Zeit berechnen. Bei weißem Rauschen sollte die Standardabweichung einen relativ kleinen Bruchteil des Durchschnitts ausmachen. Wenn ich mich an meine Statistiken erinnere, sollte es etwa (1/sqrt (N)) des Durchschnitts sein.

2

Nur Hochpass Filterung wird es eine gute Idee geben, und wurde manchmal für Squelch auf FM-Radios verwendet.

Beachten Sie, dass dies vergleichbar ist mit dem, was der abgeleitete Vorschlag bekam - die Ableitung ist eine einfache Form des Hochpassfilters, und der absolute Wert davon ist eine grobe Art der Messung der Leistung.

Verwandte Themen