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
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
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
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
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