@@ -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
0 commit comments