2015-04-21 6 views
14

Ich habe festgestellt, dass mein Smartphone (Android 4.2.2) nicht in der Lage ist, Rechteckwellenformen zu generieren (ich brauche es, den Audioausgang als serielle Leitung für die Datenübertragung zu verwenden). Am Anfang nahm ich an, dass es meine Anwendung war, aber dann habe ich viele bedeutende Tests gemacht. Dies sind die neuesten Tests. Ich hoffe, Sie können eine Erklärung für das Phänomen finden.Android Audio-Verzerrung auf Rechteckwellenform

Ich erzeugte eine WAV-Datei mit einer Rechteckwellenform bei 500Hz. Ich spiele die WAV-Datei auf einem Android-Handy und auf einem Apple iPhone. Ich habe das Signal mit meinem Notebook aufgezeichnet und analysiert (das Audiokabel ist mit dem Audioeingang des Notebooks verbunden).

Dann wiederholte ich die Tests mit dem Audiokabel zwischen einem Bluetooth-Transceiver-Gerät und dem Notebook Audio-Eingang. Und die Smartphones sind per Bluetooth (einmalig) mit dem Bluetooth-Transceiver verbunden.

HINWEIS: Das Bluetooth-Transceiver-Gerät ist ein Gerät, das Audiodaten über Bluetooth empfängt und einen Audio-Ausgang mit einer Standard-Audio-Buchse gibt.

Dies ist durch das iphone erzeugte Signal direkt an die Audiobuchse verbunden: signal generated by the bluetooth device receiving data from the iphone

Dies ist das Signal: iphone directly connected on the audio jack

Dies ist das Signal, das durch die Bluetooth-Vorrichtung zum Empfangen von Daten aus dem iPhone erzeugte generiert durch das Android-Gerät direkt mit der Audio-Buchse verbunden: android device directly connected with the audio jack

Dies ist das Signal von der Bluetooth-Gerät Daten empfangen generiert vom Android Smartphone:

bluetooth device receiving data from the android smartphone

analisys:

-Der Bluetooth-Gerät einen Schnitt an der Bandbreite des Signals führt (so scheint es mir akzeptabel).

-Der iphone hat wirklich guten Analogteil (es gibt eine sehr gute Rechteckwellenform)

-Der Android-Gerät hat wirklich schlecht Analogteil (auch wenn es für die Musikwiedergabe ist perfekt)

-das Daten, die vom Android-Telefon an das Bluetooth-Gerät gesendet werden, sind nicht korrekt, tatsächlich ist das empfangene Signal anders als das, das mit den Daten vom iPhone erworben wurde.

Ich habe das Smartphone auf die Werkseinstellungen zurückgesetzt, aber das Problem wurde nicht gelöst. Ich habe auch versucht, kitkat benutzerdefinierte ROM zu installieren, aber das Problem ist immer noch da. Ich habe auch versucht mit einem Nexus 5 (Android 5) und Samsung S4 Mini (Android 4.2.2 wie meins) und sie verhält sich wie das iPhone.

Ich vermute, dass das Problem mit DTS-Studio-Sound zu tun hat (ich versuchte, es zu deaktivieren und es auf verschiedene Arten ohne Erfolg einzustellen). Der DTS scheint der einzige Software-Unterschied zwischen meinem Handy und dem Samsung S4 zu sein.

FRAGE: Ich kann verstehen, dass die analoge Seite meines Android-Geräts nicht gut ist wie das iPhone, ich könnte auch annehmen, dass der analoge Teil meines Android-Geräts gebrochen ist ... aber ich verstehe nicht, warum ich don bekomme ich das selbe ergebnis wenn ich das bluetooth-sendegerät einstecke.

+2

Es gibt auf jeden Fall Filtern sowohl Tiefpass und ziemlich oft Hochpass in Serienkondensatoren, wenn nirgendwo sonst. Es gibt auch möglicherweise alle Arten von hässlichen Verarbeitung wie Sample-Rate-Konvertierung. Aber es könnte auch Probleme mit Ihrem Programm geben, wie zum Beispiel Buffer Underrun auf einigen Geräten. Um wirklich zu diagnostizieren, zeigen Sie bitte Bilder der verzerrten Ausgabe bei verschiedenen Frequenzen und decken mehrere Zyklen der Rechteckwelle ab. Wie groß ist Ihre Puffergröße? Was gibt die Abfrage der Mindestpuffergröße auf dem fehlerhaften Gerät zurück? Das Einbeziehen des Erzeugungs- und Wiedergabecodes wäre ebenfalls nützlich. –

