Tiefpassfilter für QAM in VHDL -> Wie funktioniert dieser Code?

Gast #1726892
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
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren