Member
Beiträge: 3.915
Themen: 24
Registriert: Sep 2009
Ein paar Beweisfotos:
Aufbau:
Einmal ohne Signal. Damit man sieht, dass der "Lock"-Zustand erreicht wird, habe ich auf das entsprechende Signal getriggert, die Aquisition laufen lassen und dann erst die USB-Soundkarte eingesteckt. Nach einer gewissen Zeit (wenn einmal alle 3 Präambeln richtig erkannt wurden) wird "lock" erreicht. Die Präambeln habe ich markiert, wir sehen 3-1-1-3, 3-2-1-2, 3-3-1-1 und befinden uns also am Anfang eines Blocks:
Dann habe ich Youtube gestartet und von Hand getriggert (-> "lock" ändert sich ja nicht mehr, solange nichts gravierendes schiefgeht). Schön zu sehen ist, dass es sich um 16bit-Audio handelt - die untersten 8Bit sind nämlich einfach immer 0:
Pffffffffft. "Da entwich das Vakuum" - Heinrich Physik, 1857.
Member
Beiträge: 3.915
Themen: 24
Registriert: Sep 2009
Oh, da fällt mir auf - es werden nur 23 statt 24 Bit decodiert
Muss ich kurz ändern
Es muss heißen:
Code:
when check_data =>
if cnt2 = [u][b]24[/b][/u] then
...
Pffffffffft. "Da entwich das Vakuum" - Heinrich Physik, 1857.
Member
Beiträge: 3.915
Themen: 24
Registriert: Sep 2009
Also jetzt der korrekte Funktionsbeweis:
Nach der Präambel für den rechten Kanal kommen zunächst 8 Nullen, dann 16 Datenbits. Die decodierten Bits werden in das 24-Bit Schieberegister "data" geschoben:
Nach dem das 24te Bit drin ist, wird "data" auf den richtigen Ausgang geschrieben und wieder auf "0" gesetzt, da über dieses Register auch die Präambelerkennung läuft:
Pffffffffft. "Da entwich das Vakuum" - Heinrich Physik, 1857.
Administrator
Beiträge: 10.129
Themen: 165
Registriert: Jun 2005
;clapp
Don't worry about getting older. You're still gonna do dump stuff...only slower
Wirklich gut gemacht, woody!
Member
Beiträge: 3.915
Themen: 24
Registriert: Sep 2009
Und da ich ja eigentlich eine Pegelanzeige wollte, brauche ich jetzt noch einen Gleichrichter und einen verlustbehafteten Integrator.
ersteres ist recht trivial, zweiteres durch ein IIR-Filter zu realisieren.
Code:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.numeric_std.all;
entity RECTIFIER is
port
(
clk : in std_logic;
x : in unsigned(23 downto 0);
y : out unsigned(22 downto 0)
);
end RECTIFIER;
architecture BEHAV of RECTIFIER is
...begin
...process(clk)
......variable z : unsigned(23 downto 0);
......begin
......if rising_edge(clk) then
.........case x(23) is
.........when '0' =>
............--Negative Zahlen und 0
............y <= x(22 downto 0);
.........when '1' =>
............--Positive Zahlen
............z := not x;
............z(23) := '0';
............z := z + 1;
............y <= z(22 downto 0);
.........end case;
......end if;
...end process;
end BEHAV;
Pffffffffft. "Da entwich das Vakuum" - Heinrich Physik, 1857.
Member
Beiträge: 3.915
Themen: 24
Registriert: Sep 2009
Gleichrichter und SPDIF-Empfänger brauchen zusammen 231x LE und 1x HW-PLL.
D.h. ich habe noch 10k LEs, eine PLL und 423936bit Speicher übrig
Pffffffffft. "Da entwich das Vakuum" - Heinrich Physik, 1857.
Member
Beiträge: 3.915
Themen: 24
Registriert: Sep 2009
Haja da ist was dran
Pffffffffft. "Da entwich das Vakuum" - Heinrich Physik, 1857.
Member
Beiträge: 3.915
Themen: 24
Registriert: Sep 2009
Ein Blick ins
Datenblatt verrät:
Stellt man einen Ausgang auf 3,0V-LVTTL und 16mA, dann packt die Mühle 215MHz "Maximum Output Toggle Rate" - also kann ich mit meiner 200MHz-Clock auch einen Delta-Sigma-DAC zweiter Ordnung mit einem Ausgangspin laufen lassen.
Es funktioniert sehr gut - soviel sehe ich schon. Messungen folgen.
https://stromrichter.org/d-amp/content/i...SM_DAC.vhd
https://stromrichter.org/d-amp/content/i...DIF_RX.vhd
Pffffffffft. "Da entwich das Vakuum" - Heinrich Physik, 1857.
Member
Beiträge: 3.915
Themen: 24
Registriert: Sep 2009
Wer baut mir eine 200MHz Endstufe?
Pffffffffft. "Da entwich das Vakuum" - Heinrich Physik, 1857.
Administrator
Beiträge: 10.129
Themen: 165
Registriert: Jun 2005
ahem...
der "Dreh" besteht nicht darin, UHF in die Umgebung zu senden, sondern die gewünschte hohe Auflösung mit möglichst niedrigen HF-Frequenzanteilen zu erzeugen
+ bei 200MHz -> einfach R-C Filter direkt am pin
Don't worry about getting older. You're still gonna do dump stuff...only slower
Member
Beiträge: 3.915
Themen: 24
Registriert: Sep 2009
Naja sagen wir mal: Das Ziel ist es den Kompromiss aus Taktrate, Noise-Shaping-Aufwand und SNR zu optimieren.
Das mit dem RC habe ich natürlich genau so gemacht
Prinzipiell wollte ich wissen, ob der FPGA das auch wirklich mit den 200MHz am Ausgang packt - das scheint der Fall zu sein.
Pffffffffft. "Da entwich das Vakuum" - Heinrich Physik, 1857.
Member
Beiträge: 10.596
Themen: 355
Registriert: Jul 2012
Die Pegelanzeige würde ich gern sehen.
Eine FFT auf 128x64px Display mit SPDIF Eingänge wäre was.
Administrator
Beiträge: 10.129
Themen: 165
Registriert: Jun 2005
Don't worry about getting older. You're still gonna do dump stuff...only slower
Member
Beiträge: 10.596
Themen: 355
Registriert: Jul 2012
Member
Beiträge: 3.915
Themen: 24
Registriert: Sep 2009
Joa also mit den 8 Leds geht das schon ganz gut - mal sehen, was noch daraus wird
Pffffffffft. "Da entwich das Vakuum" - Heinrich Physik, 1857.
Treibt der FPGA die acht OnBoard-LEDs ganz direkt?
Member
Beiträge: 3.915
Themen: 24
Registriert: Sep 2009
Jep... hab mich auch schon gewundert, aber geht.
Pffffffffft. "Da entwich das Vakuum" - Heinrich Physik, 1857.
Member
Beiträge: 3.915
Themen: 24
Registriert: Sep 2009
Okay... eine Möglichkeit wäre eine Lautsprecherentzerrung (nein, ich will keinen Raum entzerren, das ist mir zu komple
.
-> Impulsantwort messen, mit "idealer" Impulsantwort vergleichen, Korrekturfunktion ermitteln, abtasten, als Koeffizienten für ein (langes) FIR-Filter verwenden.
bei 100ms und 96kHz wären das 9600 Koeffizienten. Zudem Bräuchte ich einen Samplerate-Konverter.
Klingt machbar.
Problem: Wie kann ich mir einen schalltoten Raum zum Messen bauen?
Pffffffffft. "Da entwich das Vakuum" - Heinrich Physik, 1857.