Manipulate[
(*Nasser M. Abbasi, June 20, 2014*)
(*the signal is cosine, and the SNR is given as ratio of variances*)
Module[{nPoints, x0, varx0, n, x, del},
nPoints = 128;
del = 4 Pi/(nPoints - 1);
x0 = Cos[Range[0, 4*Pi, del]];
varx0 = Variance[x0];
SeedRandom[0];
n = RandomVariate[NormalDistribution[0, 1], nPoints];
x = x0 + Sqrt[varx0/snr]*n;
Show[ListLinePlot[x0, PlotStyle -> Blue], ListLinePlot[x, PlotStyle -> Red], PlotRange -> {{0, Round[xmax/del]}, {-ymax, ymax}},
ImagePadding -> {{40, 15}, {40, 40}}, Frame -> True, ImageSize -> 400,
FrameLabel -> {{"y(t)", None}, {"time", "Adding noise to signal"}}, Axes -> None]
],
Grid[{
{"SNR",
Manipulator[Dynamic[snr, {snr = #} &], {1, 999, 1}, ImageSize -> Tiny],
Dynamic@Row[{NumberForm[snr, 3], " (", NumberForm[10. Log[10, snr], 4], " db)"}]
},
{"x max",
Manipulator[Dynamic[xmax, {xmax = #} &], {.1, 4.*Pi, .1}, ImageSize -> Tiny],
Dynamic[xmax]
},
{"y max",
Manipulator[Dynamic[ymax, {ymax = #} &], {.1, 1.4, .1}, ImageSize -> Tiny],
Dynamic[ymax]
}
}, Alignment -> Left
],
{{snr, 50}, None},
{{xmax, 4.*Pi}, None},
{{ymax, 1.4}, None}
]