SPDIF sync generator

Ik ben op zoek naar een eenvoudige SPDIF sync generator die een nauwkeurige sampleclock kan genereren. (1e-9 ofzo)

Geluidskaarten kunnen hun sample clock vaak afleiden uit een externe SPDIF bron. Het is dan voldoende een SPDIF signaal met de juiste sample rate aan te leveren, de audio inhoud is onbelangrijk.

Ik zat er aan te denken om een SPDIF transmitter zoals de Cypress CS8406 te nemen, deze kan in een zgn "hardware mode" werken waarin je door het vast bedraden van de pennetjes het ding rudimentair kan configureren. Dat scheelt weer een microcontroller en het maken van software daarvoor.

Hij moet 48000 Hz sampling clock maken, de clock frekwentie voor dat ding moet dan 12.288 MHz zijn. Jammer, want ik heb 10 MHz beschikbaar met grote nauwkeurigheid.

Eigenlijk is zo'n intelligent ding helemaal niet nodig want het gevraagde signaal is natuurlijk gewoon een vast bitpatroon wat ik ook in een prommetje zou kunnen zetten. Wel een hele uitzoekerij hoe het er precies uit moet zien. Maar goed dan is de frekwentie 6.144 MHz, ook geen handig uit 10 MHz af te leiden frekwentie.

Hoe zou dit het handigst aan te pakken zijn? Ik kan er natuurlijk een PLL of NCO bij zetten, maar het liefst moet het geheel niet al te complex worden.

Kant en klaar dingetje ergens vinden zou ook mooi zijn. Ik zie bijv wel redelijk te betalen USB->SPDIF converters (USB audio device), als de clock daarvan op een of andere manier te locken is met 10 MHz dan zou dat ook wat kunnen zijn.

Reply to
Rob
Loading thread data ...

formatting link

Reply to
Bozweb

Ja zo iets zoek ik, maar dan hoeft ie alleen maar SPDIF en 48kHz te kunnen, en wat belangrijker is: hij moet kunnen locken aan een externe

10 MHz en/of 1 PPS bron.

In het veel duurdere segment zie ik wel dit soort dingen die dan kunnen locken aan video of aan word clock (een 48 kHz blokgolf), of die zelf al GPS-locked zijn.

Echter het moet een beetje betaalbaar zijn want ik heb er een stuk of

3 a 4 nodig en het is voor de hobby.

Zelf maken lijkt aantrekkelijker in dit geval.

Reply to
Rob

Als die klok ook nog eens extreem jitter-arm moet zijn dan heb je toch een uitdaging ! Hier is een website van een vriend van me die zich daar in gespecialiseerd heeft:

formatting link
formatting link
formatting link
formatting link

Het is dus "maar" een PLL probleempje, maar je hebt een extreem stabiele maar toch verstembare (kristal) oscillator nodig.

-- J

Reply to
Jeroen

Nee dat hoeft niet echt. Het gaat er niet om dat het allemaal hifi is maar ik wil graag op 1 locatie wat samplen en dat op andere locaties afspelen zonder dat er een voortdurende verschuiving in de samplemomenten zit.

1e-9 is wellicht overdreven maar we hebben al een 5e-12 referentie dus dat moet geen punt zijn. Nu tijdens een test met twee random niet gelockte geluidskaarten is het verschil 4e-5 en dat is wel erg bar.

Ik heb inderdaad al zitten denken aan een 12.288 MHz VCXO, dat dan locken aan de 10 MHz referentie (beiden delen naar de grootste gemene factor) en daarmee een SPDIF generator aansturen die alleen maar lege frames staat te sturen.

Maar het moet niet al te moeilijk worden... een software oplossing is ook nog mogelijk.

Bedankt voor de links! Dat gaat in ieder geval over hetzelfde onderwerp, zij het dan met andere aandachtspunten.

Reply to
Rob

Wat is het probleem dat je wil oplossen? Er zijn zoveel mogelijkheden om synchroon te samplen. Desnoods met picoseconde nauwkeurigheid over een afstand van tientallen kilometers.

--
Failure does not prove something is impossible, failure simply 
indicates you are not using the right tools... 
nico@nctdevpuntnl (punt=.) 
--------------------------------------------------------------
Reply to
Nico Coesel

Het probleem is dat ik op locatie 1 een audio signaal wil samplen, dat verzenden naar enkele andere locaties (waaronder ook local-loopback naar locatie 1) en daar dan weer analoog maken waarbij het binnen enkele microseconden synchroon is.

Als ik nu een blok samples van locatie 1 met timestamp (ns) naar locatie 2 breng en daar de geluidskaart in stuur, dan heb ik na een seconde 2 samples "over". Dwz de A/D geluidskaart produceert in een seconde

