Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

resample

Remuestrear datos uniformes o no uniformes a una nueva tasa fija

Descripción

ejemplo

y = resample(x,p,q) remuestrea la secuencia de entrada, , a / veces la frecuencia de muestreo original.xpq Si es una matriz, trata cada columna como un canal independiente. aplica un filtro de paso bajo FIR antialiasing y compensa el retraso introducido por el filtro.xresamplexresamplex

y = resample(x,p,q,n) utiliza un filtro antialiasing de la orden 2 a max( , ).npq

ejemplo

y = resample(x,p,q,n,beta) especifica el parámetro de forma de la ventana Kaiser utilizada para diseñar el filtro de paso bajo.

y = resample(x,p,q,b) filtros utilizando los coeficientes de filtro especificados en .xb

ejemplo

[y,b] = resample(x,p,q,___) también devuelve los coeficientes del filtro aplicado durante el remuestreo.x

y = resample(x,tx) remuestrea los valores, , de una señal muestreada en los instantes especificados en vector .xtx La función interpola linealmente en un vector de instantes espaciados uniformemente con los mismos puntos finales y el mismo número de muestras que . s se tratan como datos que faltan y se ignoran.xtxNaN

y = resample(x,tx,fs) utiliza un filtro antialiasing polifásico para remuestrear la señal a la frecuencia de muestreo uniforme especificada en .fs

y = resample(x,tx,fs,p,q) interpola la señal de entrada a una cuadrícula uniforme intermedia con un espaciado de muestra de ( / )/ .pqfs A continuación, la función filtra el resultado para subir la muestra y reducirla mediante , lo que resulta en una frecuencia de muestreo final de .pqfs Para obtener los mejores resultados, asegúrese de que el valor de / sea al menos el doble de grande que el componente de frecuencia más alta de .fsqpx

ejemplo

y = resample(x,tx,___,method) especifica el método de interpolación junto con cualquiera de los argumentos de las sintaxis anteriores de este grupo. El método de interpolación puede ser , , o .'linear''pchip''spline'

Si no varía lentamente, considere la posibilidad de usar con el método de interpolación.Nota:xinterp1'pchip'

[y,ty] = resample(x,tx,___) regresa en los instantes que corresponden a la señal remuestreada.ty

[y,ty,b] = resample(x,tx,___) en los coeficientes del filtro de antialiasing.b

Ejemplos

contraer todo

Remuestrear una secuencia lineal simple a 3/2 la velocidad original de 10 Hz. Trazar las señales originales y remuestreadas en la misma figura.

fs = 10; t1 = 0:1/fs:1; x = t1; y = resample(x,3,2); t2 = (0:(length(y)-1))*2/(3*fs);  plot(t1,x,'*',t2,y,'o') xlabel('Time (s)') ylabel('Signal') legend('Original','Resampled', ...     'Location','NorthWest')

Al filtrar, se supone que la secuencia de entrada, , es cero antes y después de las muestras que se proporciona.resamplex Las grandes desviaciones de cero en los puntos finales de pueden dar lugar a valores inesperados para .xy

Muestre estas desviaciones remuestreando una secuencia triangular y una versión desplazado verticalmente de la secuencia con puntos finales distintos de cero.

x = [1:10 9:-1:1;     10:-1:1 2:10]'; y = resample(x,3,2);  subplot(2,1,1) plot(1:19,x(:,1),'*',(0:28)*2/3 + 1,y(:,1),'o') title('Edge Effects Not Noticeable') legend('Original','Resampled', ...     'Location','South')  subplot(2,1,2) plot(1:19,x(:,2),'*',(0:28)*2/3 + 1,y(:,2),'o') title('Edge Effects Noticeable') legend('Original','Resampled', ...     'Location','North')

Construir una señal sinusoidal. Especifique una frecuencia de muestreo de tal forma que 16 muestras correspondan exactamente a un período de señal. Dibuje una gráfica de vástago de la señal. Superponga un gráfico de escaleras para la visualización de muestras y retención.

fs = 16; t = 0:1/fs:1-1/fs;  x = 0.75*sin(2*pi*t);  stem(t,x) hold on stairs(t,x) hold off

Se utiliza para subir la muestra de la señal por un factor de cuatro.resample Utilice la configuración predeterminada. Trazar el resultado junto con la señal original.

ups = 4; dns = 1;  fu = fs*ups; tu = 0:1/fu:1-1/fu;  y = resample(x,ups,dns);  stem(tu,y) hold on stairs(t,x) hold off legend('Resampled','Original')

