I am trying to generate a simple Gaussian pulse that has a 1 ns pulse width. However, when I generate the pulse, I realized that I did not meet the condition that calculates Rayleigh Bandwidth (1/Pulse width).My estimation is based on setting a threshold for the spectrum, which focuses on the higher magnitude values from the 0.65*maximum peak of the spectrum. After I measured the result from the data, I realized that there was approximately a 500MHz difference. Theoretically, bandwidth should be 1GHz, not 1.5GHz. Am I missing the point?

• that was fast :) Sep 20 at 15:50
• @PeterK. I posted an answer to the problem. Thank you for the suggestion :) Sep 21 at 20:25
• Excellent! Thank-you.
– Peter K.
Sep 21 at 20:59

Finally, I found the reason. The width of the pulse of the signal should be the same at both time and frequency. After entering the scale factor while generating the Gaussian signal, things changed. Now, the width of the signal is same at both time and frequency. Plus, I satisfied the result of the theoretical bandwidth calculation.

Here is the code:

clc
clear all
close all

SpeedofLight=3e8;  %speed of light at vacumm, m/s.
SamplingFrequency=32e9; % clock frequency, Hz.
tsampling=1/SamplingFrequency;  % time resolution;

% Pulse Parameters
Pulsewidth=1e-9;  % second
tlocal=-5e-9:tsampling:5e-9; % time vector
GaussAmplitude=(4*sqrt(pi))/Pulsewidth;  % scaling factor
GaussPulse=GaussAmplitude.*exp(-4*pi.*(tlocal/Pulsewidth).^2);  % generation of Gaussian signal.
RadarBandwidth=1/Pulsewidth; % Hz, theoretical bandwidth calculation
FFTSampleNumber=length(GaussPulse);  % FFT length
SpectrumGaussPulse= fftshift(fft(GaussPulse,FFTSampleNumber));  % spectrum analysis of pulse
SpectrumGaussPulse=(SpectrumGaussPulse.*conj(SpectrumGaussPulse))/(FFTSampleNumber*FFTSampleNumber); % power scaling
fflocal=-SamplingFrequency/2:SamplingFrequency/length(SpectrumGaussPulse):SamplingFrequency/2-SamplingFrequency/length(SpectrumGaussPulse); %frequency vector
LocationRayleighFrequencyIndex=find(abs(SpectrumGaussPulse)>=abs( 0.65*max(SpectrumGaussPulse)) ); % extraction of values for Rayleigh bandwidth calculation in frequency.
LocationRayleighFrequency=(LocationRayleighFrequencyIndex); % extraction of values for Rayleigh bandwidth calculation in frequency.
EstimatedBandwidth=abs(fflocal( LocationRayleighFrequencyIndex(1)))+abs(fflocal(LocationRayleighFrequencyIndex(end))) %estimated Rayleigh bandwdith.

LocationRayleighTimeIndex=find(abs(GaussPulse)>=abs( 0.65*max(GaussPulse)) ); %  extraction of values for Rayleigh bandwidth calculation in time.
LocationRayleighTime=tlocal(LocationRayleighTimeIndex);  %  extraction of values for Rayleigh bandwidth calculation in time.

Errror= length(LocationRayleighTimeIndex)-length((LocationRayleighFrequencyIndex));  % error


Here is the result: