Forum: FPGA, VHDL & Co. Tiefpassfilter für QAM in VHDL -> Wie funktioniert dieser Code?


von Flo (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe folgendes Problem.
Ich will eine QAM Modulation in VHDL realisieren. Der Modulator steht.
Der Demodulator auch. Bis auf die beiden Tiefpassfilter der beiden 
demodulierten I und Q Signale.

Ich habe im Netz einen Code für QAM Modulation gefunden, der einen 
anscheinend sehr einfachen TP enthält, aber ich weis nicht was der Code 
macht. Ich hoffe Ihr könnt mir helfen. Hier ein Auszug:
1
entity iq_demod is
2
3
  generic (   
4
    filter_shift  : natural  := 4;  -- left shift to scale output filter
5
    filter_rate   : natural  := 8   -- multiplier, filter A = rate/2**shift
6
    -- ...
7
  );
8
9
  port ( 
10
    -- ...
11
  );
12
13
end;
14
15
16
architecture RTL of iq_demod is    
17
  signal filterI, filterQ : signed(baseband_bits-1 downto 0);
18
  -- ...
19
begin
20
21
     if Rst = '1' then
22
      filterI <= (others => '0');
23
      filterq <= (others => '0');
24
      sumI    := (others => '0');
25
      sumQ    := (others => '0');
26
    elsif rising_edge(Clk) then
27
      if dump = '1' then -- Dump integrator, generate output
28
        -- Output lowpass
29
        filterI <= resize(
30
                     filterI  + ((signed'((sumI - filterI) * filter_rate)) sra filter_shift),
31
                     filterI'length);
32
        filterQ <= resize(
33
                     filterQ  + ((signed'((sumQ - filterQ) * filter_rate)) sra filter_shift),
34
                     filterQ'length);
35
        -- dump the integrator
36
        sumI := (others => '0');
37
        sumQ := (others => '0');
38
      end if;
39
      -- Integrate (or initialise, if it's the dump cycle)
40
      sumI := sumI + prodI;
41
      sumQ := sumQ + prodQ;
42
    end if;
43
44
  end process;
45
end;

Um den Code kurz zu halten wurde der Rest entfernt. Im Anhang sind aber 
der Demod + Testbench drin.

So funktionierts:
sumI und sumQ summieren die demodulierten(!) Amplitudenwerte (prodI und 
prodQ) des I und Q Kanals während einer Periode auf. dump ist dann ein 
Hilfssignal, welches nach jeder Periode sumI und sumQ zurücksetzt.

filterI und filterQ sind dann der Ausgang des TP-Filters. Eben diesen 
verstehe ich nicht. (Anm. sra ist analog zu shift_right).

Ich hoffe ihr könnt mir ein paar Tips geben

von Dr.Schmock (Gast)


Lesenswert?

Die Aufgabe errinnert mich an eine Praktikum-Ausschreibung von EADS. ;)

von Flo (Gast)


Lesenswert?

Projekt von der FH ;)

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.