2 samples meer dan de D/A geluidskaart weg stuurt.

Dat los ik nu op door zodra dit geconstateerd wordt die extra samples weg te gooien. En ik kan er ook best mee leven dat dit zo nu en dan eens gebeurt, maar 2 samples op de 48000 per seconde is meer verschil dan ik verwacht had.

Het zou zowizo beter zijn als de 48kHz sampling clock fase-synchroon was tussen de locaties. We hebben een GPSDO op de locaties die 10 MHz en

1 PPS aflevert, dus het zou leuk zijn als de sampling clock daar aan gelocked kan worden.

Het lijkt er op dat bij hobby-budget geluidskaarten de kans dat je kunt locken aan SPDIF veel groter is dan dat er een kale word-clock input op zit. Bij studiokaarten kom je dat wel tegen, hoewel die er zo te zien ook vanaf aan het stappen zijn. Vandaar het idee SPDIF sync generator.

Maar als er redelijk te verkrijgen geluidskaarten zijn (PCI-x/PCI-e) met een word-clock input of anderszins mogelijkheid om de sample clock ergens aan te locken (bijvoorbeeld aan de systeemtijd) dan houd ik me ook aanbevolen.

We hoeven eigenlijk alleen een stereo line-in en line-out en een simpele A/D en D/A te hebben, allerlei DSP en effecten kapsones op de kaart daar hebben we alleen maar last van.

Reply to
Rob

Het simpelste is om een samplerateconversie aan de afspeelkant toe te passen. Daarmee speel je altijd af op de snelheid waarmee het gesampled wordt en doet de klok van de D/A converter er domweg niet meer toe.

--
Failure does not prove something is impossible, failure simply 
indicates you are not using the right tools... 
nico@nctdevpuntnl (punt=.) 
--------------------------------------------------------------
Reply to
Nico Coesel

hallo Rob,

Je kunt een synthesizer bouwen die 10.0000 Mhz synthetiseert naar een veelvoud van 48kHz. Dat kan met een VCO zoals een 9046. Zo'n oplossing ruist enorm maar als je dat niet belangrijk vindt heb je wel je nauwkeurigheid.

Een alternatief is een 12.288 Mhz VCXO, deze afstemmen en temperatuur stabiliseren (dan bouw je je eigen TCXO).

Voordat je begint zul je heel goed moeten weten welke nauwkeurigheid gewenst is, vooralsnog zie ik dat je geen specificatie hebt opgesteld.

succes,

Guido

Op maandag 7 juli 2014 00:28:05 UTC+2 schreef Rob:

Reply to
tentlabs

Ja maar dan moet je toch weten wat de gevraagde en daadwerkelijke samplerate is? Hoe wil je dat on-the-fly bepalen dan? En het converteren van bijv 48002 naar 48000 is ook niet echt simpel. (integer factoren zijn simpel, bijv 48000 naar 16000)

Wat ik nu doe (gewoon samples deleten/invoegen als er een verschil blijkt) zou goed genoeg zijn als het verschil klein is.

Reply to
Rob

Dat kan ook niet want het is meer "hoe nauwkeuriger hoe beter" maar er is geen harde grens. Wat we nu zien kunnen we ook acceptabel noemen.

Ik zat wel aan die oplossing als boven te denken. Wat we ook eerst gaan bekijken is of we een setje soundkaarten kunnen vinden die dichter bij elkaar liggen of die we kunnen bijregelen zodat ze dichter bij elkaar liggen (bijv als het kristal los en benaderbaar is er een trimmertje bij zetten). We hebben nu een afwijking tussen 2 plekken die ik groot vind voor een kristal en dit zou een uitschieter kunnen zijn. Een van die plekken blijkt een onboard sound te zijn, ik sluit niet uit dat de clock daarvan gewoon fout is omdat de fabrikant deze afgeleid heeft uit een al aanwezige andere clock en daardoor niet precies op de goede frekwentie uitkomt. We gaan nu dus eerst eens testen met 2 (gelijke) soundkaarten.

Het zou ook makkelijker zijn met soundkaarten met "word clock" ipv SPDIF clock sync, want dan hoef je alleen maar 48 kHz te majen en dat is vanuit

10 MHz nog wel te doen zonder PLL (maal 3 gedeeld door 625).

Rob

Reply to
Rob

Zodra je samples tekort komt of over hebt dan moet de decimatie factor worden aangepast. Je hebt een korte buffer (FIFO) nodig van een paar samples die je op een bepaald nivo houdt.

Er zijn algoritmes die 'fractional samplerate conversion' kunnen. Een simpele truuk is iedere sample X keer herhalen (bijvoorbeeld 16x). Als je dan in totaal 1 sample minder nodig hebt dan speel je van 16 opeenvolgende samples er 15 af. Het 16x gesamplede signaal haal je vervolgens door een low-pass filter. Van dat resultaat speel je steeds

