From 159c3f48b5d6890d05ab6fc8779eec1c21dac4c9 Mon Sep 17 00:00:00 2001 From: VetheonGames Date: Tue, 5 Mar 2024 11:47:21 -0700 Subject: [PATCH] updat:e --- config.yml | 10 ++++++++-- generator.py | 33 ++++++++++++++++++++++----------- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/config.yml b/config.yml index d3e95b8..5b82bcb 100644 --- a/config.yml +++ b/config.yml @@ -1,2 +1,8 @@ -frequency: 20.0 # Hz -sample_rate: 100 # Samples per second +frequency: 1.0 # Hz. Default: 1.0 +sample_rate: 100 # Samples per sleep time. Default: 100 +sleep_time: 0.1 # Time to wait between taking samples in seconds. Default: 0.1 + +# Minimum possible value of Sine Wave. Disabled by default. Uncomment line to limit min value +#min_value: -3 +# Maxmum possible value of Sine Wave. Disabled by default. Uncomment line to limit max value +#max_value: 3 diff --git a/generator.py b/generator.py index 313b57f..64d0145 100644 --- a/generator.py +++ b/generator.py @@ -1,29 +1,40 @@ import numpy as np import time import yaml +from decimal import Decimal, getcontext +import math -def generate_continuous_sine_wave(freq, sample_rate): +def generate_continuous_sine_wave(freq, sample_rate, sleep_time, min_value=None, max_value=None): """ - Continuously generates sine wave values and outputs them to the terminal. + Continuously generates sine wave values and outputs them to stdout. :param freq: Frequency of the sine wave in Hertz. :param sample_rate: Sample rate in samples per second. + :param sleep_time: Time to wait between taking samples in seconds. + :param min_value: Minimum value for the sine wave (optional). + :param max_value: Maximum value for the sine wave (optional). """ - t = 0 - dt = 1 / sample_rate + getcontext().prec = 28 + t = Decimal(0) + dt = Decimal(1) / Decimal(sample_rate) while True: - y = np.sin(2 * np.pi * freq * t) + y = Decimal(math.sin(float(2 * math.pi * freq * float(t)))) + if min_value is not None: + y = max(min_value, y) + if max_value is not None: + y = min(max_value, y) print(y) t += dt - time.sleep(dt) + time.sleep(float(sleep_time)) if __name__ == "__main__": - # Load parameters from config.yml with open("config.yml", "r") as config_file: config = yaml.safe_load(config_file) - # Extract parameters or use default values - FREQUENCY = config.get("frequency", 1) # Hz - SAMPLE_RATE = config.get("sample_rate", 100) # Samples per second + FREQUENCY = config.get("frequency", 20.0) + SAMPLE_RATE = config.get("sample_rate", 100) + SLEEP_TIME = config.get("sleep_time", 0.1) + MIN_VALUE = config.get("min_value") + MAX_VALUE = config.get("max_value") - generate_continuous_sine_wave(FREQUENCY, SAMPLE_RATE) + generate_continuous_sine_wave(FREQUENCY, SAMPLE_RATE, SLEEP_TIME, MIN_VALUE, MAX_VALUE)