39 lines
1.0 KiB
Matlab
39 lines
1.0 KiB
Matlab
% doppler_spread.m
|
|
% David Rowe Jan 2016
|
|
%
|
|
% Returns gausssian filtered doppler spreading function samples for HF channel
|
|
% modelling. Used PathSim technical guide as a reference - thanks Moe!
|
|
|
|
function [spread_FsHz states] = doppler_spread(dopplerSpreadHz, FsHz, Nsam)
|
|
|
|
% start with low Fs so we can work with a reasonable filter length
|
|
|
|
sigma = dopplerSpreadHz/2;
|
|
lowFs = ceil(10*dopplerSpreadHz);
|
|
Ntaps = 100;
|
|
Nsam_low = ceil(Nsam*lowFs/FsHz + Ntaps); % fill filter memory
|
|
|
|
% generate gaussian freq response and design filter
|
|
|
|
x = 0:lowFs/100:lowFs/2;
|
|
y = (1/(sigma*sqrt(2*pi)))*exp(-(x.^2)/(2*sigma*sigma));
|
|
b = fir2(Ntaps-1, x/(lowFs/2), y);
|
|
|
|
% generate the spreading samples
|
|
|
|
spread_lowFs = filter(b,1,randn(1,Nsam_low) + j*randn(1,Nsam_low));
|
|
|
|
% resample to FsHz, scaling for desired spreadFreqHz
|
|
|
|
spread_FsHz = resample(spread_lowFs(Ntaps+1:Nsam_low), FsHz, lowFs);
|
|
assert(length(spread_FsHz) >= Nsam);
|
|
|
|
% return some states for optional unit testing
|
|
states.x = x;
|
|
states.y = y;
|
|
states.b = b;
|
|
|
|
endfunction
|
|
|
|
|