I have a question regarding basic signal processing, which I have to start using since I have started studying fault isolation. The thing is, I have three computed signals, which are gathered in the matrix $\mathbf X \in \Re^{p \times n}$, where $p$ is the signal length and $n=3$ is the number of signals. The three signals should emulate some real measurements in different sensors, for instance,

$$\mathbf x_i = A_i \sin(\omega t), \quad \text{with } A_1 \neq A_2 \neq A_3.$$

Now, I want to add some white Gaussian noise to these signals, but then I started thinking; how can I do this somewhat "realistically" when the three signals have different amplitudes? My basic understanding is that the amplitude of the noise in real measurements is independent of the amplitudes of the signals, hence implying that my signal-to-noise ratio will not be the same for the three signals (since the variance of the noise is taken as constant). Is this correct?

What I have done at the moment is simply to form $\mathbf Y = \text{vec}\left(\mathbf X\right) \in \Re^{pn \times 1}$ (with $\text{vec}$ being the vectorization operator), calculated the variance of $\mathbf Y$, and then added noise as a fraction of this variance (with zero mean). The reason for this is that I often come across the phrase "we added this percentage of noise to the signals", and I don't suspect that one adds this to each signal seperately according to the variance of each signal.

Sorry for the long post. I hope you get my point and can answer my questions.


  • $\begingroup$ Noise and signal are usually considered uncorrelated, so if the three signals have different powers, then, yes, they will have different SNRs. Whether you add the same noise instance to each signal depends on whether the signals are in the same channel/sensor/whatever. If your model is that each signal is sensed by the same receiver/recorder/sensor/whatever and are effectively summed together at that point, then you would add the same noise instance to their sum. If they are recorded by different sensors, then you would add unique instantiations of the noise to each. $\endgroup$ – AnonSubmitter85 Mar 25 '16 at 19:08
  • $\begingroup$ Is it just white noise or white Gaussian noise ? $\endgroup$ – Gilles Mar 25 '16 at 19:23
  • $\begingroup$ # Gilles: It's white Gaussian noise. $\endgroup$ – user20228 Mar 25 '16 at 19:49
  • $\begingroup$ # AnonSubmitter85: I imagine that it's three different sensors. So, in accordance to what you wrote, it would mean adding a unique noise sequence to each signal. But would you compute each noise sequence based on the particular signal variance and in this way get a fixed SNR for all signals? This doesn't seem realistic to me (that the noise sequence amplitudes increase as the signal amplitude increases)? $\endgroup$ – user20228 Mar 25 '16 at 19:54
  • $\begingroup$ @user20228 You would only base the noise power on the signal power if you are going for constant SNR in each sensor. I don't know exactly what you are going for, so I can't say if that is right. If signal power is an important part of what you are doing and it can vary, then I'd doubt that constant SNR is what you want. If, for instance, you are trying to detect something, than your performance will likely be a function of SNR and so that is something you would want to allow to change. $\endgroup$ – AnonSubmitter85 Mar 25 '16 at 20:20

I am assuming we're talking about discrete measurements here, i.e. $n$ instead of $t$ with $n = 0, \cdots, p-1$. If all you want is adding some realistic noise to your three-component matrix $\mathbf X$, you could do this in the case of white Gaussian noise $\mathbf W_{p\times n}$. Using the subscript $\sigma$ for noisy data:

  1. Same noise in all three channels: \begin{align} \mathbf X_\sigma &= \mathbf X + \mathbf W\tag{$p\times n$ matrices}\\ \Rightarrow\mathbf x_{i\sigma} &= \mathbf x_i + \mathbf w\tag{$p\times 1$ vectors}\\ \Rightarrow x_{i\sigma}[n] &= A_i \sin(\omega n)+ w[n] \quad\text{ with } w \sim \mathcal N\left(0, \sigma^2\right) \end{align}

    Even though you're adding the same noise in all three channels, i.e. $w_1=w_2=w_3=w$, the SNR of the channels will be different (directly proportional the amplitudes $A_i$) unless the three different sensors are capturing exactly identical (real copies) measurements.

  2. Different noise values in the three channels: \begin{align} \mathbf X_\sigma &= \mathbf X + \mathbf W\tag{$p\times n$ matrices}\\ \Rightarrow\mathbf x_{i\sigma} &= \mathbf x_i + \mathbf w_i\tag{$p\times 1$ vectors}\\ \Rightarrow x_{i\sigma}[n] &= A_i \sin(\omega n)+ w_i[n] \quad\text{ with } w_i \sim \mathcal N\left(0, \sigma_i^2\right) \end{align} Your SNR of each channel $i$ will be different as the value will be directly proportional to the amplitudes $A_i$ and inversely proportional the channel's variance $\sigma_i^2$.

  3. If you were having one physical quantity in all three signals (a three-axis sensor for instance), you could compute the norm for each value of $n$ and work with one signal measurement, the magnitude of size $p\times 1$. Like: $$\left|x[n]\right|=\sqrt{\sum_{i=1}^3 x_i^2[n]}$$ Then you would be looking at one $p\times 1$ signal component versus one $p\times 1$ noise component.

  • $\begingroup$ Thank you very much for the extensive answer. I will go for model 1, as I expect that this will be most realistic in the context of using the same sensor type. $\endgroup$ – user20228 Mar 25 '16 at 21:38
  • $\begingroup$ @user20228 You're welcome. :) $\endgroup$ – Gilles Mar 25 '16 at 22:48

I would do it this way in Matlab:


The reason I put (Ai^2)/2 is because you want to put there your signal power. The noise is just a random number with the same length as your signal (p, in your case).

  • $\begingroup$ Thank you for the answer. Just to make sure; when you write EbNo, you mean normalized SNR, right? If so, stanDevNoise increases as Ai increases, thus the variance of noise_i increases as i increases, right? Is this really realistic; that he noise sequence amplitudes increase as the signal amplitude increases? $\endgroup$ – user20228 Mar 25 '16 at 20:02
  • $\begingroup$ EbNo is the energy per bit over white noise density, you can either SNR or EbNo. The standDevNoise will increase proportionally to Ai but the noise itself, you can't really tell if it's going to increase or decrease, because they are random numbers with random amplitudes. $\endgroup$ – Behind The Sciences Mar 26 '16 at 7:30

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.