How to use Histogram function in Matlab to plot the estimated PDF curve

1 Star2 Stars3 Stars4 Stars5 Stars (2 votes, average: 5.00 out of 5)

Generation of random variables with required probability distribution characteristic is of paramount importance in simulating a communication system. Here, I will demonstrate how we can generate a simple random variable, estimate & plot the probability density function (PDF) from the generated data and then match it with the intended theoretical PDF.

More such simple examples available in the book : Digital Modulations using Matlab : Build Simulation Models from Scratch – by Mathuranathan Viswanathan

Step 1: Create the random variable:

A survey of commonly used fundamental methods to generate a given random variable is given in [1]. For this demonstration, we will consider the normal random variable with the following parameters : (\mu) – mean and (\sigma) – standard deviation. First generate a vector of randomly distributed random numbers of sufficient length (say (100000)) with some valid values for (\mu) – mean and (\sigma) .  There are more than one way to generate this. Two of them are given below

  • Method 1: Using the in-built ‘random’ function (requires statistics toolbox)
  • Method 2: Using ‘randn’ function that generates normally distributed random numbers having \(\mu=0\) and \(sigma=1\).
  • Method 3: Box-Muller transformation [2] method using ‘rand’ function that generates uniformly distributed random numbers

Step 2: Plot the estimated histogram

Typically, if we have a vector of random numbers that is drawn from a distribution, we can estimate the PDF using the histogram tool.  Matlab supports two in-built functions to compute and plot histograms:

  • hist – introduced before R2006a
  • histogram – introduced in R2014b

Which one to use ? Matlab’s help page points that the hist function is not recommended for several reasons and the issue of inconsistency is one among them. The histogram function is the recommended function to use.

Estimate and plot the normalized histogram using the recommended ‘histogram’ function. And for verification, overlay the theoretical PDF for the intended distribution. When using the histogram function to plot the estimated PDF from the generated random data, use ‘pdf’ option for ‘Normalization’ option. Do not use the ‘probability’ option for ‘Normalization’ option, as it will not match the theoretical PDF curve.

Estimated PDF (using histogram function) and the theoretical PDF
Estimated PDF (using histogram function) and the theoretical PDF

However, if you do not have Matlab version that was released before R2014b, use the ‘hist’ function and get the histogram frequency counts ((f)) and the bin-centers ((x)). Using these data, normalize the frequency counts using the overall area under the histogram. Plot this normalized histogram and overlay the theoretical PDF for the chosen parameters.

Estimated PDF (using hist function) and the theoretical PDF
Estimated PDF (using hist function) and the theoretical PDF

Step 3: Theoretical PDF:

The given code snippets above,  already include the command to plot the theoretical PDF by using the ‘pdf’ function in Matlab. It you do not have access to this function, you could use the following equation for computing the theoretical PDF

$$ f_X(x) = \frac{1}{\sqrt{2 \pi \sigma^2}} exp \left[ -\frac{\left(x-\mu\right)^2}{2 \sigma^2} \right]

The code snippet for that purpose is given next.

Note:  The functions – ‘random’ and ‘pdf’ , requires statistics toolbox.


[1] John Mount, ‘Six Fundamental Methods to Generate a Random Variable’, January 20, 2012

[2] Thomas, D. B., Luk. W., Leong, P. H. W., and Villasenor, J. D. 2007. Gaussian random number generators. ACM Comput. Surv. 39, 4, Article 11 (October 2007), 38 pages DOI = 10.1145/1287620.1287622

[3] Matlab documentation for various functions used : random, pdf, histogram, hist

Recommended Books: