diff --git a/AUTHORS.rst b/AUTHORS.rst index 6540d56e..8eec3d69 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -41,3 +41,4 @@ Contributors * sysjoint-tek <63992872+sysjoint-tek@users.noreply.github.com> * Thomas de Lellis <24543390+t52ta6ek@users.noreply.github.com> * zstadler +* Peter Hackenberg <170885528+Peter3579@users.noreply.github.com> diff --git a/src/NanoVNASaver/Settings/Sweep.py b/src/NanoVNASaver/Settings/Sweep.py index 4e29f7eb..62759927 100644 --- a/src/NanoVNASaver/Settings/Sweep.py +++ b/src/NanoVNASaver/Settings/Sweep.py @@ -18,7 +18,7 @@ # along with this program. If not, see . import logging from enum import Enum -from math import log +from math import exp, log from threading import Lock from typing import Iterator, NamedTuple @@ -145,12 +145,12 @@ def check(self): raise ValueError(f"Illegal sweep settings: {self}") def _exp_factor(self, index: int) -> float: - return 1 - log(self.segments + 1 - index) / log(self.segments + 1) + return exp(log((self.start + self.span)/self.start) / self.segments * index) def get_index_range(self, index: int) -> tuple[int, int]: if self.properties.logarithmic: - start = round(self.start + self.span * self._exp_factor(index)) - end = round(self.start + self.span * self._exp_factor(index + 1)) + start = round(self.start * self._exp_factor(index)) + end = round(self.start * self._exp_factor(index + 1)) else: start = self.start + index * self.points * self.stepsize end = start + (self.points - 1) * self.stepsize @@ -160,7 +160,7 @@ def get_index_range(self, index: int) -> tuple[int, int]: def get_frequencies(self) -> Iterator[int]: for i in range(self.segments): start, stop = self.get_index_range(i) - step = (stop - start) / self.points + step = (stop - start) / (self.points - 1) freq = start for _ in range(self.points): yield round(freq) diff --git a/tests/test_sweep.py b/tests/test_sweep.py index 34942709..6bd46a86 100644 --- a/tests/test_sweep.py +++ b/tests/test_sweep.py @@ -44,12 +44,12 @@ def test_sweep(self): self.assertEqual(sweep.get_index_range(1), (12429117, 21170817)) data = list(sweep.get_frequencies()) self.assertEqual(data[0], 3600000) - self.assertEqual(data[-1], 29913383) + self.assertEqual(data[-1], 29999934) # should be close to 30000000 sweep = Sweep(segments=3, properties=Properties(logarithmic=True)) - self.assertEqual(sweep.get_index_range(1), (9078495, 16800000)) + self.assertEqual(sweep.get_index_range(1), (7298642, 14797272)) data = list(sweep.get_frequencies()) self.assertEqual(data[0], 3600000) - self.assertEqual(data[-1], 29869307) + self.assertEqual(data[-1], 30000000) sweep2 = sweep.copy() self.assertEqual(sweep, sweep2)