Skip to content
aicodixPublic

About

Adding artificial CFO, SFO, AWGN and multipath propagation to real and analytic signals.

Resources

Stars

10 stars

Watchers

3 watching

Forks

Latest commit

 

History

12 Commits

Folders and files

Repository files navigation

All tools keep the sample rate, bits and channels of their input. Use WAV files with 32 bit float samples for simulations: with 8 or 16 bits, the output is quantized and clipped at full scale.

Simulating a Carrier frequency offset by mixing the Analytic signal with an Numerically controlled oscillator.

If the input is a real signal, the Discrete Hilbert transform is used to get the analytic signal and only the real part is used as output after mixing.

Add an CFO of 23.5 Hz:

./cfo output.wav input.wav 23.5

Simulating a Sampling frequency offset by Resampling the sampled data.

Add an SFO of -15 ppm:

./sfo output.wav input.wav -15

Simulating Additive white Gaussian noise.

Add -34dB of AWGN:

./awgn output.wav input.wav -34

An optional last argument seeds the random generator, so the same noise can be repeated:

./awgn output.wav input.wav -34 1234

Simulating Multipath propagation by summing the Analytic signal with delayed, attenuated and phase shifted versions of itself.

If the input is a real signal, the Discrete Hilbert transform is used to get the analytic signal and only the real part is used as output after summing.

Read paths from table multipath.txt and use a Rician factor of 10dB:

./multipath output.wav input.wav multipath.txt 10

The table contains rows of each extra path and its amplitude, time delay in milliseconds and phase shift in radians.

Example table entries generated using Room Impulse Response tool.

Simulating an Ionospheric HF channel with the Watterson model as in ITU-R F.1487: two independent paths of equal power, the second one delayed, each with Rayleigh fading and a Gaussian Doppler spread.

If the input is a real signal, the Discrete Hilbert transform is used to get the analytic signal and only the real part is used as output after fading.

Use a differential time delay of 1 millisecond and a frequency spread (two sigma) of 0.5 Hz:

./watterson output.wav input.wav 1 0.5

The mid-latitude conditions from ITU-R F.1487 and the flutter condition from CCIR 520:

Condition Delay Spread
Quiet 0.5ms 0.1Hz
Moderate 1ms 0.5Hz
Disturbed 2ms 1Hz
Flutter 0.5ms 10Hz

The tap gains are sums of 64 phasors with random phases and Gaussian distributed frequencies. An optional last argument seeds the random generator, so the same fading can be repeated:

./watterson output.wav input.wav 1 0.5 1234

About

Adding artificial CFO, SFO, AWGN and multipath propagation to real and analytic signals.

Resources

Stars

10 stars

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages