upfirdn
Upsample, aplique el filtro FIR y downsample
Descripción
yout = upfirdn(xin,h)
filtra la señal de entrada con un filtro FIR con respuesta de impulso.xinh No se implementa ningún muestreo o reducción de muestreo con esta sintaxis.
yout = upfirdn(xin,h,p)
especifica el factor de upsampling entero .p
yout = upfirdn(xin,h,p,q)
especifica el factor de reducción de muestreo entero .q
Ejemplos
Convertir de tasa DAT a velocidad de muestreo de CD
Cambie la frecuencia de muestreo de una señal por un factor de conversión racional de la velocidad DAT de 48 kHz a la frecuencia de muestreo de CD de 44,1 kHz. Utilice la función para encontrar el numerador y el denominador del factor racional.ratLM
Fdat = 48e3; Fcd = 44.1e3; [L,M] = rat(Fcd/Fdat)
L = 147
M = 160
Generar un sinusoides de 1,5 kHz muestreado en
f
DAT durante 0,25 segundos. Trazar el primer milisegundo de la señal.
t = 0:1/Fdat:0.25-1/Fdat; x = sin(2*pi*1.5e3*t); stem(t,x) xlim([0 0.001]) hold on
Diseñe un filtro de paso bajo antialiasing utilizando una ventana Kaiser. Establezca los bordes de la banda del filtro como 90% y 110% de la frecuencia de corte,
(
f
DAT
/
2
)
×
min
(
1
/
L
,
1
/
M
). Especifique una ondulación de banda de paso de 5 dB y una atenuación de banda de parada de 40 dB. Establezca la ganancia de la banda de paso en .L
f = (Fdat/2)*min(1/L,1/M); d = designfilt('lowpassfir', ...'PassbandFrequency',0.9*f,'StopbandFrequency',1.1*f, ... 'PassbandRipple',5,'StopbandAttenuation',40, ... 'DesignMethod','kaiserwin','SampleRate',48e3); h = L*tf(d);
Utilícelo con el filtro para remuestrear el sinusoides.upfirdnh Calcular y compensar el retraso introducido por el filtro. Genere el vector de tiempo remuestreado correspondiente.
y = upfirdn(x,h,L,M); delay = floor(((filtord(d)-1)/2-(L-1))/L); y = y(delay+1:end); t_res = (0:(length(y)-1))/Fcd;
Superponga la señal remuestreada en la gráfica.
stem(t_res,y,'*') legend('Original','Resampled','Location','southeast') hold off
Argumentos de entrada
xin — Señal de entrada
Vector | Matriz
Señal de entrada, especificada por un vector o matriz. Si es un vector, entonces representa una sola señal.xin Si es una matriz, cada columna se filtra de forma independiente.xin
h — Respuesta de impulso del filtro
Vector | Matriz
Filtrar la respuesta de impulso, especificada como vector o matriz. Si es un vector, entonces representa un filtro FIR.h Si es una matriz, cada columna es una secuencia de respuesta de impulso FIR independiente.h
p — Factor de aumento de muestreo
1 (predeterminado) | entero positivo
Factor de muestreo ascendente, especificado por un entero positivo.
q — Factor de reducción de muestreo
1 (predeterminado) | entero positivo
Factor de reducción de muestreo, especificado por un entero positivo.
Argumentos de salida
yout — Señal de salida
Vector | Matriz
Señal de salida, especificada como vector o matriz. Si es un vector, entonces representa una señal.yout Si es una matriz, cada columna es una salida independiente.yout La longitud de la salida, es .youtceil(((length(xin)-1)*p+length(h))/q)
Nota
Puesto que realiza la convolución y el cambio de velocidad, las señales tienen una longitud diferente a .upfirdnyoutxin El número de filas de es aproximadamente veces el número de filas de .youtp/qxin
Sugerencias
Las combinaciones válidas de los tamaños de y son:xinh
es un vector y es un vector.xinh
Las entradas son un filtro y una señal, por lo que la función confunde con .xinh La señal de salida es un vector de fila si es un vector de fila; de lo contrario, es un vector de columna.youtxinyout
es una matriz y es un vector.xinh
Las entradas son un filtro y muchas señales, por lo que la función se corresponde con cada columna de .hxin El resultado es una matriz con el mismo número de columnas que .youtxin
es un vector y es una matriz.xinh
Las entradas son múltiples filtros y una señal, por lo que la función confunde cada columna de con .hxin El resultado es una matriz con el mismo número de columnas que .youth
es una matriz y es una matriz, ambas con el mismo número de columnas.xinh
Las entradas son múltiples filtros y múltiples señales, por lo que la función confunde las columnas correspondientes de y .xinh El resultado es una matriz con el mismo número de columnas que y .youtxinh
Algoritmos
utiliza una estructura de interpolación polifásica.upfirdn El número de operaciones de multiplicar y añadir en la estructura polifásica es aproximadamente (LhLx – Plx)/ dondeq Lh Y
Lx son las longitudes de ( ) y ( ), respectivamente.hnxn
Un recuento de fracasos más preciso se calcula en el programa, pero el recuento exacto sigue siendo aproximado. Para señales largas ( ), la fórmula es a menudo exacta.xn
realiza una cascada de tres operaciones:upfirdn
Subir la muestra de los datos de entrada en la matriz por un factor del entero (inserción de ceros)xinp
Filtra los datos de señal amplificados con la secuencia de respuesta de impulso dada en el vector o matrizh
Muestra descendente del resultado por un factor del entero (tirar muestras de distancia)q
El filtro FIR suele ser un filtro de paso bajo, que debe diseñar utilizando otra función como o .firpmfir1
Nota
La función realiza un diseño FIR utilizando , seguido de la modificación de velocidad implementada con .resamplefirlsupfirdn
Referencias
[1] Crochiere, R. E., and Lawrence R.
Rabiner. Multirate Digital Signal Processing. Englewood Cliffs, NJ:
Prentice-Hall, 1983, pp. 88–91.
[2] Crochiere, R. E. “A General
Program to Perform Sampling Rate Conversion of Data by Rational Ratios.”
Programs for Digital Signal Processing (Digital Signal Processing
Committee of the IEEE Acoustics, Speech, and Signal Processing Society, eds.). New York: IEEE
Press, 1979, Programs 8.2-1–8.2-7.
Capacidades ampliadas
Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.
Usage notes and limitations:
La generación de código C y C++ para aplicaciones de software requiere software.upfirdnDSP System Toolbox™
Los coeficientes de filtro, el factor de muestreo ascendente y el factor de reducción de muestreo deben ser constantes. Se permiten expresiones o variables si sus valores no cambian.
No se admiten entradas de tamaño variable.
Introducido antes de R2006a