+0

Sie können auch versuchen, Ihr Signal als WAV-Datei auf einem PC mit Audacity oder einem Port Ihres Programms zu erstellen, der Samples in eine Datei schreibt, überprüft, ob es dort abgespielt wird und dann versucht, das wiederzugeben Android-Gerät. Dadurch können Sie feststellen, ob ein Problem mit der Hardware oder der Fabriksoftware des Geräts oder mit Ihrem Programm vorliegt. –

+0

Hallo @ Cris Stratton, ist es nicht wichtig, meine app, weil das Problem auch vorhanden ist, wenn ich eine WAV-Datei von der Standard-Audio-App (die mit Android geliefert). Ich werde versuchen, einen Schnappschuss zu liefern – Gaucho

Antwort

2

Warum verwenden Sie eine Rechteckwelle? Ist das eine Anforderung? Rechteckwellen sind in digitalen Systemen sinnvoll, aber als analoges Signal hat es alle möglichen unangenehmen Eigenschaften (wie unendliches Spektrum, wenn ich mich erinnere). Warum nicht zwei Töne im menschlichen hörbaren Bereich verwenden, für den das Audiosystem des Telefons entworfen ist?

Es gibt viele Signalisierungs- und Modulationstechniken, die zum Senden von Daten über analoge oder Audiokanäle verwendet werden. Hast du eines der folgenden Dinge angeschaut?

How could you transfer data over an audio line?

Audio Modem: data over sound

Transfering data using audio signal in android

Der dritte Link beschreibt Frequency-shift keying in Android verwenden. Das sieht nach einer sehr guten Lösung aus. Die Wikiepedia Seite für FSK enthält die folgenden Kommentare zu dem Audio FSK

Tonfrequenz-shift keying (AFSK) ist eine Modulationstechnik, durch die digitale Daten werden durch Änderungen in der Frequenz (Tonhöhe) einen Audioton vertreten , die ein codiertes Signal ergeben, das für die Übertragung über Radio oder Telefon geeignet ist. Normalerweise wechselt der übertragene Ton zwischen zwei Töne: einer, die "Markierung", stellt eine binäre Eins dar; der andere, der "Raum", stellt eine binäre Null dar. ... AFSK hat den Vorteil, dass codierte Signale AC-gekoppelte Verbindungen durchlaufen, einschließlich der meisten Geräte, die ursprünglich für Musik oder Sprache konzipiert wurden.

+0

Michael, vielen Dank, ich wusste nicht, dass es solche Möglichkeiten gibt, auch wenn, jetzt, wo du es mir gesagt hast, es offensichtlich ist dass es möglich ist. Wie auch immer, es ist eine Voraussetzung, eine Rechteckwellenform zu verwenden, und Ihre Antwort passt nicht zu meiner Anfrage. Um zu wissen, was ich versuche zu tun, lesen Sie dies: http://StackOverflow.com/Questions/29715866/android-ppm-Audio-Library – Gaucho

+0

Wie auch immer, denken Sie nicht, dass es eine Softwarekomponente gibt, die das Problem erzeugt? Warum sind Daten, die über Bluetooth gesendet werden, nicht die ursprüngliche Rechteckwellenform? Das Problem ist nicht auf Apple-Geräten und auf Nexus5 vorhanden. heute abend werde ich auch am samsung phone meiner freundin versuchen. – Gaucho

+1

Beachten Sie, dass das menschliche Gehör auf Frequenzen von etwa 20 kHz begrenzt ist. Audiosysteme sind typischerweise nicht dafür ausgelegt, Signale weit über diesen Bereich hinaus zu reproduzieren (es besteht keine Notwendigkeit, da Menschen es ohnehin nicht hören können). Rechteckwellen haben Oberwellen (oder Hochfrequenzkomponenten), die weit über 20 kHz hinausgehen. Eine Rechteckwelle enthält Frequenzkomponenten, die weit über das menschliche Hören hinausgehen und die Fähigkeiten von Audiosystemen übersteigen. Siehe http://mathworld.wolfram.com/FourierSeriesSquareWave.html. Ein Audiosystem ist einfach nicht dafür ausgelegt, diese Signale nachzubilden und sollte nicht erwartet werden. –