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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.