2009-02-11 5 views
2

Mon DAC est interne cadencé à 48khz, j'ai besoin de le nourrir à partir d'un flux qui est également 48khz mais est cadencé à partir d'une source différente.Piloter un DAC à partir d'un flux synchronisé à partir d'une autre source?

Les deux sources vont dériver au fil du temps et toute mise en mémoire tampon entre inévitablement débordera ou débordera.

Malheureusement, aucun mécanisme de contrôle de débit n'est disponible pour la source.

Comment cela peut-il être mieux géré?

Serait-il acceptable de dupliquer ou de mélanger l'échantillon occasionnel pour compenser? J'estime 1 échantillon chaque ~ 70k échantillons pour la différence de 30ppm.

Répondre

2

Comme vos horloges fonctionnent à deux vitesses différentes, vous n'avez pas d'autre choix que de dupliquer ou de jeter des échantillons.

Effectuez le décompte du nombre d'échantillons lus/écrits et calculez le nombre d'échantillons que vous prévoyez d'avoir lus/écrits en fonction de l'heure actuelle. Une divergence peut alors être ajustée en dupliquant/jetant des échantillons.

0

Cela peut poser une question stupide, mais écoutez-moi: le taux de sortie est-il vraiment important?

Envisagez ce scénario: vous disposez d'un périphérique d'entrée audio. Vous échantillonnez une entrée de forme d'onde analogique à 48Khz. Cette forme d'onde peut être générée à tout moment, depuis la mesure continue du niveau de pression d'un microphone jusqu'à un codec vocal 8Khz, ou moins. Le fait que vous sachiez que cette sortie particulière est également à 48Khz n'a aucune incidence sur ce que vous faites. S'il y avait une transmission parfaite entre le périphérique de sortie et votre entrée, lorsque vous comparez la forme d'onde numérique originale à ce que vous lisez, vous verrez parfois que vous avez dupliqué un échantillon (si votre horloge est plus rapide) ou manquée (si vous êtes plus lent). Mais cela se fera automatiquement, sans aucune compensation de votre part. Cela sera facilement aussi précis que n'importe quelle tentative par vous pour déterminer quand «dupliquer ou jeter l'échantillon occasionnel».

En pratique, vous n'obtiendrez probablement pas une copie exacte de toute façon, entre les effets de filtrage et le bruit dans le DAC et ADC. Sauf si vous parlez d'un format audio numérique encodé - dans ce cas, ignorez tout ce que j'ai dit.

EDIT - Ok, donc c'est de l'audio numérique - S/PDIF?
Le signal doit contenir suffisamment d'informations pour implémenter un verrouillage de phase. Idéalement en matériel - les fronts montants du signal définissent la fréquence d'horloge - vous pouvez utiliser le matériel PLL pour verrouiller votre horloge A/D sur l'entrée. Ou sur-échantillonner pendant un certain temps et compter les fronts montants pour déterminer le taux. Ou au niveau du logiciel, mesurez le taux d'erreurs de cadrage dans les quatre premiers intervalles de temps et ajustez votre horloge pour compenser.

+0

Il est audio numérique. Ma préoccupation ne concerne pas tant la fidélité. Je suis plus préoccupé par le débordement/sous-dépassement de la mémoire tampon et le fait de devoir jeter ou maquiller un gros bloc de données en cas de condition xxxxflow. – JeffV

1

Si vous êtes préoccupé par la fidélité, au lieu de laisser tomber ou de dupliquer des échantillons, utilisez un convertisseur de fréquence d'échantillonnage. D'abord, utilisez l'horodatage pour mesurer le rapport de fréquence relatif entre le taux d'échantillonnage source et le taux d'échantillonnage de votre CAD. Utilisez ce ratio pour contrôler le convertisseur de fréquence d'échantillonnage. Un convertisseur de fréquence d'échantillonnage de qualité décente peut vous donner un rapport S/N de 95 db. Des algorithmes plus coûteux en calculs peuvent vous donner un rapport S/N> 120 db.

Voir:

--jdkoftinoff

+0

@jdkoftinoff: Je ne suis pas sûr que cela fonctionne avec des taux d'échantillonnage très proches les uns des autres. Vous auriez à suréchantillonner beaucoup. ?? – JeffV

+0

Non, cela fonctionne très bien. La clé est qu'avec un filtre polyphase, vous ne calculez pas les valeurs suréchantillonnées. libsamplerate peut bien faire des rapports arbitraires - même les changer dynamiquement. Généralement, vous voulez que les coefficients soient pré-calculés pour une plage étroite spécifique. – jdkoftinoff

Questions connexes