diff options
| author | Marin Ivanov <[email protected]> | 2025-07-25 10:17:14 +0300 |
|---|---|---|
| committer | Marin Ivanov <[email protected]> | 2026-01-18 20:09:26 +0200 |
| commit | 0168586485e6310c598713c911b1dec5618d61a1 (patch) | |
| tree | 6aabc2a12ef8fef70683f5389bea00f948015f77 /octave/doppler_spread.m | |
* codec2 cut-down version 1.2.0
* Remove codebook and generation of sources
* remove c2dec c2enc binaries
* prepare for emscripten
Diffstat (limited to 'octave/doppler_spread.m')
| -rw-r--r-- | octave/doppler_spread.m | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/octave/doppler_spread.m b/octave/doppler_spread.m new file mode 100644 index 0000000..b6fccf5 --- /dev/null +++ b/octave/doppler_spread.m @@ -0,0 +1,38 @@ +% 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 + + |
