sinad

Signal to noise and distortion ratio

Syntax

  • r = sinad(sxx,f,rbw,'power')
  • [r,totdistpow] = sinad(___)

Description

example

r = sinad(x) returns the signal to noise and distortion ratio (SINAD) in dBc of the real-valued sinusoidal signal x. The SINAD is determined using a modified periodogram of the same length as the input signal. The modified periodogram uses a Kaiser window with β = 38.

example

r = sinad(x,fs) specifies the sampling frequency fs of the input signal x. If you do not specify fs, the sampling frequency defaults to 1.

example

r = sinad(pxx,f,'psd') specifies the input pxx as a one-sided power spectral density (PSD) estimate. f is a vector of frequencies corresponding to the PSD estimates in pxx.

r = sinad(sxx,f,rbw,'power') specifies the input as a one-sided power spectrum. rbw is the resolution bandwidth over which each power estimate is integrated.

[r,totdistpow] = sinad(___) returns the total noise and harmonic distortion power of the signal.

example

sinad(___) with no output arguments plots the spectrum of the signal in the current figure window and labels its fundamental component. It uses different colors to draw the fundamental component, the DC value, and the noise. The SINAD appears above the plot.

Examples

expand all

SINAD for Signal with One Harmonic or One Harmonic Plus Noise

Create two signals. Both signals have a fundamental frequency of π/4 rad/sample with amplitude 1 and the first harmonic of frequency π/2 rad/sample with amplitude 0.025. One of the signals additionally has additive white Gaussian noise with variance 0.052.

Create the two signals. Set the random number generator to the default settings for reproducible results. Determine the SINAD for the signal without additive noise and compare the result to the theoretical SINAD.

n = 0:159;
x = cos(pi/4*n)+0.025*sin(pi/2*n);
rng default;
y = cos(pi/4*n)+0.025*sin(pi/2*n)+0.05*randn(size(n));
r = sinad(x)
powfund = 1;
powharm = 0.025^2;
thSINAD = 10*log10(powfund/powharm)
r =
   32.0412
thSINAD =
   32.0412

Determine the SINAD for the sinusoidal signal with additive noise. Show how including the theoretical variance of the additive noise approximates the SINAD.

r = sinad(y)
varnoise = 0.05^2;
thSINAD = 10*log10(powfund/(powharm+varnoise))
r =
   23.6793
thSINAD =
   25.0515

SINAD for Signal with Sampling Rate

Create a signal with a fundamental frequency of 1 kHz and amplitude 1, sampled at 480 kHz. The signal additionally consists of the first harmonic with amplitude 0.02 and additive white Gaussian noise with variance 0.012.

Determine the SINAD and compare the result with the theoretical SINAD.

fs = 48e4;
t = 0:1/fs:1-1/fs;
rng default;
x = cos(2*pi*1000*t)+0.02*sin(2*pi*2000*t)+0.01*randn(size(t));
r = sinad(x,fs)
powfund = 1;
powharm = 0.02^2;
varnoise = 0.01^2;
thSINAD = 10*log10(powfund/(powharm+varnoise*(1/fs)))
r =
   32.2059
thSINAD =
   33.9794

SINAD from Periodogram

Create a signal with a fundamental frequency of 1 kHz and amplitude 1, sampled at 480 kHz. The signal additionally consists of the first harmonic with amplitude 0.02 and additive white Gaussian noise with standard deviation 0.01. Set the random number generator to the default settings for reproducible results.

Obtain the periodogram of the signal and use the periodogram as the input to sinad.

fs = 48e4;
t = 0:1/fs:1-1/fs;
rng default;
x = cos(2*pi*1000*t)+0.02*sin(2*pi*2000*t)+0.01*randn(size(t));
[pxx,f] = periodogram(x,rectwin(length(x)),length(x),fs);
r = sinad(pxx,f,'psd')
r =
   32.2109

SINAD of an Amplified Signal

Generate a sinusoid of frequency 2.5 kHz sampled at 50 kHz. Reset the random number generator. Add Gaussian white noise with standard deviation 0.00005 to the signal. Pass the result through a weakly nonlinear amplifier. Plot the SINAD.

rng default
fs = 5e4; f0 = 2.5e3;
N = 1024; t = (0:N-1)/fs;

ct = cos(2*pi*f0*t);
cd = ct + 0.00005*randn(size(ct));

amp = [1e-5 5e-6 -1e-3 6e-5 1 25e-3];
sgn = polyval(amp,cd);

sinad(sgn,fs);

The plot shows the spectrum used to compute the ratio and the region treated as noise. The DC level and the fundamental are excluded from the noise computation. The fundamental is labeled.

Input Arguments

expand all

x — Real-valued sinusoidal input signalvector

Real-valued sinusoidal input signal specified as a row or column vector.

Example: cos(pi/4*(0:159))+cos(pi/2*(0:159))

Data Types: single | double

fs — Sampling frequencypositive scalar

Sampling frequency, specified as a positive scalar. The sampling frequency is the number of samples per unit time. If the unit of time is seconds, the sampling frequency has units of hertz.

pxx — One-sided PSD estimatevector

One-sided PSD estimate specified as a real-valued, nonnegative column vector.

Data Types: single | double

f — Cyclical frequenciesvector

Cyclical frequencies corresponding to the one-sided PSD estimate, pxx, specified as a row or column vector. The first element of f must be 0.

Data Types: double | single

sxx — Power spectrumnonnegative real-valued row or column vector

Power spectrum specified as a real-valued nonnegative row or column vector.

rbw — Resolution bandwidthpositive scalar

Resolution bandwidth specified as a positive scalar. The resolution bandwidth is the product of the frequency resolution of the discrete Fourier transform and the equivalent noise bandwidth of the window.

Output Arguments

expand all

r — Signal to noise and distortion ratio in dBcreal-valued scalar

Signal to noise and distortion ratio in dBc specified as a real-valued scalar.

totdistpow — Total noise and harmonic distortion power of the signalnonnegative scalar

Total noise and harmonic distortion power of the signal specified as a nonnegative scalar.

More About

expand all

Distortion Measurement Functions

The functions thd, sfdr, sinad, and snr measure the response of a weakly nonlinear system stimulated by a sinusoid.

When given time-domain input, sinad performs a periodogram using a Kaiser window with large sidelobe attenuation. To find the fundamental frequency, the algorithm searches the periodogram for the largest nonzero spectral component. It then computes the central moment of all adjacent bins that decrease monotonically away from the maximum. To be detectable, the fundamental should be at least in the second frequency bin. Higher harmonics are at integer multiples of the fundamental frequency. If a harmonic lies within the monotonically decreasing region in the neighborhood of another, its power is considered to belong to the larger harmonic. This larger harmonic may or may not be the fundamental.

The function estimates a noise level using the median power in the regions containing only noise and distortion. The DC component is excluded from the calculation. The noise at each point is the estimated level or the ordinate of the point, whichever is smaller. The noise is then subtracted from the values of the signal and the harmonics.

sinad fails if the fundamental is not the highest spectral component in the signal.

Ensure that the frequency components are far enough apart to accommodate for the sidelobe width of the Kaiser window. If this is not feasible, you can use the 'power' flag and compute a periodogram with a different window.

See Also

| | |

Was this topic helpful?