Real-time Fake Telemetry Stream Generator
Project description
FakeTelemetry
A Python package to generate real-time and batch fake telemetry streams for testing, simulation, and development.
Links
Features
- Multiple waveforms: sine, cosine, square, sawtooth, triangle, pulse, exponential decay, and random noise
- Custom waveforms: Define your own signal functions
- Phase shift support: Control phase offset for waveforms
- Adjustable parameters: amplitude, frequency, offset, and sample rate
- Multiple noise types: Gaussian, uniform, and impulse noise injection
- Real-time streaming: Generate (datetime, value) tuples with actual timing delays
- Batch generation: Generate all samples at once without delays
- Multi-channel support: Parallel telemetry generation across multiple channels
- Data export: Export to JSON, CSV formats with import support
- Well-tested: Comprehensive test suite with 35+ tests
- Pure Python: No external dependencies required
Quickstart
Generate a sine wave stream in seconds:
from faketelemetry import TelemetryGenerator, WaveformType
gen = TelemetryGenerator(WaveformType.SINE)
for ts, val in gen.stream(sampling_rate=1.0, duration=2):
print(ts, val)
Requirements
- Python 3.7 or newer
- No external dependencies (pure Python)
Example Usage
Basic Waveform Generation
from faketelemetry import TelemetryGenerator, WaveformType, NoiseInjector
# Single channel with noise (sine wave)
noise = NoiseInjector(noise_level=0.2)
gen = TelemetryGenerator(
waveform=WaveformType.SINE,
frequency=1.0,
amplitude=1.0,
offset=0.0,
noise_injector=noise
)
for timestamp, value in gen.stream(sampling_rate=2.0, duration=3):
print(timestamp, value)
Phase Shift
import math
from faketelemetry import TelemetryGenerator, WaveformType
# Sine wave with 90 degree phase shift (equivalent to cosine)
gen = TelemetryGenerator(
WaveformType.SINE,
frequency=1.0,
phase=math.pi/2
)
Batch Generation (No Delays)
from faketelemetry import TelemetryGenerator, WaveformType
gen = TelemetryGenerator(WaveformType.SINE, frequency=1.0)
# Generate 100 samples at 10 Hz over 10 seconds - returns immediately
data = gen.generate_batch(sampling_rate=10.0, duration=10.0)
for timestamp, value in data:
print(timestamp, value)
Multi-Channel Telemetry
from faketelemetry import TelemetryGenerator, WaveformType, MultiChannelTelemetryGenerator
ch1 = TelemetryGenerator(WaveformType.SINE, frequency=1.0)
ch2 = TelemetryGenerator(WaveformType.COSINE, frequency=0.5)
multi = MultiChannelTelemetryGenerator([ch1, ch2])
# Real-time streaming
for sample in multi.stream(sampling_rate=2.0, duration=3):
print({k: (v[0], v[1]) for k, v in sample.items()})
# Or batch generation
batch_data = multi.generate_batch(sampling_rate=10.0, duration=5.0)
Different Noise Types
from faketelemetry import NoiseInjector, NoiseType, TelemetryGenerator, WaveformType
# Gaussian noise (default)
gaussian_noise = NoiseInjector(noise_level=0.1, noise_type=NoiseType.GAUSSIAN)
# Uniform noise
uniform_noise = NoiseInjector(noise_level=0.2, noise_type=NoiseType.UNIFORM)
# Impulse noise (random spikes)
impulse_noise = NoiseInjector(
noise_level=1.0,
noise_type=NoiseType.IMPULSE,
impulse_probability=0.05
)
gen = TelemetryGenerator(WaveformType.SINE, noise_injector=impulse_noise)
Exponential Decay
from faketelemetry import TelemetryGenerator, WaveformType
# Exponential decay - frequency parameter controls decay rate
gen = TelemetryGenerator(
WaveformType.EXPONENTIAL_DECAY,
frequency=0.5, # decay rate
amplitude=10.0, # starting value
offset=1.0 # asymptotic value
)
Data Export
from faketelemetry import TelemetryGenerator, WaveformType, to_json, to_csv, from_json
gen = TelemetryGenerator(WaveformType.SINE)
data = gen.generate_batch(sampling_rate=10.0, duration=5.0)
# Export to JSON
json_str = to_json(data)
to_json(data, "telemetry.json") # Save to file
# Export to CSV
csv_str = to_csv(data)
to_csv(data, "telemetry.csv") # Save to file
# Import back
restored_data = from_json("telemetry.json")
Custom Waveform
from faketelemetry import TelemetryGenerator, WaveformType
def custom_func(t):
return 42.0 # Constant value
gen_custom = TelemetryGenerator(WaveformType.CUSTOM, custom_func=custom_func)
print('Custom:', next(gen_custom.stream(1)))
Available Waveforms
| Waveform | Description |
|---|---|
SINE |
Sinusoidal wave |
COSINE |
Cosine wave |
SQUARE |
Square wave (+1/-1) |
SAWTOOTH |
Linear rise, instant drop |
TRIANGLE |
Linear rise and fall |
PULSE |
Brief high, then low |
EXPONENTIAL_DECAY |
Exponential decay curve |
RANDOM_NOISE |
Gaussian random values |
CUSTOM |
User-defined function |
Installation
Install from PyPI:
pip install faketelemetry
Or clone this repo and install locally:
pip install .
Or install in editable/development mode:
pip install -e .
Testing
Run all tests:
python -m unittest discover -s tests
Or with pytest:
pytest tests/
Support
For questions or issues, please open a GitHub Issue.
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file faketelemetry-0.2.0.tar.gz.
File metadata
- Download URL: faketelemetry-0.2.0.tar.gz
- Upload date:
- Size: 14.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
96e81dda9f7e5ba44f21f84edcc509ab065a5cc23dfe0ed738027b0cebb49366
|
|
| MD5 |
463b08ab1b1654230346286c99ae2000
|
|
| BLAKE2b-256 |
cfb25d69e72cf08c94bacc859518b8b0f4da2e21d15a9bbe1399412a4ff19958
|
Provenance
The following attestation bundles were made for faketelemetry-0.2.0.tar.gz:
Publisher:
python-package.yml on adkvi/faketelemetry
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
faketelemetry-0.2.0.tar.gz -
Subject digest:
96e81dda9f7e5ba44f21f84edcc509ab065a5cc23dfe0ed738027b0cebb49366 - Sigstore transparency entry: 731029547
- Sigstore integration time:
-
Permalink:
adkvi/faketelemetry@c136880901fef3d66d0e8e34ba5606614820789e -
Branch / Tag:
refs/pull/1/merge - Owner: https://github.com/adkvi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-package.yml@c136880901fef3d66d0e8e34ba5606614820789e -
Trigger Event:
pull_request
-
Statement type:
File details
Details for the file faketelemetry-0.2.0-py3-none-any.whl.
File metadata
- Download URL: faketelemetry-0.2.0-py3-none-any.whl
- Upload date:
- Size: 16.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
78f98b4a7e51e116f925be689ec2ee9d090843b25807c3d208f5eef0c646cb43
|
|
| MD5 |
5bf663be84460389367e8a115e33343c
|
|
| BLAKE2b-256 |
5e9fe678b52ceeb5a151068d8fbe4cf009a13e4da6b4debfbd5fbdf2470c9d41
|
Provenance
The following attestation bundles were made for faketelemetry-0.2.0-py3-none-any.whl:
Publisher:
python-package.yml on adkvi/faketelemetry
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
faketelemetry-0.2.0-py3-none-any.whl -
Subject digest:
78f98b4a7e51e116f925be689ec2ee9d090843b25807c3d208f5eef0c646cb43 - Sigstore transparency entry: 731029548
- Sigstore integration time:
-
Permalink:
adkvi/faketelemetry@c136880901fef3d66d0e8e34ba5606614820789e -
Branch / Tag:
refs/pull/1/merge - Owner: https://github.com/adkvi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-package.yml@c136880901fef3d66d0e8e34ba5606614820789e -
Trigger Event:
pull_request
-
Statement type: