I know how to generate a Rayleigh fading channel but I have no clue how I can shape the Doppler spectrum to be Gaussian.

Any help will be really appreciated.

ps: I am coding on matlab


See section 2.4.3 of this reference https://web.stanford.edu/~dntse/Chapters_PDF/Fundamentals_Wireless_Communication_chapter2.pdf

If the doppler spectrum has to be gaussian, the auto-correlation of tap gains should be gaussian (which is correctly mentioned in other answer but I somehow felt more details were not captured). For a coherence time $T_c$, proportional to doppler spread $1/D_s$, will be expressed as smallest amount of $n$ for which your tap at $l$ will be significantly different from tap at $l+n$. So for example, if $n=5$, gain of taps from $0$ till $4$ will be having a guassian distribution, while the gain at tap $0$ will be uncorrelated with tap at $5$.

If you model your taps as Rayleigh fading channel, your PSD will not be Gaussian as given in eq 2.60 of the reference. You may need to generate your tap gains such that their auto-correlation function follows gaussian distribution.

Since you are using MATLAB

raychan = comm.RayleighChannel('DopplerSpectrum',{doppler('Gaussian')});

This makes sure that each of the channel taps gain auto-correlation (and PSD) follows Gaussian distribution.


To spread in frequency with a Gaussian shape is to convolve the frequency domain on the waveform with the Gaussian shape. To convolve in frequency is to multiply in time the respective Fourier Transforms. The Fourier Transform of a Gaussian is a Gaussian; so therefore you would multiply in time by a Gaussian window.

In MATLAB you can use the "gaussian" function to generator a Gaussian window of length $N$ with width parameter $d$ using the form (gaussian(N, d)) to get the following result:

$$g[n] = e^{-(d n)^2/2}$$

where $d$ is the inverse of the standard deviation in samples, and $n$ is the sample count over $N$ samples.

Using the general form from https://en.wikipedia.org/?title=Fourier_transform#Square-integrable_functions) for the Fourier Transform for the Gaussian function, repeated here:

$$\mathscr{F}\{e^{-\alpha x^2}\} = \frac{1}{\sqrt{2\alpha}}e^{-\omega^2/(4\alpha)}$$

The Fourier transform for $g[n]$ is:

$$G(\omega) = \frac{1}{d}e^{-(\omega/d)^2/2}$$

Which is also a Gaussian with the standard deviation in radian frequency given as $d$.

Since the Gaussian Doppler Spectrum has a Gaussian shaped power spectral density (for a single tone), to get a Gaussian shaped power spectral density the kernel (Fourier transform of the time domain window) would be the square root of $G(\omega)$ given above to be:

$$W(\omega) = \sqrt{G(\omega)} =\sqrt{\frac{1}{d}}e^{-(\omega/d)^2/4} $$

resulting in the time domain window: $$w(t) = \sqrt{2}e^{-(dn)^2}$$

Which is again a Gaussian function. Notice that starting with a desired standard deviation of a power spectral density as $d$, the square root of this is a Gaussian function with standard deviation $\sqrt{2}d$, and the inverse transform representing the desired time domain window is also a Gaussian function with standard deviation $1/(\sqrt{2}d)$.

Thus if we desire through windowing in the time domain a Gaussian spreading in the power spectral density with a standard deviation of $\sigma$, in units of normalized radian frequency, this can be generated from the MATLAB "gaussian" function given above using the relationship for the expression "gaussian(N,d)" with N samples:

$$d = \sqrt{2}\sigma $$

This will provide the Gaussian time domain window to multiplying with the time data. This will have the same effect as convolving all the frequency components with the desired Gaussian Doppler spread such that the power spectral density of this spread will have a standard deviation of $\sigma$ in normalized radian frequency ($f_s = 2\pi$).

Example: $f_s= 1e6$, $N = 1024$, desired Doppler spread $= 5e3$ Hz (standard deviation). In normalized radian frequency this would be $2\pi (5e3/1e6)$, and the time domain window would be generated using:

win = gaussian(1024, sqrt(2)*2*pi*5/1e3)

This would provide a simple way to create the effect of a Doppler spread channel through the process of time domain windowing. However, this results in a significant window loss since much of the signal is masked by the window in the time domain. Other statistical based approaches which would be more representative of a Doppler channel model typically used are described in this paper:


  • $\begingroup$ Hi @Dan_Boschen (for some reason I am not able to tag if there is space in the name), if you take the PSD of gaussian-windowed time data, wouldn't the PSD be different from Gaussian? The ACF of time data shows when the correlation goes to zero, thereby giving an idea of coherence time. We want ACF to be gaussian (because we want PSD to be gaussian). But since ACF is itself is $x(t).*w(t)$, the effect of gaussian window is disturbed by actual time data $x(t)$. Hence I doubt if PSD will be Guassian. $\endgroup$ – jithin Apr 7 '20 at 6:11
  • $\begingroup$ @jithin to tag you can use any part of my name or my name without the space and it will still tag me. The point is not to have a Gaussian PSD but to have the Doppler spread be Gaussian. The Doppler spread convolves with the original spectrum. This is the counterpart to Delay Spread but in the frequency domain; with delay spread you convolve the time domain waveform with the channel impulse response representing the delay spread. $\endgroup$ – Dan Boschen Apr 7 '20 at 10:35

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.