2010-10-07 20 views
31

Stwierdzono, że Dell Streak ma radio FM, które ma bardzo surową kontrolę. "Skanowanie" jest domyślnie niedostępne, więc moje pytanie brzmi, czy ktoś wie, jak, używając Java na Androida, można "słuchać" radia FM, gdy przechodzimy przez zakres częstotliwości wykrywając biały szum (lub dobry sygnał), tak jak zachowywać się jak normalna funkcja wyszukiwania radia?Czy można programowo wykryć szum biały?

+0

Mam Dell Streak i mam zainstalowane narzędzia Android. Uderz mnie, jeśli potrzebujesz czegoś do testowania wersji beta :-) – CiscoIPPhone

Odpowiedz

15

Zrobiłem kilka praktycznych prac w tym konkretnym obszarze, polecam (jeśli masz trochę czasu na to), aby spróbować trochę eksperymentów przed uciekaniem się do fft'ing. Strumień pcm można interpretować bardzo złożoną i subtelną (jak w przypadku wysokiej jakości filtrowania i ponownego próbkowania), ale można go również praktycznie traktować do wielu celów jako ścieżkę linii falistej.

Biały szum jest nieprzewidywalna wstrząsanie linii, która jest nie-mniej całkowicie ciągła w intensywności (RMS Bezwzględna średnia ..) Zawartość akustyczny stanowi powracający wiggling i sporadyczne niespodzianki (skacze skacze)]

Nieszumowa treść sygnału może zostać oszacowana poprzez wykonanie szybkich obliczeń w uruchomionym oknie strumienia pcm.

Na przykład, szum będzie silnie mieć wyższą wartość dla całki bezwzględnej pochodnej niż nieszyfr. Myślę, że jest to sposób naukowy mówiąc to:

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*/ } 

Również działa absolutny średnio ~ 16 do ~ 30 próbek białego szumu będzie miał tendencję do zmieniania mniej, ponad białego szumu niż sygnał akustyczny:

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*/ } 

Dotyczy to tego, że biały szum jest zwykle nie sporadyczny w wystarczająco dużym zakresie, aby uśrednić swoją entropię. Zawartość akustyczna jest sporadyczna (moc zlokalizowana) i nawracająca (moc powtarzalna). Prosty test reaguje na zawartość akustyczną o niższych częstotliwościach i może być zagłuszany przez zawartość wysokiej częstotliwości. Są proste do zastosowania filtry dolnoprzepustowe, które mogą pomóc (i bez wątpienia inne adaptacje).

Kwadratowy średni kwadrat można również podzielić przez średnią sumę bezwzględną, która zapewnia inny stosunek, który powinien być właściwy dla białego szumu, ale nie mogę określić, jaki jest teraz. Stosunek ten będzie również różny dla pochodnych sygnałów.

Uważam, że są to proste formułkowe sygnatury hałasu. Jestem pewien, że jest ich więcej .. Przykro mi, że nie jest to bardziej szczegółowe, jest to niewyraźne i niedokładne porady, ale tak samo jest wykonywanie prostych testów na wynikach fft.Aby uzyskać lepsze wyjaśnienia i więcej pomysłów, być może sprawdź statystyczne i stochastyczne (?) Pomiary entropii i losowości na wikipedii itd.

+0

+1 Uważam, że jest to najłatwiejsze i najbardziej wydajne rozwiązanie. Poprzez wyprowadzenie, rzeczywiście wykryje losową naturę hałasu. Działa nawet przy krótkim czasie próbkowania, co oznacza szybkie skanowanie. –

+0

To musi być dobry punkt, ponieważ moje wyjaśnienie było/jest tak niechlujne. Próbowałem trochę go naprawić. – strainer

+0

Dzięki za to - poniższa uwaga dotycząca Androida bez dostępu do API może być (i prawdopodobnie jest) przeszkodą, ale jeśli mam jakikolwiek dostęp, prawdopodobnie zastosuję tę metodę. –

3

Do wykrywania białego szumu należy wykonać FFT i zobaczyć, że ma on mniej lub bardziej ciągłe widmo. Ale nagrywanie z FM może być problemem.

14

Użyj szybkiej transformaty Fouriera.

Do tego można użyć szybkiej transformaty Fouriera dla. Analizuje sygnał i określa siłę sygnału przy różnych częstotliwościach. Jeśli w ogóle występuje skok na krzywej FFT, powinien on wskazywać, że sygnał nie jest po prostu szumem białym.

Here to biblioteka obsługująca FFT. Ponadto, here to blog z kodem źródłowym, jeśli chcesz się dowiedzieć, co robi FFT.

+0

Ile milisekund audio potrzebujesz zebrać, zanim będzie można zastosować użyteczny FFT? –

+0

Mówisz tutaj o sygnale EM, który dostanie. FFT może pomóc, ale PLL byłoby lepsze. Niestety nie masz takiego sygnału ... – BenoitParis

+0