Repita el cálculo. Especifique el número 1 para que el filtro de suavizado sea de ordenn

<math display="block">
<mrow>
<mn>2</mn>
<mo>×</mo>
<mn>1</mn>
<mo>×</mo>
<mn>4</mn>
<mo>=</mo>
<mn>8</mn>
</mrow>
</math>
. Especifique un parámetro de forma
<math display="block">
<mrow>
<mi>β</mi>
<mo>=</mo>
<mn>0</mn>
</mrow>
</math>
para la ventana Kaiser. Salida del filtro, así como de la señal remuestreada.

n = 1; beta = 0;  [y,b] = resample(x,ups,dns,n,beta);  fo = filtord(b)
fo = 8 
 stem(tu,y) hold on stairs(t,x,'--') hold off legend('n = 1, \beta = 0')

La señal remuestreada muestra los efectos de alias que resultan del mainlobe relativamente amplio y la baja atenuación del lóbulo lateral de la ventana.

Aumentar a 5 y salirn

<math display="block">
<mrow>
<mi>β</mi>
<mo>=</mo>
<mn>0</mn>
</mrow>
</math>
. Verifique que el filtro sea del orden 40. Trazar la señal remuestreada.

n = 5;  [y,b] = resample(x,ups,dns,n,beta);  fo = filtord(b)
fo = 40 
 stem(tu,y) hold on stairs(t,x,'--') hold off legend('n = 5, \beta = 0')

La ventana más larga tiene un lóbulo principal más estrecho y atenúa mejor los efectos de alias. También atenúa la señal.

Deje el orden del filtro en

<math display="block">
<mrow>
<mn>2</mn>
<mo>×</mo>
<mn>5</mn>
<mo>×</mo>
<mn>4</mn>
<mo>=</mo>
<mn>4</mn>
<mn>0</mn>
</mrow>
</math>
y aumentar el parámetro de forma para
<math display="block">
<mrow>
<mi>β</mi>
<mo>=</mo>
<mn>2</mn>
<mn>0</mn>
</mrow>
</math>
.

beta = 20;  y = resample(x,ups,dns,n,beta);  stem(tu,y) hold on stairs(t,x,'--') hold off legend('n = 5, \beta = 20')

La atenuación del lóbulo lateral alto da como resultado un buen remuestreo.

Disminuya el orden del filtro de nuevo a

<math display="block">
<mrow>
<mn>2</mn>
<mo>×</mo>
<mn>1</mn>
<mo>×</mo>
<mn>4</mn>
<mo>=</mo>
<mn>8</mn>
</mrow>
</math>
y salir
<math display="block">
<mrow>
<mi>β</mi>
<mo>=</mo>
<mn>2</mn>
<mn>0</mn>
</mrow>
</math>
.

n = 1;  [y,b] = resample(x,ups,dns,n,beta);  stem(tu,y) hold on stairs(t,x,'--') hold off legend('n = 1, \beta = 20')

El lóbulo principal más ancho genera artefactos considerables al remuestrear.

Generar 60 muestras de un sinusoides y remuestrearlo a 3/2 la tasa original. Visualice las señales originales y remuestreadas.

tx = 0:6:360-3; x = sin(2*pi*tx/120);  ty = 0:4:360-2; [y,by] = resample(x,3,2);  plot(tx,x,'+-',ty,y,'o:') legend('original','resampled')

Trazar la respuesta de frecuencia del filtro de suavizado.

freqz(by)

Vuelva a muestrear la señal a 2/3 de la velocidad original. Visualice la señal original y su remuestreo.

tz = 0:9:360-9; [z,bz] = resample(x,2,3);  plot(tx,x,'+-',tz,z,'o:') legend('original','resampled')

Trazar la respuesta de impulso del nuevo filtro de paso bajo.

impz(bz)

Utilice los datos registrados por Galileo Galilei en 1610 para determinar el período orbital de Callisto, el más externo de los cuatro satélites más grandes de Júpiter.

Galileo observó el movimiento de los satélites durante seis semanas, a partir del 15 de enero. Las observaciones tienen varios huecos porque Júpiter no era visible en las noches nubladas. Generar una matriz de tiempos de observación.datetime

t = [0 2 3 7 8 9 10 11 12 17 18 19 20 24 25 26 27 28 29 31 32 33 35 37 ...     41 42 43 44 45]'+1;  yg = [10.5 11.5 10.5 -5.5 -10.0 -12.0 -11.5 -12.0 -7.5 8.5 12.5 12.5 ...     10.5 -6.0 -11.5 -12.5 -12.5 -10.5 -6.5 2.0 8.5 10.5 13.5 10.5 -8.5 ...     -10.5 -10.5 -10.0 -8.0]';  obsv = datetime(1610,1,15+t);

