Comparing SISO CDL channel results with NeoRadium

Using CDL-C profile, a delay spread of 10 ns, and UE velocity of 15 km/h:
% To save a new set of files, you need to set the saveFiles to true.
 
saveFiles = false;
outPath = fileparts(matlab.desktop.editor.getActiveFilename);
disp(outPath);
/Users/shahab/code/Fireball/OpenSource/onGithub/Tests/Wireless/NewProject/OnGitLab/neoradium/Playground/OtherExperiments/SISO/MatlabFiles
v = 15.0; % UE velocity in km/h
fc = 4e9; % carrier frequency in Hz
c = physconst('lightspeed'); % speed of light in m/s
fd = (v*1000/3600)/c*fc; % UE max Doppler frequency in Hz
SR = 30720000;
 
cdl = nrCDLChannel;
cdl.SampleRate = SR;
cdl.DelayProfile = 'CDL-C';
cdl.DelaySpread = 10e-9;
cdl.CarrierFrequency = fc;
cdl.MaximumDopplerShift = fd;
cdl.RandomStream = 'Global stream'; % Use this to be able to match the random numbers in python
cdl
cdl =
nrCDLChannel with properties: DelayProfile: 'CDL-C' AngleScaling: false DelaySpread: 1.0000e-08 CarrierFrequency: 4.0000e+09 MaximumDopplerShift: 55.5940 UTDirectionOfTravel: [2×1 double] SampleRate: 30720000 TransmitAntennaArray: [1×1 struct] TransmitArrayOrientation: [3×1 double] ReceiveAntennaArray: [1×1 struct] ReceiveArrayOrientation: [3×1 double] NormalizePathGains: true SampleDensity: 64 InitialTime: 0 RandomStream: 'Global stream' NormalizeChannelOutputs: true ChannelFiltering: true TransmitAndReceiveSwapped: false ChannelResponseOutput: 'path-gains'
Transmit and receive antenna arrays are 1 x 1 panel with vertical polarization. The receiver antenna also has some orientation to match NeoRadium's default.
cdl.TransmitAntennaArray.Size = [1 1 1 1 1]; % 1x1 antenna panel
cdl.TransmitAntennaArray.Element = '38.901'; % Make sure we are using 3GPP antennas. (Default is not 3GPP)
cdl.TransmitArrayOrientation = [0; 0; 0]; % Transmit antenna orientation bearing(α), downtilt(β), and slant(γ) angles in degrees
cdl.TransmitAntennaArray.PolarizationAngles = [0 90]; % Vertical Polarization
 
cdl.ReceiveAntennaArray.Size = [1 1 1 1 1]; % 1x1 antenna
cdl.ReceiveAntennaArray.Element = '38.901'; % Make sure we are using 3GPP antennas. (Default is not 3GPP)
cdl.ReceiveArrayOrientation = [180; 0; 0]; % Receive antenna orientation bearing(α), downtilt(β), and slant(γ) angles in degrees
cdl.ReceiveAntennaArray.PolarizationAngles = [0 90]; % Vertical Polarization
curPath = fileparts(matlab.desktop.editor.getActiveFilename())
curPath = '/Users/shahab/code/Fireball/OpenSource/onGithub/Tests/Wireless/NewProject/OnGitLab/neoradium/Playground/OtherExperiments/SISO/MatlabFiles'
Create a random waveform.
cdlinfo = info(cdl);
T = SR * 1e-3;
Nt = cdlinfo.NumInputSignals;
 
if (saveFiles)
txWaveform = complex(randn(T,Nt),randn(T,Nt));
save(strcat(outPath,'/txWaveform.mat'),'txWaveform');
else
txWaveform = load(strcat(outPath,'/txWaveform.mat')).txWaveform; % Read from file for reproducibility
end
txWaveform(201:204,1)
ans = 4×1 complex
0.3957 + 0.3554i 0.1609 - 1.6695i -0.1543 + 0.4127i -0.4840 - 1.0458i
Transmit the input waveform through the channel and get the signal received at the receiver.
rng(123); % For Reproducibility
rxWaveform = cdl(txWaveform);
 
if (saveFiles)
save(strcat(curPath,'/rxWaveform.mat'),'rxWaveform')
end
rxWaveform(201:204,1)
ans = 4×1 complex
1.1008 - 0.9021i 0.1649 - 0.5930i -0.7630 - 0.9731i 0.1508 - 0.7255i