1 van de 16 samples af.

Dan krijg je wel fasesprongen.

--
Failure does not prove something is impossible, failure simply 
indicates you are not using the right tools... 
nico@nctdevpuntnl (punt=.) 
--------------------------------------------------------------
Reply to
Nico Coesel

Ja maar daarmee kun je dus alleen maar een n/n+1 factor maken en als je op die manier 48000/48002 wilt maken dan zit je al met een buffer van een halve seconde. Dat is niet acceptabel.

Zoals gezegd, ik heb al zo iets alleen werkt het puur op het inserten en deleten van losse samples. Dat is goed genoeg als het niet te vaak nodig is. Dat was de reden dat ik de clocks beter gelijk wil hebben, en als we toch bezig zijn kan ik ze net zo goed helemaal gelijk maken. (aangezien er toch al een GPSDO referentie is)

Dat is niet zo erg want de samplerate (48 kHz) is al veel groter dan er nodig is voor de maximale frekwentie (5 kHz) en er zit nog een analoog LPF achter.

Reply to
Rob

Lees eens hoe een decimator werkt. Dan zul je zien dat die aanname niet klopt. Je kunt de bewerking binnen de tijd van een sample uitvoeren. Ieder VOIP telefoontoestel werkt op deze manier om de audio stream tussen beide partijen the synchroniseren.

In dat geval zou ik er helemaal niets aan doen. De klokken synchroniseren is compleet overbodig.

--
Failure does not prove something is impossible, failure simply 
indicates you are not using the right tools... 
nico@nctdevpuntnl (punt=.) 
--------------------------------------------------------------
Reply to
Nico Coesel

Ik heb daarover gelezen en toen kwam ik op bovenstaande. Dwz er staan algorithmes om de samplerate door een integer te delen en met een integer te vermenigvuldigen en als je een fractie wilt stellen ze "doe het eerst maal zoveel en dan gedeeld door zoveel". Ik had het idee dat als de bron en doel zo dicht bij elkaar liggen de tussen-snelheid enorm de hoogte in schiet.

Maar misschien zijn er ook andere algorithmen dan ik tot nu toe heb kunnen vinden.

Reply to
Rob

Het vermenigvuldigen/delen is de theoretische benadering. Door eerst te oversamplen en daarna samples weg te halen of te dupliceren kun je eenvoudig een zeer fijne verdeling halen.

--
Failure does not prove something is impossible, failure simply 
indicates you are not using the right tools... 
nico@nctdevpuntnl (punt=.) 
--------------------------------------------------------------
Reply to
Nico Coesel

Ter informatie: Guido is geen hobbyist, hij is een topspecialist. Maar hij legt de lat wel erg hoog als het over audio gaat.

Voor de eerste plasma TV heb ik eens een PLL gebouwd om van 31 kHz lijnfrekwentie naar 32 MHz pixelclock te gaan. De fasedetector was de PC2 van de 74HCT9046, dat is een hele goede maar ik verwacht niet dat je die nog ergens kunt kopen. De VCO oscillator van de 9046 is inderdaad bagger, dus die gebruikten we niet. De oscillator was een ring van 3x 74HCU04 inverters met capacitieve loads, de '04 gevoed door een spanning naar stroom omzetter (1 FET). De jitter was in de orde van een paar ns pk-pk na 32 usec, voor TV toepassingen meer dan voldoende. Daarbij was het vangbereik ook nog eens enorm, meer dan een factor 2. Afregelen was dus niet nodig. Het begrenzen van de frekwentie, om het plasma panel te beschermen, deden we vanuit een andere vaste kristalklok, met de logica in een MAX EPLD van Altera.

Noud B was mijn leermeester, je kent hem vast ook wel van SLE.

Zoiets heeft veel minder jitter maar ook bijna geen vangbereik, want de gain (spanning naar frekwentie) van zo'n kristaloscillator is inherent zeer laag. Plus dat het een nogal dure oscillator is. Jij haalt daarmee ps jitter, ja ? En voor de noodzaak (voor audio) baseer je je op een publikatie van John W ? Ik zal hem nog eens vragen hoe hij daar op kwam, ik schrijf nog regelmatig met hem. Hij is nog steeds een enorme kwaliteitsfreak, en TV goeroe.

Hij zei al dat dat niet zo heel kritisch was. Als het maar veel beter is dan de clock helemaal niet locken.

Misschien kun je eens iets vertellen over hoe je uit een S/PDIF signaal alleen de clock haalt en niet de data, voor je PLL ?

Groeten,

-- Jeroen

Reply to
Jeroen

