Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

snr

Relación señal-ruido

Descripción

ejemplo

r = snr(xi,y) devuelve la relación señal-ruido (SNR) en decibelios de una señal xi calculando la relación de su magnitud cuadrada sumada con la del ruido y:

r = mag2db(rssq(xi(:))/rssq(y(:))).

y debe tener las mismas dimensiones que xi. Utilice esta forma cuando la señal de entrada no sea necesariamente sinusoidal y tenga una estimación del ruido.

ejemplo

r = snr(x) devuelve la SNR en decibelios en relación con la portadora (dBc) de una señal de entrada sinusoidal de valor real x. La SNR se determina utilizando un periodograma modificado de la misma longitud que la entrada. El periodograma modificado utiliza una ventana de Kaiser con β = 38. El resultado excluye la potencia de las seis primeras armónicas, incluida la fundamental.

ejemplo

r = snr(x,fs,n) devuelve la SNR en dBc de una señal de entrada sinusoidal real x muestreada a una tasa de fs. El cálculo excluye la potencia contenida en las n armónicas más bajas, incluida la fundamental.

ejemplo

r = snr(pxx,f,"psd") especifica la entrada pxx como una estimación de la densidad espectral de potencia (PSD) unilateral. El argumento f es un vector de las frecuencias a las que se producen las estimaciones de pxx. El cálculo del ruido excluye la potencia de las seis primeras armónicas, incluida la fundamental.

r = snr(pxx,f,n,"psd") especifica el número de armónicas n que se desea excluir al calcular la SNR. El valor predeterminado de n es 6 e incluye la fundamental.

ejemplo

r = snr(sxx,f,rbw,"power") especifica la entrada sxx como un espectro de potencia unilateral de una señal real. La entrada rbw es el ancho de banda de resolución sobre el que se integra cada estimación de potencia.

r = snr(sxx,f,rbw,n,"power") especifica el número de armónicas n que se desea excluir al calcular la SNR. El valor predeterminado de n es 6 e incluye la fundamental.

ejemplo

r = snr(___,"aliased") elimina las armónicas de la fundamental con alias en el rango de Nyquist. Utilice esta opción cuando la señal de entrada sinusoidal esté submuestreada. Si no se especifica esta opción, o si se establece en "omitaliases", la función trata como ruido cualquier armónica de la frecuencia fundamental que se encuentre más allá del rango de Nyquist.

ejemplo

[r,noisepow] = snr(___) también devuelve la potencia de ruido total de los componentes no armónicos de la señal.

ejemplo

snr(___) representa, sin argumentos de salida, el espectro de la señal en la ventana de la figura actual y etiqueta sus principales características. Utiliza diferentes colores para trazar la componente fundamental, el valor de DC y las armónicas, y el ruido. La SNR aparece por encima de la gráfica. Esta funcionalidad funciona para todas las sintaxis mencionadas anteriormente, salvo snr(x,y).

Ejemplos

contraer todo

Genere un pulso rectangular de 20 milisegundos muestreado durante 2 segundos a 10 kHz.

Tpulse = 20e-3;
Fs = 10e3;
t = -1:1/Fs:1;
x = rectpuls(t,Tpulse);

Introduzca el pulso en ruido blanco gaussiano de forma que la relación señal-ruido (SNR) sea de 53 dB. Reinicie el generador de números aleatorios para obtener resultados reproducibles.

rng default

SNR = 53;
y = randn(size(x))*std(x)/db2mag(SNR);

s = x + y;

Utilice la función snr para calcular la SNR de la señal ruidosa.

pulseSNR = snr(x,y)
pulseSNR = 53.1255

Calcule y compare la relación señal-ruido (SNR), la distorsión armónica total (THD) y la relación señal-ruido y distorsión (SINAD) de una señal.

Cree una señal sinusoidal muestreada a 48 kHz. La señal tiene una fundamental de frecuencia 1 kHz y amplitud unitaria. Además, contiene un armónica de 2 kHz con la mitad de amplitud y ruido aditivo con varianza 0,1².

fs = 48e3;
t = 0:1/fs:1-1/fs;
A = 1.0;
powfund = A^2/2;
a = 0.4;
powharm = a^2/2;
s = 0.1;
varnoise = s^2;
x = A*cos(2*pi*1000*t) + ...
    a*sin(2*pi*2000*t) + s*randn(size(t));

Compruebe que la SNR, la THD y la SINAD coinciden con sus definiciones.

SNR = snr(x);
defSNR = 10*log10(powfund/varnoise);
SN = [SNR defSNR]
SN = 1×2

   17.0178   16.9897

THD = thd(x);
defTHD = 10*log10(powharm/powfund);
TH = [THD defTHD]
TH = 1×2

   -7.9546   -7.9588

SINAD = sinad(x);
defSINAD = 10*log10(powfund/(powharm+varnoise));
SI = [SINAD defSINAD]
SI = 1×2

    7.4571    7.4473

Calcule la SNR de una sinusoide de 2,5 kHz muestreada a 48 kHz. Añada ruido blanco con varianza 0,001².

