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
Signal Processing Stack Exchange is a question and answer site for practitioners of the art and science of signal, image and video processing. It only takes a minute to sign up.
Sign up to join this communityTo 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:
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.