Signal to noise and distortion ratio
[ returns the total noise and harmonic
distortion power (in dB) of the signal.
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.
SINAD for Signal with One Harmonic or One Harmonic Plus Noise
Create two signals. Both signals have a fundamental frequency of rad/sample with amplitude 1 and the first harmonic of frequency rad/sample with amplitude 0.025. One of the signals additionally has additive white Gaussian noise with variance .
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)
r = 32.0412
powfund = 1; powharm = 0.025^2; thSINAD = 10*log10(powfund/powharm)
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)
r = 22.8085
varnoise = 0.05^2; thSINAD = 10*log10(powfund/(powharm+varnoise))
thSINAD = 25.0515
SINAD for Signal with Sample Rate
Create a signal with a fundamental frequency of 1 kHz and unit amplitude, sampled at 480 kHz. The signal additionally consists of the first harmonic with amplitude 0.02 and additive white Gaussian noise with variance .
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)
r = 32.2058
powfund = 1; powharm = 0.02^2; varnoise = 0.01^2; thSINAD = 10*log10(powfund/(powharm+varnoise*(1/fs)))
thSINAD = 33.9794
SINAD from Periodogram
Create a signal with a fundamental frequency of 1 kHz and unit amplitude, 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
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 Amplified Signal
Generate a sinusoid of frequency 2.5 kHz sampled at 50 kHz. Add Gaussian white noise with standard deviation 0.00005 to the signal. Pass the result through a weakly nonlinear amplifier. Plot the SINAD.
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.
x — Real-valued sinusoidal input signal
Real-valued sinusoidal input signal, specified as a row or column vector.
r — Signal to noise and distortion ratio in dBc
Signal to noise and distortion ratio in dBc, returned as a real-valued scalar.
totdistpow — Total noise and harmonic distortion power of the signal
Total noise and harmonic distortion power of the signal, returned as a real-valued scalar expressed in dB.
Distortion Measurement Functions
snr measure the response
of a weakly nonlinear system stimulated by a sinusoid.
When given time-domain input,
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
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
Usage notes and limitations:
If supplied, input arguments
"psd"must be compile-time constants.
Accelerate code by running on a graphics processing unit (GPU) using Parallel Computing Toolbox™.
This function fully supports GPU arrays. For more information, see Run MATLAB Functions on a GPU (Parallel Computing Toolbox).
Version HistoryIntroduced in R2013b
sinad function supports
objects. You must have Parallel Computing Toolbox™ to use this functionality.