`include "constants.vams"
`include "disciplines.vams"
module V_SSB_ASK(dsb, lsb, usb);
output dsb, lsb, usb;
electrical dsb, lsb, usb;
parameter real fc = 1G from (0.0:inf);
parameter real fm = 1M from (0.0:inf);
parameter real Ac = 1.0 exclude 0;
parameter real init_phase = 0.0; //Initial phase for Sinusoid
parameter real ASK_Mod_Index=100.0; //from [10:100];
real wc, wm, wlsb, wusb;
real init_phase_rad, m;
real vc, vlsb, vusb;
analog begin
@(initial_step) begin
wc = `M_TWO_PI * fc;
wm = `M_TWO_PI * fm;
wlsb = wc - wm;
wusb = wc + wm;
m = ASK_Mod_Index / 100.0;
init_phase_rad = (`M_PI/180.0) * init_phase;
end //initial_step
//to ensure at least 25 points in an output cycle
$bound_step( (1/fc) / 25 );
vc = Ac * cos(wc * $abstime + init_phase_rad);
vlsb = m * (Ac/2) * cos(wlsb * $abstime + init_phase_rad);
vusb = m * (Ac/2) * cos(wusb * $abstime + init_phase_rad);
V(dsb) <+ vc + vlsb + vusb;
V(lsb) <+ vc + 2 * vlsb;
V(usb) <+ vc + 2 * vusb;
end //analog
endmodule