Pouvez-vous détecter par programme le bruit blanc?

Le Dell Streak a été découvert pour avoir une radio FM qui a des commandes très brutes. La «numérisation» n'est pas disponible par défaut, donc ma question est de savoir si quelqu'un sait comment, en utilisant Java sur Android, on pourrait «écouter» la radio FM alors que nous faisons itérer dans la gamme de fréquences détectant le bruit blanc (ou un bon signal) de sorte que Agir comme une fonction de recherche de radio normale?

  • Comment getSystemService () fonctionne-t-il exactement?
  • Lecture de fichiers audio l'un après l'autre
  • Utilisation de Dagger 2 pour injecter en service
  • La détection de la marque NFC n'appelle onNewIntent et elle démarre à partir de l'activité principale
  • Différences entre différents types d'émissions dans Android
  • Comment accéder aux objets d'un XML de mise en page à partir d'une classe Java dans Android
  • 9 Solutions collect form web for “Pouvez-vous détecter par programme le bruit blanc?”

    J'ai fait quelques travaux pratiques sur cette zone spécifique, je recommanderais (si vous avez un peu de temps pour cela) d'essayer un peu d'expérimentation avant de recourir à la fft'ing. Le flux de pcm peut être interprété de manière très complexe et subtile (selon un filtrage et un rééchantillonnage de qualité supérieure), mais peut également être pratiquement traité pour de nombreuses applications comme chemin d'une ligne ondulée.

    Le bruit blanc est un tremblement imprévisible de la ligne, ce qui n'est jamais moins constant en intensité (rms, moyenne absolue …) Le contenu acoustique est un mouvement récurrent et des surprises occasionnelles (sauts, sauts):]

    Le contenu sans bruit d'un signal peut être estimé en effectuant des calculs rapides sur une fenêtre en marche du flux PCD.

    Par exemple, le bruit aura fortement tendance à avoir une valeur plus élevée pour l'intégrale absolue de sa dérivée, que le non-bruit. Je pense que c'est la façon académique de dire ceci:

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

    En outre, la moyenne absolue en cours d'exécution sur ~ 16 à ~ 30 échantillons de bruit blanc aura tendance à varier moins, sur le bruit blanc que le signal acoustique:

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

    Cela concerne la façon dont le bruit blanc tend à ne pas être sporadique sur un intervalle suffisamment large pour atteindre la moyenne de son entropie. Le contenu acoustique est sporadique (puissance localisée) et récurrent (puissance répétitive). Le test simple réagit au contenu acoustique avec des fréquences plus faibles et pourrait être noyé par un contenu à haute fréquence. Il est simple d'appliquer des filtres passe-bas qui pourraient aider (et sans doute d'autres adaptations).

    En outre, le carré moyen de la racine peut être divisé par la somme absolue moyenne fournissant un autre ratio qui devrait être particulier au bruit blanc, même si je ne peux pas comprendre ce qu'il est maintenant. Le rapport sera également différent pour les dérivés des signaux ainsi.

    Je pense que ce sont des signatures simples et simples du bruit. Je suis sûr qu'il y a plus … Désolé de ne pas être plus précis, ce sont des conseils flous et imprécis, mais il effectue des tests simples sur la sortie d'un fft. Pour une meilleure explication et plus d'idées, consultez peut-être des mesures statistiques et stochastiques (?) D'entropie et de hasard sur wikipedia, etc.

    Utilisez une transformée de Fourier rapide.

    C'est ce que vous pouvez utiliser pour une transformation de Fourier rapide. Il analyse le signal et détermine la puissance du signal à diverses fréquences. S'il y a un pic dans la courbe FFT, il doit indiquer que le signal n'est pas simplement un bruit blanc.

    Voici une bibliothèque qui prend en charge les FFT. Aussi, voici un blog avec le code source au cas où vous voulez apprendre ce que fait la FFT.

    Si vous ne disposez pas d'outils FFT, juste une suggestion sauvage:
    Essayez de compresser quelques millisecondes d'audio.

    Une caractéristique typique du bruit est qu'il comprime beaucoup moins que le signal clair.

    Pour autant que je sache, il n'y a pas d'API ni même de pilotes pour la radio FM dans le SDK d'Android et, à moins que Dell ne lâche un, vous devrez rouler le vôtre. En fait, c'est même pire que cela. Tous les nouveaux chipsets (?) Ont la radio FM mais pas tous les téléphones ont une application de radio FM .

    L'ancien Windows Mobile avait le même problème .

    Pour la détection du bruit blanc, vous devez faire FFT et voir qu'il a un spectre plus ou moins continu. Mais l'enregistrement de FM pourrait être un problème.

    Juste un filtrage passe-haut, il donnera une bonne idée, et a parfois été utilisé pour squelch sur les radios FM.

    Notez que cela est comparable à ce que la suggestion dérivée a été obtenant – en prenant la dérivée est une forme simple de filtre passe-haut, et en prenant la valeur absolue d'une manière brute de mesurer le pouvoir.

    Avez-vous un abonnement à la bibliothèque IEEE Xplore? Il existe d'innombrables articles ( un choisi au hasard) sur ce sujet même.

    Une méthode très simpliste serait d'observer la «planéité» de la densité spectrale de puissance . On pourrait prendre cela en utilisant une Transformée de Fourier Rapide du signal dans le domaine temporel et trouver l' écart type de la densité spectrale. Si elle est inférieure à un seuil, vous avez votre bruit blanc.

    La question principale est: quel type de signal avez-vous accès?

    Je parie que vous n'avez pas directement accès au signal analogique EM directement. Donc, aucune utilisation de FFT sur ce signal n'est possible. Vous ne pouvez pas non plus essayer de créer une boucle à verrouillage progressif , comme c'est le cas de votre ancien tuner radio standard ("Numérisation" dans votre cas).

    Votre seule option est bien de choisir une fréquence et de l'écouter aussi (et essayer de détecter quand il y a du bruit avec FFT sur le son). Vous pourriez même avoir accès au signal FFTed.

    Problème ici: si vous souhaitez détecter une fréquence potentielle en utilisant un bruit blanc, vous pourrez facilement prendre des signaux.


    Quoi qu'il en soit, voici ce que j'essaierais de faire avec cette stratégie:

    Doublement intégralement l' autocorrélation de la densité spectrale sur une fraction de seconde d'audio. Et cela pour chaque fréquence.

    Ensuite, recherchez une fréquence FM où ce nombre est maxi.

    Petite explication ici:

    • La densité spectrale vous donne un signal dont les fréquences les plus utilisées sont maxi.
    • Si un peu plus tard si les mêmes fréquences sont maxed, vous avez un audio supposé clair. Vous obtenez ceci en intégrant l'autocorrélation, la densité spectrale pour une fréquence audio pendant une fraction de seconde (en utilisant une fonction qui augmente plus que linéaire pourrait également fonctionner)
    • Vous devez ensuite l'intégrer à toutes les fréquences audio

    Veillez également à normaliser les intégrales: un signal de bruit blanc fort ne devrait pas obtenir un score plus élevé qu'un signal audio clair mais faible.

    Plusieurs personnes ont mentionné la FFT, que vous voulez faire, mais pour détecter le bruit blanc, vous devez vous assurer que la grandeur est relativement constante sur la gamme des fréquences audio. Vous ne voulez que regarder les grandeurs seulement, vous pouvez jeter les phases. Vous pouvez calculer une moyenne et un écart type pour les grandeurs en O (N). Pour le bruit blanc, vous devriez trouver l'écart type pour être une fraction relativement faible de la moyenne. Si je me souviens bien de mes statistiques, il devrait s'agir de (1 / sqrt (N)) de la moyenne.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.