Fi = 2500;
Fs = 48e3;
N = 1024;
x = sin(2*pi*Fi/Fs*(1:N)) + 0.001*randn(1,N);
SNR = snr(x,Fs)
SNR = 57.7103

Represente el espectro y anote la SNR.

snr(x,Fs);

Figure contains an axes object. The axes object with title SNR: 57.71 dB, xlabel Frequency (kHz), ylabel Power (dB) contains 17 objects of type line, text. These objects represent Fundamental, Noise, DC and Harmonics (excluded).

Obtenga la estimación de la densidad espectral de potencia (PSD) del periodograma de una sinusoide de 2,5 kHz muestreada a 48 kHz. Añada ruido blanco con una desviación estándar de 0,00001. Utilice este valor como entrada para determinar la SNR. Establezca la configuración predeterminada del generador de números aleatorios para obtener resultados reproducibles.

rng default
Fi = 2500;
Fs = 48e3;
N = 1024;
x = sin(2*pi*Fi/Fs*(1:N)) + 0.00001*randn(1,N);

w = kaiser(numel(x),38);
[Pxx, F] = periodogram(x,w,numel(x),Fs);
SNR = snr(Pxx,F,'psd')
SNR = 97.7446

Utilizando el espectro de potencia, calcule la SNR de una sinusoide de 2,5 kHz muestreada a 48 kHz e integrada en ruido blanco con una desviación estándar de 0,00001. Reinicie el generador de números aleatorios para obtener resultados reproducibles.

rng default
Fi = 2500;
Fs = 48e3;
N = 1024;
x = sin(2*pi*Fi/Fs*(1:N)) + 0.00001*randn(1,N);

w = kaiser(numel(x),38);
[Sxx, F] = periodogram(x,w,numel(x),Fs,'power');
rbw = enbw(w,Fs);
SNR = snr(Sxx,F,rbw,'power')
SNR = 97.7446

Represente el espectro de la señal y anote la SNR.

snr(Sxx,F,rbw,'power');

Figure contains an axes object. The axes object with title SNR: 97.74 dB, xlabel Frequency (kHz), ylabel Power (dB) contains 17 objects of type line, text. These objects represent Fundamental, Noise, DC and Harmonics (excluded).

Genere una señal que se asemeje a la salida de un amplificador débilmente no lineal con un tono de 2,1 kHz a modo de entrada. La señal se muestrea durante 1 segundo a 10 kHz. Calcule y represente el espectro de potencia de la señal. Utilice una ventana de Kaiser con β = 38 para el cálculo.

Fs = 10000;
f = 2100;

t = 0:1/Fs:1; 
x = tanh(sin(2*pi*f*t)+0.1) + 0.001*randn(1,length(t));

periodogram(x,kaiser(length(x),38),[],Fs,'power')

Figure contains an axes object. The axes object with title Periodogram Power Spectrum Estimate, xlabel Frequency (kHz), ylabel Power (dB) contains an object of type line.

Las armónicas sobresalen del ruido en frecuencias de 4,2 kHz, 6,3 kHz, 8,4 kHz, 10,5 kHz, 12,6 kHz y 14,7 kHz. Todas las frecuencias, excepto la primera, son mayores que la frecuencia de Nyquist. Las armónicas reciben alias respectivamente en 3,7 kHz, 1,6 kHz, 0,5 kHz, 2,6 kHz y 4,7 kHz.

Calcule la relación señal-ruido de la señal. Por defecto, snr trata las armónicas con alias como parte del ruido.

snr(x,Fs,7);

Figure contains an axes object. The axes object with title SNR: 23.62 dB, xlabel Frequency (kHz), ylabel Power (dB) contains 14 objects of type line, text. These objects represent Fundamental, Noise, DC and Harmonics (excluded).

Repita el cálculo, pero ahora trate las armónicas con alias como parte de la señal.

snr(x,Fs,7,'aliased');

Figure contains an axes object. The axes object with title SNR: 55.23 dB, xlabel Frequency (kHz), ylabel Power (dB) contains 19 objects of type line, text. These objects represent Fundamental, Noise, DC and Harmonics (excluded).

Cree una señal sinusoidal muestreada a 48 kHz. La señal tiene una fundamental de frecuencia 1 kHz y amplitud unitaria. Además, contiene un armónica de 2 kHz con la mitad de amplitud y ruido aditivo con varianza 0,1².

fs = 48e3;
t = 0:1/fs:1-1/fs;

A = 1.0;
powfund = A^2/2;
a = 0.4;
powharm = a^2/2;
s = 0.1;
varnoise = s^2;

x = A*cos(2*pi*1000*t) + ...
    a*sin(2*pi*2000*t) + s*randn(size(t));

Calcule la potencia del ruido en la señal. Compruebe que coincide con la definición.

[SNR,npow] = snr(x,fs);
compare = [10*log10(powfund)-npow SNR]
compare = 1×2

   17.0281   17.0178