Każda wielkość okna fft powyżej około 32 próbek da idealnie użyteczne wartości do testowania noisyness (32 instancje wystarczą, aby entropia białego szumu była wystarczająco przeciętna w porównaniu do szczegółów akustycznych). Zalecałbym rzucanie skąpo, około 1/10 sygnału i utrzymywanie okna pod 200 próbkami, unikałoby to problemów związanych z przetwarzaniem odpadów, a poza tym nie myło miejscowych/perkusyjnych brzmień zbyt długo. – strainer

7

Jeśli nie masz narzędzia FFT dostępne, tylko dziki sugestia:
spróbować kompres kilka milisekund audio.

Typową cechą hałasu jest to, że kompresuje znacznie mniej niż czysty sygnał.

+1

To ciekawy sposób na zrobienie tego, ale mam wątpliwości ... czy byłby w stanie rozpoznać kanał, który miał niski poziom szumu? Również byłby bardzo zależny od zastosowanego algorytmu kompresji - jaki byłby dobry algorytm? – CiscoIPPhone

+0

To naprawdę szalona sugestia. Czy myślisz o kompresji bezstratnej (zip) lub kompresji audio, takiej jak mp3 czy ogg? –

+0

Niezwykle dzika prawda! Myślałem o czymś takim jak zip, ale teraz, gdy to mówisz, mp3/ogg jest bardzo interesującym pomysłem, bliższym robieniu FFT. –

1

Czy masz subskrypcję do biblioteki IEEE Xplore? Na tym właśnie temacie jest niezliczona liczba dokumentów (one wybranych losowo).

Bardzo uproszczoną metodą byłoby zaobserwowanie "płaskości" mocy spectral density. Można to zrobić za pomocą sygnału z dziedziny czasu i znaleźć gęstość widmową. Jeśli jest poniżej pewnego progu, masz biały szum.

0

Główne pytanie brzmi: do jakiego rodzaju sygnału masz dostęp?

Założę się, że nie masz bezpośredniego dostępu do analogowego sygnału EM bezpośrednio. Zatem nie jest możliwe użycie FFT dla tego sygnału. Nie możesz również próbować zbudować modelu phased-lock loop, tak jak działa standardowy stary tuner radiowy ("Skanowanie" w twoim przypadku).

Jedyną opcją jest wybieranie jednej częstotliwości i słuchanie jej również (i próba wykrycia, kiedy jest szum z FFT przy dźwięku). Możesz nawet mieć tylko dostęp do sygnału FFTed.

Problem tutaj: Jeśli chcesz wykryć potencjalną częstotliwość za pomocą białego szumu, możesz zbyt łatwo odbierać sygnały.


W każdym razie, tutaj jest to, co chciałbym spróbować zrobić z tej strategii:

Pokój zintegrować autocorrelation z spectral density ciągu ułamka sekundy dźwięku. I to dla każdej częstotliwości.

Następnie poszukaj częstotliwości FM, gdzie ta liczba jest maksymalna.

Małe wyjaśnienie tutaj:

  • widmowa gęstość daje sygnał, który najczęściej używanych częstotliwości są maxed.
  • Jeśli trochę później, jeśli te same częstotliwości są ustawione na maksimum, to masz rzekomo czysty dźwięk. Masz to poprzez integrację autokorelacji widmową gęstość na jednej częstotliwości dźwięku na ułamek sekundy (przy użyciu niektórych funkcji, które rośnie większy niż liniowy może również pracować)
  • Następnie wystarczy zintegrować to dla wszystkich częstotliwości dźwiękowych

Należy również uważać, aby znormalizować całki: głośny sygnał białego szumu nie powinien mieć wyższego wyniku niż czysty, ale niski sygnał audio.

+0

Kompresja może również pomóc (może wymagać intensywnego źródła?) – BenoitParis

5

O ile mi wiadomo, nie ma interfejsu API, a nawet sterowników dla radia FM w urządzeniu Android SDK i jeśli firma Dell nie zwolni, trzeba będzie przetworzyć własną wersję. W rzeczywistości jest jeszcze gorzej. Wszystkie (?) Nowe chipsets ma Radio FM, ale not all phones ma FM Radio application.

Stary Windows Mobile miał to samo problem.

0

Kilka osób wspomniało o FFT, co chcesz zrobić, ale aby wykryć biały szum należy się upewnić, że wielkość jest stosunkowo stała w zakresie częstotliwości dźwięku. Będziesz chciał spojrzeć tylko na wielkości, możesz wyrzucić fazy. Możesz obliczyć średnie i standardowe odchylenie dla wielkości w czasie O (N). W przypadku białego szumu standardowe odchylenie powinno być stosunkowo małym ułamkiem średniej. Jeśli dobrze pamiętam statystyki, powinno być około (1/sqrt (N)) średniej.

2

Po prostu filtrowanie górnoprzepustowe da dobry pomysł, a czasami służy do blokowania szumów w radiach FM.

Należy zauważyć, że jest to porównywalne z tym, do czego dochodziła sugestia pochodna - przyjęcie pochodnej jest prostą formą filtra górnoprzepustowego i przyjęcie bezwzględnej wartości tego prostego sposobu pomiaru mocy.

Powiązane problemy