orciatichino
New Member
Offline
Posts: 1
Italy/Germany
|
Hello! I'm trying use VerilogAMS to filter a gaussian_distribution that represents a white noise source; to obtain a desired noise-shaping, I'm using a cascade of 5 stages of 1st order zero-pole filters.
I'm experiencing unconsistencies: the output amplitude, instead of being highly attenuated as required in a lowpass filtering, is several order of magnitudes greater than the input source.
Do anyone has suggestions or can identify mistakes?
I enclose an extract from my code.
parameter real fp1 = 7; parameter real fp2 = 1e3; parameter real fp3 = 4e3; parameter real fz3 = 60e3; parameter real NFB_db = -160;
real sp1, sp2, sp3, sz3, K; real unif_jitt, filtered_jitt1, filtered_jitt2, filtered_jitt3, filtered_jitt4, filtered_jitt_out, filtered_jitt_5; integer seed;
analog begin @(initial_step) begin //Initial step declarations sp1 = 2*`M_PI*fp1; sp2 = 2*`M_PI*fp2; sp3 = 2*`M_PI*fp3; sz3 = 2*`M_PI*fz3; K = sz3/sp3*100*100*pow(10, NFB_db/20);
seed = -561; end
unif_jitt = $rdist_normal(seed, 0, 1);
filtered_jitt1 = laplace_nd(unif_jitt, {1, 1/(10*sp1)}, {1, 1/(sp1)}); filtered_jitt2 = laplace_nd(filtered_jitt1, {1, 1/(10*sp1)}, {1, 1/(sp1)}); filtered_jitt3 = laplace_nd(filtered_jitt2, {1, 1/(10*sp2)}, {1, 1/(sp2)}); filtered_jitt4 = laplace_nd(filtered_jitt3, {1, 1/(10*sp2)}, {1, 1/(sp2)}); filtered_jitt_5 = laplace_nd(filtered_jitt4, {1, 1/(sz3)}, {1, 1/(sp3)}); filtered_jitt_out = filtered_jitt_5 * K; end
Thank you for the collaboration. Gianni
|