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, entonces trata cada columna como un canal independiente. aplica un filtro paso bajo FIR de antialiasing y compensa el retardo introducido por el filtro.xresamplexresamplex

y = resample(x,p,q,n) utiliza un filtro de antialiasing de orden 2 × × máx (,).npq

ejemplo

y = resample(x,p,q,n,beta) especifica el parámetro de forma de la ventana de 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 aplicados 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 interpolar linealmente sobre un vector de instantes espaciados uniformemente con los mismos puntos finales y el número de muestras como. s se tratan como datos faltantes y se ignoran.xtxNaN

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

y = resample(x,tx,fs,p,q) interpolar la señal de entrada a una rejilla uniforme intermedia con un espaciado de muestreo de (/)/.pqfs A continuación, la función filtra el resultado para remuestrearlo y reducir su muestreo, lo que resulta en una tasa de muestreo final de.pqfs Para obtener los mejores resultados, asegúrese de que ×/es 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.Note:xinterp1'pchip'

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

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

Ejemplos

contraer todo

Remuestrear una secuencia lineal simple a 3/2 la tasa original de 10 Hz. Trace 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, asume que la secuencia de entrada,, es cero antes y después de las muestras que se da.resamplex Las desviaciones grandes 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 desplazada verticalmente de la secuencia con puntos de conexión 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')

Construya 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 trama de tallo de la señal. Superponer un gráfico de paso de escaleras para la visualización de muestra 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 elevar la señal por un factor de cuatro.resample Utilice la configuración predeterminada. Trace el resultado junto a 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 = 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 de Kaiser. Salida del filtro, así como 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 aliasing que resultan del lóbulo mainwide relativamente ancho y la atenuación de baja mínimos de la ventana.

Aumente a 5 y dejen

<math display="block">
<mrow>
<mi>β</mi>
<mo>=</mo>
<mn>0</mn>
</mrow>
</math>
. Compruebe que el filtro es de orden 40. Trace 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 aliasing. También atenúa la señal.

Deje el orden de 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 aumente 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 de alta mínimos 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 dejar
<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 amplio genera artefactos considerables tras el remuestreo.

Genere 60 muestras de una sinusoide y remuestrea 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')

Trace la respuesta de frecuencia del filtro de suavizado.

freqz(by)

Remuestrear la señal a 2/3 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')

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

impz(bz)

Utilice los datos grabados 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ó la moción de los satélites durante seis semanas, comenzando el 15 de enero. Las observaciones tienen varias lagunas porque Júpiter no era visible en las noches nublados. Genere una serie 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);

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

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

Graficar los datos y la señal remuestreada.

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

Repita el procedimiento utilizando la interpolación 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));

Calcule la estimación del espectro de potencia periodograma de los datos interpolados linealmente espaciadas uniformemente. Elija una longitud de DFT de 1024. Los picos de la señal en el inverso 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 faltantes 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 = 0, realiza la interpolación de vecino más cercano.nresample La longitud del filtro FIR de antialiasing es proporcional a.n Los valores más grandes de proporcionar una mejor precisión a expensas de más tiempo de cálculo.n

Tipos de datos: double

Parámetro Shape de la ventana de Kaiser, especificado como un escalar real positivo. El aumento ensancha el lóbulo principal de la ventana utilizada para diseñar el filtro de suavizado de contorno y disminuye la amplitud de las líneas laterales de la ventana.beta

Tipos de datos: double

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

Ejemplo: especifica un filtro de paso bajo de orden 4 con frecuencia de corte normalizada 0,5 π Rad/sample.fir1(4,0.5)

Tipos de datos: double

Instantes de tiempo, especificados como un vector real no negativo o una matriz. debe aumentar monótona pero no necesita espaciarse uniformemente. puede contener s o s.datetimetxtxNaNNaT Estos valores se tratan como datos faltantes y se excluyen del remuestreo.

Tipos de datos: double | datetime

Frecuencia de muestreo, especificada como un escalar positivo. La frecuencia de muestreo es el número de muestras por unidad de tiempo. Si la unidad de tiempo es de 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 de forma de conservación de formas.'pchip'

  • — Interpolación de spline utilizando condiciones de extremo sin 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 se especifica y, a continuación, es de longitud ⌈pqyN ×/⌉.pq

Coeficientes de filtro FIR, devueltos como vector.

Instantes de salida, devueltos como un 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 utilizando.resamplefirlsupfirdn

Capacidades ampliadas

Introducido antes de R2006a