Forum: FPGA, VHDL & Co. Mit welcher Frequenz muss jetzt der Muxer laufen?


von Raptor23 (Gast)


Lesenswert?

Hallo Leute,

ich habe ein großes Verständnisproblem und hoffe Ihr könnt mir 
weiterhelfen.

Was soll Passieren:

Ein Audio CODEC tastet mit 96Khz im Sprachband ab.
Die Abtastfrequenz soll verdoppelt  werden, also auf dem FPGA 
Interpolieren.
Ich möchte mit einem Muxer mit doppeltem Takt immer eine Null dazwischen 
einfügen.

Der CODEC liefert Seriell(I2S) 16 Bit für den rechten Kanal danach 16 
Bit für den linken.

BCLK  ist 12,5 Mhz.
Also ist für den Rechten Kanal alle    2,56 µs   ein neuer Wert parallel 
abzugreifen.
Das ist eine Frequenz von 390.625Khz.

Mein Problem:
Vor der Interpolation 1 x Fs, danach 2 x Fs.
Die Daten kommen  mit 390Khz.
Meine Abtastfrequenz ist doch 96 Khz.

Mit welcher Frequenz muss jetzt der Muxer laufen?
Wo sind den  96Khz in den 390Khz versteckt? 

Wenn ich mir das Signal nach der Interpolation auf dem Oszi anschaue , 
hat es immer noch die 96 Khz?
Ob mit Fs = 390Khz  oder 96 Khz beides liefert mit keine
Abtastfrequenzerhöhung.
Ich verstehe es nicht?
Ich Bitte um Eure Hilfe.

DANKE

Gruß

Raptor 23

von Raptor23 (Gast)


Angehängte Dateien:

Lesenswert?

Kurzer Nachtrag.

Bei dem CODEC handelt es sich um den tlv320aic23b.
Das Datenblatt ist im Anhang zu finden.

Ich Danke

Raptor23

von Thomas R. (Firma: abaxor engineering) (abaxor)


Lesenswert?

Hallo,

im i2s-Mode (Abschnitt 3.3.1.3 I2S Mode) werden nach dem LSB noch 
Füllbits eingefügt. Der Codec kann nur 96 kHz, ich weiß nicht wie du auf 
390.625Khz.
kommst.

Du müsstest etwas mehr über dein System verraten. Z.B. wo gehen die 
interpolierten Daten hin?

Allein durch einfügen von Nullen erhälst du keine Interpolation, dazu 
brauchst du noch ein entsprechendes Filter.

Tom

von Raptor23 (Gast)


Lesenswert?

Hallo Tom,


nach 3 Stunden Schlaf sehe ich erst, was ich geschrieben habe.

Oh, Sorry, da ist nein Fehler drin.

Ich benutzte den 3.3.1.2 Left-Justified Mode

Das LRCOUT  schalte ich direkt nach der fallenden Flanke des LSB.
Also genau wenn 16 Bit seriell eingelesen sind.

Wie ich auf die 390.625Khz komme:

Deine Frage, nach der Frequenz, klingt für mich schon gut.

Mein Gedanke war:

BCLK
Die Bits lese ich seriell in zwei 16  Bit Register ein:

SIGNAL left,right  : STD_LOGIC_VECTOR (15 downto 0);

Also wird zuerst left gefüllt.
Mit fallender Flanke von LRCOUT , das right Register.

Dann hab ich mir gedacht .
Das Register  left ist nach 16 Takten (12.5Mhz) gefüllt, der Wert ist 
jetzt Parallel abrufbereit.
Genau 16 Takte lang . In der Zeit wird das right  Register gefüllt, 
danach wieder das left Register.
Also dachte ich, der 16 Bit Wert in den Registern ist alle 32 Takte neu.
12.5 Mhz/ 32 = 390.625 Khz.

Du müsstest etwas mehr über dein System verraten. Z.B. wo gehen die
interpolierten Daten hin?

Allein durch einfügen von Nullen erhälst du keine Interpolation, dazu
brauchst du noch ein entsprechendes Filter.

--------------------------------------------------------
Du hast recht, nach der Interpolation kommt ein Halbbandfilter.
Sorry , hab ich vergessen zu schreiben .


Das ganze soll dann x mal durchgeführt werden, um das Signal  über 
Antenne ausgeben zu können.

VIELEN DANK
GRUSS

RAPTOR23

von Thomas R. (Firma: abaxor engineering) (abaxor)


Lesenswert?

Raptor23 schrieb:
> Hallo Tom,
>
>
> nach 3 Stunden Schlaf sehe ich erst, was ich geschrieben habe.
>
> Oh, Sorry, da ist nein Fehler drin.
>
> Ich benutzte den 3.3.1.2 Left-Justified Mode
>
> Das LRCOUT  schalte ich direkt nach der fallenden Flanke des LSB.
> Also genau wenn 16 Bit seriell eingelesen sind.

Laut Datenblatt muss die Periodendauer von LRCOUT 1/fs sein, also 130 
Takte bei BCLK = 12.5 MHz. Oder sehe ich das falsch. Auch in diesem Mode 
gibt es Füllbits.

> Dann hab ich mir gedacht .
> Das Register  left ist nach 16 Takten (12.5Mhz) gefüllt, der Wert ist
> jetzt Parallel abrufbereit.
> Genau 16 Takte lang . In der Zeit wird das right  Register gefüllt,
> danach wieder das left Register.
> Also dachte ich, der 16 Bit Wert in den Registern ist alle 32 Takte neu.
> 12.5 Mhz/ 32 = 390.625 Khz.

Der Codec kann aber nur 96 kHz. Ich denke, du schaltest LRCOUT zu oft 
um.


>
> Du müsstest etwas mehr über dein System verraten. Z.B. wo gehen die
> interpolierten Daten hin?
>
> Allein durch einfügen von Nullen erhälst du keine Interpolation, dazu
> brauchst du noch ein entsprechendes Filter.
>
> --------------------------------------------------------
> Du hast recht, nach der Interpolation kommt ein Halbbandfilter.
> Sorry , hab ich vergessen zu schreiben .
>
>
> Das ganze soll dann x mal durchgeführt werden, um das Signal  über
> Antenne ausgeben zu können.

Was heißt x mal, x mal Upsampling, bis die Wortbreite bei 1 ist?

Oder, die Daten gehen nach dem Filter an einen DAC, Verstärker und dann 
zur Antenne?

Tom

von Raptor23 (Gast)


Lesenswert?

Hallo TOM,

Sorry dass Du mir alles aus der Nase ziehen musst.

Mit Deiner 2 ten Vermutung liegst Du richtig:
die Daten gehen nach dem Filter an einen DAC, Verstärker und dann
zur Antenne:

Neeiin, ich meine Ja.

Jetzt wird es Tag.

Ich habe mich so mit dem Thema verrückt gemacht, dass ich nicht mehr 
klar denken konnte.

Ich Danke für Deine Hilfe.


Viele Grüße


Raptor23

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.