MATLAB Answers


Adding and generation of poisson noise to a time varying signal

Asked by Arsalan
on 5 Jan 2013
Latest activity Answered by Avi Silbiger
on 3 Dec 2014


My questions is to do with addition of noise to a predefined signal.

Assume I have predefined a time_varying signal in array A. Now I like to add noise to this signal, I know that my noise follows a poisson process or is poisson in nature, I also know that my noise has a rms value of X.

I just like to know how I can generate and noise this type of noise.

Thanks, Arsalan.



No products are associated with this question.

3 Answers

Answer by Image Analyst
on 5 Jan 2013
 Accepted answer

What are the values of your signal? Do you know that with values of more than about 10, Poisson noise is well approximated by Gaussian noise? See Wikipedia. So you might be able to use Gaussian noise. If you think that it has the shape of Poisson noise, but the values are a lot more than 10, then you could use log-normal noise.


You can think of the time varying signal as the electron stream generated from the photodiode in response to a time_varying optical signal, lets just assume that optical time_varying signal is sine wave modulated on an optical carrier which is at a very high frequency.

The simplified conversion between light to a photo current can be presented as


where eta, q, h, f are only constants relating to the photodiode and the incoming light stream. II is an array containing the time varying optical signal, and It is the resulting photocurrent.

I can find my RMS shot noise via


where ItDC is the mean value of the generated photocurrent.

but now I need to generate an array based on "SHOT" which will represent my shot noise which subsequently will be added to my photocurrent "It". to give my photocurrent+shot noise

Well what about the poissrnd function that you said you were going to try (I don't have that)? And you may have a current that is some number of microamps, but an incoming photon gives just a pulse, doesn't it? It doesn't give a continuous stream of current. So you have to model that as a stochastic process. Sure it's a burst of current but it occurs in bursts and each burst is a stochastic event, so you can use rand() or poissrnd (I guess) for determining when the next pulse comes along. That would be a Poisson stochastic process. Now it's been almost 30 years since I took classes in detectors, reasons for their noise, and stochastic optical processes (from Eustace Dereniak, I'm sure you've heard of him), but I thought shot noise was an inherent characteristic of a sparse stream of photons, not something that you could add onto it. But you'd best ask your Professor.

Thanks Image Analyst, I'll have a better look at the problem.


Answer by Matt J
on 5 Jan 2013

If you have the Statistics Toolbox, use POISSRND

  1 Comment

Thanks, I have that toolbox, and I shall used it

Answer by Avi Silbiger
on 3 Dec 2014

I'm sure you already resolved the issue, but here is a short piece of code that simulates shot noise, for those who might need it in the future.


Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

MATLAB Academy

New to MATLAB?

Learn MATLAB today!