Forum: FPGA, VHDL & Co. fpga-implementierung eines digitalfilter


von salas (Gast)


Lesenswert?

schön guten tag zusammen,ich begrüsse euch ...,
 Ich hätte gern die Implementierung(digitalfiltern FIR und IIR) von
Algorithmen der Digitalen Signalverarbeitung demonstrieren und
untersuchen und das wird durch die anwendung verschiedener Zahlen-und
Arithmetiksysteme.

das ist ja mein problem und hätte gern fragen , wie soll ich mal
anfangen und welche Schritte soll ich folgen.????

ich bedanke mich im voraus.

von TheMason (Gast)


Lesenswert?

hallo salas,

ganz so einfach ist es nicht. es gibt ja bei filtern unterschiedliche
implementierungsformen (abhängig von der mathematik die dahinter
steckt).
für welchen bereich soll es denn gelten (audio/hf/regelung usw.) ?

ich selbst arbeite an einem audio-prozessor (gibt es auch ein projekt
zu .. siehe http://www.mikrocontroller.net/articles/Audio-Projekt )
und benutze iir-filter mit der kanonischen form (war es glaube ich, bin
mir aber nicht so sicher, da ich in mathe nicht so fit bin).
ein buchtip vielleicht zum einstieg : digitale signalverarbeitung von
udo zölzer. ist speziell für den audio-bereich und enthält
einigermassen anschaulich grundlagen. (und formeln zur berechnung von
filterkoeffizienten)

gruß
rene

von T.M. (Gast)


Lesenswert?

Das Buch "DSP with Field progr. Gate Arrays" ist auch sehr zu
empfehlen zu diesem Thema. Da stehen konkrete Realisierungen von FIR-
und IIR-Filtern in VHDL und Verilog drin. Aber natürlich muss man sich
die Filterkoeffizienten erstmal vorab berechnen, mit Matlab zB.

von T.M. (Gast)


Lesenswert?

Hier mal aus dem Buch den VHDL-Code eines FIR-Filters mit den 4
Koeffizienten: -1, 3.75, 3.75, -1
1
PACKAGE eight_bit_int IS    -- User defined types
2
  SUBTYPE BYTE IS INTEGER RANGE -128 TO 127;
3
  TYPE ARRAY_BYTE IS ARRAY (0 TO 3) OF BYTE;
4
END eight_bit_int;
5
6
LIBRARY work;
7
USE work.eight_bit_int.ALL;
8
9
LIBRARY ieee;
10
USE ieee.std_logic_1164.ALL;
11
USE ieee.std_logic_arith.ALL;
12
13
ENTITY fir_srg IS                         ------> Interface
14
  PORT (clk   :   IN  STD_LOGIC;
15
        x     :   IN  BYTE;
16
        y     :   OUT BYTE);
17
END fir_srg;
18
19
ARCHITECTURE flex OF fir_srg IS
20
21
  SIGNAL tap : ARRAY_BYTE;   -- Tapped delay line of bytes
22
  
23
BEGIN
24
25
  p1: PROCESS             ------> Behavioral Style 
26
  BEGIN
27
    WAIT UNTIL clk = '1';
28
  -- Compute output y with the filter coefficients weight.
29
  -- The coefficients are [-1  3.75  3.75  -1]. 
30
  -- Multiplication and division for Altera VHDL are only
31
  -- allowed for powers of two! 
32
    y <= 2 * tap(1) + tap(1) + tap(1) / 2 + tap(1) / 4 
33
         + 2 * tap(2) + tap(2) + tap(2) / 2 + tap(2) / 4 
34
         - tap(3) - tap(0);
35
    FOR I IN 3 DOWNTO 1 LOOP 
36
      tap(I) <= tap(I-1); -- Tapped delay line: shift one
37
    END LOOP;
38
    tap(0) <= x;                -- Input in register 0
39
  END PROCESS;
40
41
END flex;
Vielleicht nützt dir das was, kannst dich ja mal versuchen
reinzufuchsen. Mich brauchst du zu dem Code nicht zu fragen, hab mich
(noch) nicht gross mit dem Buch beschäftigt...

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.