Alguém pode me ajudar a entender este código para filtrar halfband?

F

faye_hongdou

Guest
Código:halfband módulo (clk, din dout);

clk de entrada;

input [11:0] din;

output [12:0] dout;reg [12:0] dout;

reg [11:0] d_m4, d_m3, d_m2, d_m1, d_0, d_1, d_2, d_3, D_4, d_5;

meia reg;wire [12:0] R5, R3, R1;

wire [11:0] r0;

wire [22:0] RR5, RR3, RR1, rr0;

wire [22:0] resultado;always @ (clk posedge)

meia <=!
meia;always @ (clk posedge)

if (meia)

dout <= resultado [22: 10];always @ (clk posedge)

começo

d_m4 <= din;

d_m3 <= d_m4;

d_m2 <= d_m3;

d_m1 <= d_m2;

d_0 <= d_m1;

d_1 <= d_0;

d_2 <= d_1;

d_3 <= d_2;

D_4 <= d_3;

d_5 <= D_4;

fimatribuir r5 = (d_5 [11], d_5 din) ([11], din);

atribuir r3 = (d_3 [11], d_3) (d_m3 [11], d_m3);

atribuir r1 = (d_1 [11], d_1) (d_m1 [11], d_m1);

atribuir r0 = (d_0);/ / Expandir os dados para dados de 24 bits.

atribuir RR5 = r5 [12]?
(11'b1, R5): (11'b0, R5);

atribuir RR3 = r3 [12]?
(11'b1, R3): (11'b0, R3);

atribuir RR1 = r1 [12]?
(11'b1, r1): (11'b0, r1);

atribuir rr0 = r0 [11]?
(12'b1, r0): (12'b0, r0);wire [22:0] result1 = r5 - (R3 <<4);

wire [22:0] result2 = result1 (r1 <<1);

wire [22:0] result2 result3 = (result2 <<2);wire [22:0] result4 = R1 (RR1 <<6);

wire [22:0] result5 = (R1 <<9) (r0 <<10);

wire [22:0] result6 = result4 result5;atribuir resultado = result3 result6;endmodule

 
r0 é produzido diretamente da d0 que é 12 bits enquanto o outro (r1.. r5) são produzidos pela adição de sinais, para que sejam prorrogados por um pouco para evitar transbordamento.
O cálculo dos resultados são os seguintes:
result1 = r5 - 16 * r3
result2 = result1 2 * r1
result3 = result2 4 * result2
result4 = r1 64 * RR1
result5 = 512 * r1 1024 * r0

Basicamente, quando houver deslocamento para a direita (<<) significa multiplicação.Se <<1 significa que a multiplicação por 2, <<2 por 4, <<3por 8 e assim por diante.Em geral <<n é a multiplicação por 2 elevado à potência de n.
Quando o deslocamento para a esquerda é a divisão.
Espero que agora o código é mais claro para você

 
Obrigado.
Eu entendo que <<n significa multiplicar por 2 ^ n.

O código é realizar um filtro de dizimação halfband.Eu só sei que os coeficientes do filtro são, em alternativa zero, e simetria.E não há qualquer discription outras modalidades.
Meu enigma é como eu posso conseguir os coeficientes?Em outras palavras, como posso saber o que eu deveria escrever é "result1 = r5 - 16 * R3", mas "não result1 = r5 4 * r3", ou equações anyother?O que é o guia behide isso.

 

Welcome to EDABoard.com

Sponsor

Back
Top