Usage

Generating a Signal

import numpy as np
import pysnr

Fi = 2500
Fs = 48000
N = 1000

noise = 0.001 * np.random.randn(N)
signal = np.sin(2*np.pi*(Fi/Fs)*np.arange(1, N+1))

Performing SNR

Using signal and noise

snr_value, noise_power = pysnr.snr_signal(signal, noise)

Using only signal

snr_value, noise_power = pysnr.snr_signal(signal+noise, Fs)

Using only density periodogram

f, pxx = pysnr.periodogram(signal+noise, Fs, window=('kaiser', 38))
snr_value, noise_power = pysnr.snr_power_spectral_density(pxx, f)

Using only spectrum periodogram

f, sxx = pysnr.periodogram(signal+noise, Fs, window=('kaiser', 38), scaling="spectrum")
w = scipy.signal.windows.kaiser(len(signal), 38, False)
rbw = pysnr.utils.enbw(w, Fs)
snr_value, noise_power = pysnr.snr_power_spectrum(sxx, f, rbw)

Performing THD

Using only signal

thd_value, harmonic_power = pysnr.thd_signal(signal+noise, Fs)

Using only density periodogram

f, pxx = pysnr.periodogram(signal+noise, Fs, window=('kaiser', 38))
thd_value, harmonic_power = pysnr.thd_power_spectral_density(pxx, f)

Using only spectrum periodogram

f, sxx = pysnr.periodogram(signal+noise, Fs, window=('kaiser', 38), scaling="spectrum")
w = scipy.signal.windows.kaiser(len(signal), 38, False)
rbw = pysnr.utils.enbw(w, Fs)
thd_value, harmonic_power = pysnr.thd_power_spectrum(sxx, f, rbw)

Performing SINAD

Using only signal

sinad_value, noise_harmonic_power = pysnr.sinad_signal(signal+noise, Fs)

Using only density periodogram

f, pxx = pysnr.periodogram(signal+noise, Fs, window=('kaiser', 38))
sinad_value, noise_harmonic_power = pysnr.sinad_power_spectral_density(pxx, f)

Using only spectrum periodogram

f, sxx = pysnr.periodogram(signal+noise, Fs, window=('kaiser', 38), scaling="spectrum")
w = scipy.signal.windows.kaiser(len(signal), 38, False)
rbw = pysnr.utils.enbw(w, Fs)
sinad_value, noise_harmonic_power = pysnr.sinad_power_spectrum(sxx, f, rbw)

Performing TOI

Using only signal

toi_value, signal_power, imod_power = pysnr.toi_signal(signal+noise, Fs)

Using only density periodogram

f, pxx = pysnr.periodogram(signal+noise, Fs, window=('kaiser', 38))
toi_value, signal_power, imod_power = pysnr.toi_power_spectral_density(pxx, f)

Using only spectrum periodogram

f, sxx = pysnr.periodogram(signal+noise, Fs, window=('kaiser', 38), scaling="spectrum")
w = scipy.signal.windows.kaiser(len(signal), 38, False)
rbw = pysnr.utils.enbw(w, Fs)
toi_value, signal_power, imod_power = pysnr.toi_power_spectrum(sxx, f, rbw)

Performing SFDR

Using only signal

sfdr_value, spur_power = pysnr.sfdr_signal(signal+noise, Fs)

Using only density periodogram

f, pxx = pysnr.periodogram(signal+noise, Fs, window=('kaiser', 38))
sfdr_value, spur_power = pysnr.sfdr_power_spectral_density(pxx, f)

Using only spectrum periodogram

f, sxx = pysnr.periodogram(signal+noise, Fs, window=('kaiser', 38), scaling="spectrum")
w = scipy.signal.windows.kaiser(len(signal), 38, False)
rbw = pysnr.utils.enbw(w, Fs)
sfdr_value, spur_power = pysnr.sfdr_power_spectrum(sxx, f, rbw)