Skip to content

Commit 5f7e542

Browse files
authored
Merge pull request #53 from fronzbot/dev
0.3.0
2 parents bfd97e1 + 1fe6598 commit 5f7e542

File tree

5 files changed

+16
-11
lines changed

5 files changed

+16
-11
lines changed

adc_eval/spectrum.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,15 @@ def enob(sndr, places=1):
2323
return round((sndr - 1.76) / 6.02, places)
2424

2525

26-
def sndr_sfdr(spectrum, freq, nfft, leak, full_scale=0):
26+
def sndr_sfdr(spectrum, freq, fs, nfft, leak, full_scale=0):
2727
"""Get SNDR and SFDR."""
2828
# Zero the DC bin
2929
spectrum[0] = 0
3030
bin_sig = np.argmax(spectrum)
3131
psig = sum(spectrum[i] for i in range(bin_sig - leak, bin_sig + leak + 1))
3232
spectrum_n = spectrum
3333
spectrum_n[bin_sig] = 0
34+
fbin = fs / nfft
3435

3536
for i in range(bin_sig - leak, bin_sig + leak + 1):
3637
spectrum_n[i] = 0
@@ -62,7 +63,8 @@ def sndr_sfdr(spectrum, freq, nfft, leak, full_scale=0):
6263
"floor": noise_floor,
6364
"power": noise_power,
6465
"rms": np.sqrt(noise_power),
65-
"dBHz": round(dBW(noise_floor) - full_scale, 1),
66+
"dBHz": round(dBW(noise_floor, 3) - full_scale, 1),
67+
"NSD": round(dBW(noise_floor, 3) - full_scale - 2 * dBW(fbin, 3), 1),
6668
}
6769
stats["sndr"] = {
6870
"dBc": dBW(psig / noise_power),
@@ -177,7 +179,7 @@ def plot_spectrum(
177179

178180
pwr_dB = 10 * np.log10(pwr) - scalar
179181

180-
sndr_stats = sndr_sfdr(pwr, freq, nfft, leak=leak, full_scale=full_scale)
182+
sndr_stats = sndr_sfdr(pwr, freq, fs, nfft, leak=leak, full_scale=full_scale)
181183
harm_stats = find_harmonics(
182184
pwr,
183185
freq,
@@ -259,7 +261,8 @@ def get_plot_string(stats, full_scale, fs, nfft, window):
259261
plt_str += f"SFDR = {stats['sfdr']['dBFS']} dBFS ({stats['sfdr']['dBc']} dBc)\n"
260262
plt_str += f"Pspur = {stats['spur']['dBFS']} dBFS\n"
261263
plt_str += f"fspur = {round(stats['spur']['freq']/1e6, 2)} MHz\n"
262-
plt_str += f"Noise Floor = {stats['noise']['dBHz']} dBFS/Hz\n"
264+
plt_str += f"Noise Floor = {stats['noise']['dBHz']} dBFS\n"
265+
plt_str += f"NSD = {stats['noise']['NSD']} dBFS\n"
263266
plt_str += "\n"
264267
plt_str += "==== Harmonics ====\n"
265268

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "python-adc-eval"
7-
version = "0.2.2"
7+
version = "0.3.0"
88
license = {text = "MIT"}
99
description = "ADC Evaluation Library"
1010
readme = "README.rst"

requirements_test.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
black==24.4.2
2-
coverage==7.5.3
2+
coverage==7.5.4
33
pylint==3.2.3
44
pytest==8.2.2
55
pytest-cov==5.0.0
66
pytest-sugar==1.0.0
77
pytest-timeout==2.3.1
8-
ruff==0.4.8
8+
ruff==0.4.10
99
tox==4.15.1
1010
restructuredtext-lint==1.4.0
1111
pygments==2.18.0

tests/test_spectrum.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ def test_sndr_sfdr_outputs(self):
6767
freq = np.array([100, 200, 300, 400])
6868
full_scale = -3
6969
nfft = 2**8
70+
fs = 1
7071
exp_return = {
7172
"sig": {
7273
"freq": 300,
@@ -86,7 +87,8 @@ def test_sndr_sfdr_outputs(self):
8687
"floor": 18 / nfft,
8788
"power": 9,
8889
"rms": 3,
89-
"dBHz": round(-11.5297 - full_scale, 1),
90+
"dBHz": round(-11.529675 - full_scale, 1),
91+
"NSD": round(36.6351 - full_scale, 1),
9092
},
9193
"sndr": {
9294
"dBc": 10.0,
@@ -101,6 +103,6 @@ def test_sndr_sfdr_outputs(self):
101103
},
102104
}
103105

104-
result = spectrum.sndr_sfdr(data, freq, nfft, 0, full_scale=full_scale)
106+
result = spectrum.sndr_sfdr(data, freq, fs, nfft, 0, full_scale=full_scale)
105107
for key, val in exp_return.items():
106108
self.assertDictEqual(result[key], val, msg=key)

tests/test_spectrum_plotting.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ def test_plot_string(self):
9898
"""Test proper return of plotting string."""
9999
self.bin = 13
100100
(freq, pwr) = self.gen_spectrum(3)
101-
stats = spectrum.sndr_sfdr(pwr, freq, self.nfft, leak=0, full_scale=0)
101+
stats = spectrum.sndr_sfdr(pwr, freq, 1, self.nfft, leak=0, full_scale=0)
102102
harms = spectrum.find_harmonics(
103103
pwr, freq, self.nfft, self.bin, self.arms, harms=3, leak=0
104104
)
@@ -121,7 +121,7 @@ def test_plot_string(self):
121121
f"SFDR = {all_stats['sfdr']['dBFS']} dBFS" in plt_str, msg=msg_txt
122122
)
123123
self.assertTrue(
124-
f"Noise Floor = {all_stats['noise']['dBHz']} dBFS/Hz" in plt_str,
124+
f"Noise Floor = {all_stats['noise']['dBHz']} dBFS" in plt_str,
125125
msg=msg_txt,
126126
)
127127
self.assertTrue(

0 commit comments

Comments
 (0)