December 28, 2018
This utility helps to get a sense of what a simple signal would look like at various signal-to-noise ratio (SNR) levels.
SNR is defined as: \[ SNR = 10*log10((Power of Signal)/(Power of Noise)) \], in decibels (dB)
Typically, in communications settings, the noise being added is Gaussian distributed
The power of the sine wave \( Asin(wt) \) is \( A^2/2 \). To make things easy, just let \( A=1 \), then we say the power in our signal is \( Ps = 0.5 \).
If we add noise with equal power to the signal, then the SNR is a low value : \( SNR=10*log10(0.5/0.5) = 0 \).
If we add noise with much lower power than the signal, then the SNR will be a high value : \( SNR=10*log10(0.5/0.0005) = 30 \).
Pn <- c(5, 0.5, 0.05, 0.005, 0.0005, 0.00005)
Ps <- 0.5*rep(1,length(Pn))
snr <- 10*log10(Ps/Pn)
data <- data.frame(Ps=Ps, Pn=Pn, SNR=snr)
knitr::kable(data, caption = "Example SNR Values")
| Ps | Pn | SNR |
|---|---|---|
| 0.5 | 5e+00 | -10 |
| 0.5 | 5e-01 | 0 |
| 0.5 | 5e-02 | 10 |
| 0.5 | 5e-03 | 20 |
| 0.5 | 5e-04 | 30 |
| 0.5 | 5e-05 | 40 |
But what does this actually look like?
A very high SNR makes the signal look very clean:
A very low SNR makes the signal almost unrecognizable:
You can play around with visualizing different levels of SNR with the utility at this site