Ja ik heb bij mijn zoektochten ook al geconstateerd dat audio freaks eisen aan de jitter stellen die ik niet rationeel kan onderbouwen.

Maar ik ben niet in de jitter geinteresseerd (als die "normaal" van spec is), maar in de frekwentiestabiliteit. En als ik toch bezig ben dan wil ik hem eigenlijk ook wel fase-gelocked hebben aan de 1PPS.

Is dat aan mij gericht? Ik heb geconstateerd dat bepaalde geluidskaarten de mogelijkheid hebben om als sampleclock een SPDIF input te kiezen in plaats van een vaste (door de kaart zelf gemaakte) frekwentie.

Die kaart heeft natuurlijk alles al aan boord om de sampleclock uit SPDIF te halen want dat gebruikt hij ook als je die input wilt "opnemen".

Reply to
Rob

Dat is hetzelfde, want fase is de integraal van de frekwentie.

Aan Guido.

Dat is niet kritisch voor jitter, dat is alleen data transport. Het wordt pas kritisch als je er live naar gaat luisteren.

Guido heeft zich bezig gehouden met een externe D/A converter. Die moet aan de S/PDIF gelockt zijn omdat de het CD loopwerk zijn eigen snelheid bepaalt. Maar een gereconstrueerde klok is minder stabiel dan de originele kwartsklok van de CD speler. Dus als je er op vooruit wil gaan (en dat wil je), dan moet je een PLL bedenken die net zo stabiel is als een kwartsklok. Guido kan dat dus, en dan ook nog eens voor een hele redelijke prijs in de markt zetten, vergeleken met andere audiofiele produkten. Ga maar eens kijken op tentlabs.com, is best leuk. Van hobbyist tot topspecialist, het kan verkeren.

Zoals ik al schreef: ik zou eerst een ringoscillator als VCO (CCO) proberen, daar kom je best ver mee. Vroeger heb ik eens video processing bedacht die helemaal op een vrijlopende (kwarts-)klok loopt en toch kan synchroniseren aan zijn omgeving. Dan heb je variabele sample rate conversie nodig, en een helemaal digitale PLL (een simulatie van een PLL). Daaarmee wordt alles mathematisch voorspelbaar, dat heeft voor een IC maker ook zo z'n voordelen. Ik had genoeg uitdagingen gezien met analoge PLLs dat ik vond dat het eens anders moest. Een FPGA programmeren is ook wel eens leuk.

-- Jeroen

Reply to
Jeroen

Alleen in theorie. Samples die niet gebruikt worden hoef je ook niet uit te rekenen.

Sample-rate conversie doe je bijna altijd met "polyphase filters", d.w.z. een set van P (low-pass) filters die allemaal een iets andere phase delay hebben. Voor video misschien P=64 fasen, voor audio misschien wel duizenden. Op die manier kun je heel goed een signaal interpoleren tussen 2 oorspronkelijke sample momenten. Voor elk output sample kies je 1 van de P fasen van het filter, en sluit de T taps van het FIR filter aan op T input samples. De nauwkeurigheid van de interpolatie is dan 1/P sample, bij voorkeur iets in de orde van nanoseconden. Het klinkt moeilijker dan het is.

Voor mij is dit de bijbel op het gebied van SRC:

formatting link
Helaas kan ik nu nergens een link vinden waar je de pdf van deze PhD thesis kunt downloaden. Ik weet toch zeker dat ik er een heb, naast het papieren boek ergens godweetwaar.

Ad kan mooi uitleggen hoe je een perfekt en toch goedkoop filter voor audio kunt maken als een cascade van een duur IIR filter met maar 2 fasen, dan een goedkoper FIR filter met 4 fasen of zo, en tenslotte een lineaire interpolator met zoveel fasen als je maar wil.

Als je wil up-samplen, bijv. van 44.1 kHz naar 192 kHz, of van SDTV naar HDTV, dan maak je stapjes kleiner dan 1 input sample. Als je wil down-samplen dan moet je stappen groter dan 1 input sample maken. Daarbij sla je informatie over, en dat leidt vaak tot aliasing artefacten. Het leuke is dat je dit kunt vermijden door de filterstruktuur te transponeren, achterstevoren te zetten. Daarbij beeld je elk input sample af op T output samples, en integreer je de bijdrages van elk input sample tot het output sample niet meer kan veranderen. Dit maakt dat de bandbreedte van het polyphase filter automatisch afneemt evenredig met de output sample rate. Ad beschrijft dit ook, al mag ik graag denken dat ik het zelf heb bedacht, maar dat is helemaal niet zeker.

Ik wil maar zeggen: je kunt met sample-rate conversie heel veel doen, maar je moet wel de wiskunde die erachter zit snappen.

-- Jeroen

Reply to
Jeroen

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.