Genere una sinusoide de frecuencia 2,5 kHz muestreada a 50 kHz. Reinicie el generador de números aleatorios. Añada ruido blanco gaussiano con desviación estándar 0,00005 a la señal. Pase el resultado por un amplificador débilmente no lineal. Represente la SNR.

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);

snr(sgn,fs);

Figure contains an axes object. The axes object with title SNR: 83.80 dB, xlabel Frequency (kHz), ylabel Power (dB) contains 17 objects of type line, text. These objects represent Fundamental, Noise, DC and Harmonics (excluded).

La componente de DC y todas las armónicas, incluida la fundamental, se excluyen de la medición del ruido. La fundamental y las armónicas están etiquetadas.

Argumentos de entrada

contraer todo

Señal de entrada, especificada como un vector, matriz o arreglo N-D.

Tipos de datos: double | single
Soporte de números complejos:

Estimación del ruido, especificado como un vector, matriz o arreglo N-D, con las mismas dimensiones que xi.

Tipos de datos: double | single
Soporte de números complejos:

Señal de entrada sinusoidal de valor real, especificada como un vector fila o un vector columna.

Tipos de datos: double | single

Tasa de muestreo, especificada como un escalar positivo. La tasa de muestreo es el número de muestras por unidad de tiempo. Si la unidad de tiempo es el segundo, la tasa de muestreo tendrá unidades de hercios.

Tipos de datos: double | single

Número de armónicas para excluir del cálculo de la SNR, especificado como un escalar entero positivo. El valor predeterminado de n es 6.

Estimación de la densidad espectral de potencia unilateral, especificada como un vector columna no negativo de valor real.

La densidad espectral de potencia debe expresarse en unidades lineales, no en decibelios. Utilice db2pow para convertir los valores de decibelios en valores de potencia.

Ejemplo: [pxx,f] = periodogram(cos(pi./[4;2]*(0:159))'+randn(160,2)) especifica la estimación del periodograma PSD de una sinusoide ruidosa de dos canales muestreada a 2π Hz y las frecuencias a las que se calcula.

Tipos de datos: double | single

Frecuencias cíclicas de la estimación de la PSD unilateral pxx, especificadas como vector fila o vector columna. El primer elemento de f debe ser 0.

Tipos de datos: double | single

Espectro de potencia, especificado como un vector fila o vector columna de valor real no negativo.

El espectro de potencia debe expresarse en unidades lineales, no en decibelios. Utilice db2pow para convertir los valores de decibelios en valores de potencia.

Ejemplo: [sxx,w] = periodogram(cos(pi./[4;2]*(0:159))'+randn(160,2),"power") especifica la estimación del espectro de potencia del periodograma de una sinusoide de dos canales integrada en ruido blanco gaussiano y las frecuencias normalizadas a las que se calcula.

Tipos de datos: double | single

Ancho de banda de la resolución, especificado como un escalar positivo. El ancho de banda de la resolución es el producto de la resolución de frecuencia de la transformada discreta de Fourier y el ancho de banda de ruido equivalente de la ventana.

Tipos de datos: double | single

Argumentos de salida

contraer todo

Relación señal-ruido, devuelta como un escalar de valor real, expresada en decibelios en relación con la portadora (dBc). La SNR se devuelve en decibelios (dB) si la señal de entrada no es sinusoidal.

Tipos de datos: double | single

Potencia total de ruido de los componentes no armónicos de la señal de entrada, devuelta como un escalar de valor real.

Tipos de datos: double | single

Más acerca de

contraer todo

Funciones de medición de la distorsión

Las funciones thd, sfdr, sinad y snr miden la respuesta de un sistema débilmente no lineal estimulado por una sinusoide.

Cuando se le da una entrada en el dominio del tiempo, snr realiza un periodograma utilizando una ventana de Kaiser con gran atenuación de lóbulos laterales. Para encontrar la frecuencia fundamental, el algoritmo busca en el periodograma el componente espectral distinto de cero más elevado. A continuación, calcula el momento central de todos los bins adyacentes que se alejan monótonamente del máximo. Para que sea detectable, la fundamental debe estar, al menos, en el segundo bin de frecuencia. Las armónicas más altas son múltiplos enteros de la frecuencia fundamental. Si una armónica se encuentra dentro de la región monotónicamente decreciente en la vecindad de otra, se considera que su potencia pertenece a la armónica mayor. Dicha armónica mayor puede ser, o no, la fundamental.

La función estima un nivel de ruido utilizando la mediana de la potencia en las regiones que solo contienen ruido. El componente de DC se excluye del cálculo. El ruido en cada punto es el nivel estimado o la ordenada del punto, lo que sea menor. A continuación, el ruido se resta de los valores de la señal y las armónicas.

snr falla si la fundamental no es el componente espectral más alto de la señal.

Asegúrese de que los componentes de frecuencia están lo suficientemente separados para tener en cuenta la anchura de los lóbulos laterales de la ventana de Kaiser. Si esto no es factible, puede utilizar la bandera "power" y calcular un periodograma con una ventana diferente.

Capacidades ampliadas

Historial de versiones

Introducido en R2013b

expandir todo

Consulte también

| | |