Vuelva a muestrear los datos en una cuadrícula normal utilizando una frecuencia de muestreo de una observación por día. Utilice un factor de upsampling moderado de 3 para evitar el sobreajuste.

fs = 1;  [y,ty] = resample(yg,t,fs,3,1);

Trazar los datos y la señal remuestreada.

plot(t,yg,'o',ty,y,'.-') xlabel('Day')

Repita el procedimiento utilizando la interpolación de spline y mostrando las fechas de observación. Exprese la frecuencia de muestreo en días inversos.

fs = 1/86400;  [ys,tys] = resample(yg,obsv,fs,3,1,'spline');  plot(t,yg,'o') hold on plot(ys,'.-') hold off  ax = gca; ax.XTick = t(1:9:end); ax.XTickLabel = char(obsv(1:9:end));

Calcular la estimación del espectro de potencia del periodograma de los datos espaciados uniformemente, interpolados linealmente. Elija una longitud DFT de 1024. La señal alcanza su punto máximo en la inversa del período orbital.

[pxx,f] = periodogram(ys,[],1024,1,'power'); [pk,i0] = max(pxx);  f0 = f(i0); T0 = 1/f0
T0 = 16.7869 
 plot(f,pxx,f0,pk,'o') xlabel('Frequency (day^{-1})')

Argumentos de entrada

contraer todo

Señal de entrada, especificada como vector o matriz. Si es una matriz, sus columnas se tratan como canales independientes. puede contener s. s se tratan como datos que faltan y se excluyen del remuestreo.xxNaNNaN

Ejemplo: es una señal de vector de fila de un solo canal.cos(pi/4*(0:159))+randn(1,160)

Ejemplo: es una señal de dos canales.cos(pi./[4;2]*(0:159))'+randn(160,2)

Tipos de datos: double

Factores de remuestreo, especificados como enteros positivos.

Tipos de datos: double

Número de término de vecino, especificado como un entero positivo. Si es 0, realiza la interpolación del vecino más cercano.nresample La longitud del filtro FIR antialiasing es proporcional a .n Los valores más grandes de proporcionan una mejor precisión a expensas de un mayor tiempo de cálculo.n

Tipos de datos: double

Parámetro de forma de la ventana Kaiser, especificado como un escalar real positivo. El aumento amplía el lóbulo principal de la ventana utilizada para diseñar el filtro antialiasing y disminuye la amplitud de los lóbulos laterales de la ventana.beta

Tipos de datos: double

Coeficientes de filtro FIR, especificados como vector. De forma predeterminada, diseña el filtro utilizando una ventana Kaiser.resamplefirls Al compensar el retardo, se supone que tiene una longitud impar y una fase lineal.resampleb

Ejemplo: especifica un filtro de paso bajo de 4o orden con frecuencia de corte normalizada de 0,5o rad/muestra.fir1(4,0.5)

Tipos de datos: double

Instantáneas de tiempo, especificadas como un vector real no negativo o una matriz. debe aumentar monotoníamente, pero no es necesario que esté nescado uniformemente. puede contener s o s.datetimetxtxNaNNaT Estos valores se tratan como datos que faltan y se excluyen del remuestreo.

Tipos de datos: double | datetime

Frecuencia de muestreo, especificada como escalar positiva. La frecuencia de muestreo es el número de muestras por unidad de tiempo. Si la unidad de tiempo es segundos, entonces la frecuencia de muestreo está en Hz.

Tipos de datos: double

Método de interpolación, especificado como uno de , , o :'linear''pchip''spline'

  • — Interpolación lineal.'linear'

  • — Interpolación cúbica por pieza que conserva la forma.'pchip'

  • — Interpolación de spline utilizando condiciones de extremo no nudo.'spline'

Consulte la página de referencia para obtener más información.interp1

Argumentos de salida

contraer todo

Señal remuestreada, devuelta como vector o matriz. Si es una señal de longitudx N y usted especifica y , entonces es de longitud .pqyN / .pq

Coeficientes de filtro FIR, devueltos como vector.

Instantáneas de salida, devueltas como vector real no negativo.

Algoritmos

realiza un diseño FIR utilizando , normaliza el resultado para tener en cuenta la ganancia de procesamiento de la ventana y, a continuación, implementa un cambio de velocidad mediante .resamplefirlsupfirdn

Capacidades ampliadas

Introducido antes de R2006a