deconv
Deconvolución de mínimos cuadrados y división de polinomios
Descripción
División larga de polinomios
[ deconvoluciona un vector x,r] = deconv(y,h)h a partir de un vector y utilizando la división larga de polinomios, y devuelve el cociente x y el resto r de manera que y = conv(x,h) + r. Si y y h son vectores de coeficientes polinómicos, la desconvolución es equivalente a dividir el polinomio representado por y por el polinomio representado por h.
Deconvolución de mínimos cuadrados
Desde R2023b
[ especifica las subsecciones de la señal convolucionada x,r] = deconv(y,h,shape)y, donde y = conv(x,h,shape) + r.
Si utiliza el método de deconvolución de mínimos cuadrados (Method="least-squares"), puede especificar shape como "full", "same" o "valid". No obstante, si utiliza el método de deconvolución de división larga predeterminado (Method="long-division"), shape debe ser "full".
[ especifica opciones utilizando uno o más argumentos nombre-valor, además de cualquiera de las combinaciones de argumentos de entrada de las sintaxis anteriores.x,r] = deconv(___,Name=Value)
Puede especificar el método de deconvolución mediante
deconv(__,Method=algorithm), dondealgorithmpuede ser"long-division"o"least-squares".También puede especificar el factor de regularización de Tikhonov en la solución de mínimos cuadrados del método de deconvolución mediante
deconv(__,RegularizationFactor=alpha).
Ejemplos
Cree dos vectores, y y h, que contengan los coeficientes de los polinomios y , respectivamente. Divida el primer polinomio por el segundo deconvolucionando h a partir de y. La deconvolución da como resultado los coeficientes del cociente correspondientes al polinomio y los coeficientes del resto correspondientes a .
y = [2 7 4 9]; h = [1 0 1]; [x,r] = deconv(y,h)
x = 1×2
2 7
r = 1×4
0 0 2 2
Desde R2023b
Cree una señal x que tenga forma gaussiana. Convolucione esta señal mediante una respuesta al impulso h que consiste en ruido aleatorio.
N = 200;
n = 0.1*(1:N);
rng("default")
x = 2*exp(-0.5*((n-10)).^2);
h = 0.1*randn(1,length(x));
y = conv(x,h);Represente la señal original, la respuesta al impulso y la señal convolucionada.
figure tiledlayout(3,1) nexttile plot(n,x) title("Original Signal") nexttile plot(n,h) title("Impulse Response") nexttile plot(0.1*(1:length(y)),y) title("Convolved Signal")

A continuación, busque la deconvolución de la señal y con respecto a la respuesta al impulso h mediante el método de división larga de polinomios predeterminado. Con este método, el cálculo de la deconvolución es inestable y el resultado puede aumentar rápidamente.
[x1,r1] = deconv(y,h); x1(end)
ans = 7.5992e+90
En su lugar, busque la deconvolución utilizando el método de mínimos cuadrados para obtener cálculos numéricamente estables.
[x2,r2] = deconv(y,h,Method="least-squares");Represente los dos resultados de la deconvolución. Aquí, el método de mínimos cuadrados devuelve correctamente la señal original que tiene forma gaussiana.
figure tiledlayout(2,1) nexttile plot(n,x1) title("Deconvolved Signal Using ""long-division"" Method") nexttile plot(n,x2) title("Deconvolved Signal Using ""least-squares"" Method")

Desde R2023b
Cree dos vectores. Encuentre la parte central de la convolución de xin y h que tenga el mismo tamaño que xin. La parte central de la señal convolucionada y tiene una longitud de 7 en lugar de la longitud completa, que es length(xin)+length(h)-1 o 10.
xin = [-1 2 3 -2 0 1 2];
h = [2 4 -1 1];
y = conv(xin,h,"same")y = 1×7
15 5 -9 7 6 7 -1
Encuentre la deconvolución de mínimos cuadrados de la señal y con respecto a la respuesta al impulso h. Utilice la opción "same" para especificar que la señal convolucionada y es solo la parte central, donde y = conv(x,h,"same") + r. Muestre que deconv recupera la señal original en x dentro de errores de redondeo.
[x,r] = deconv(y,h,"same",Method="least-squares")
x = 1×7
-1.0000 2.0000 3.0000 -2.0000 0.0000 1.0000 2.0000
r = 1×7
10-15 ×
0 0.8882 0 0 0 0 0
Desde R2023b
Cree dos vectores, cada uno con dos elementos, y convoluciónelos utilizando la opción "valid". Esta opción solo devuelve las partes de la convolución que se calculan sin los bordes con relleno de ceros. En este caso, la señal convolucionada y tiene un único elemento.
xin = [-1 2];
h = [2 5];
y = conv(xin,h,"valid")y = -1
Busque la deconvolución de mínimos cuadrados de la señal convolucionada y con respecto a la respuesta al impulso h. Con la opción "valid", deconv no siempre devuelve la señal original en x, pero devuelve la solución del problema de deconvolución que minimiza norm(x) en su lugar.
[x,r] = deconv(y,h,"valid",Method="least-squares")
x = 1×2
-0.1724 -0.0690
r = 0
Para comprobar la solución, puede buscar la convolución completa de la señal calculada x con h. La parte central de esta señal convolucionada es la misma que la original y que definió el problema de deconvolución.
yfull = conv(x,h,"full")yfull = 1×3
-0.3448 -1.0000 -0.3448
En este problema, deconv devuelve una señal diferente a la original porque resuelve una ecuación con dos variables, que es . Este sistema es subdeterminado, es decir, que tiene más variables que ecuaciones. Este sistema tiene soluciones infinitas cuando se usa el método de mínimos cuadrados para minimizar la norma residual, o norm(y - conv(x,h,"valid")), a 0. Por este motivo, deconv también busca una solución que minimice norm(x).
La siguiente figura ilustra la situación de este problema subdeterminado. La línea azul representa el número infinito de soluciones de la ecuación . El círculo naranja representa la distancia mínima desde el origen hasta la línea de las soluciones. La solución devuelta por deconv se encuentra en el punto de la tangente entre la línea y el círculo, e indica la solución que se acerca más al origen.

Desde R2023b
Cree dos señales, x y h, y convoluciónelas. Añada ruido aleatorio a la señal convolucionada en y.
N = 200;
n = 0.1*(1:N);
rng("default")
x = 2*exp(-0.8*(n - 8).^2) - 4*exp(-2*(n - 10).^2);
h = 2.*exp(-1*(n - 5).^2).*cos(4*n);
y = conv(x,h);
y = y + max(y)*0.05*randn(1,length(y));Represente la señal original, la respuesta al impulso y la señal convolucionada.
figure tiledlayout(3,1) nexttile plot(n,x) title("Original Signal") nexttile plot(n,h) title("Impulse Response") nexttile plot(0.1*(1:length(y)),y) title("Convolved Signal with Added Noise")

A continuación, busque la deconvolución de la señal ruidosa y con respecto a la respuesta al impulso h mediante el método de mínimos cuadrados sin factor de regularización. De forma predeterminada, el factor de regularización es 0.
[x1,r1] = deconv(y,h,Method="least-squares");Represente la señal original y la señal deconvolucionada. Aquí, la función deconv sin un factor de regularización no puede recuperar la señal original a partir de la señal ruidosa.
figure; tiledlayout(3,1); nexttile plot(n,x) title("Original Signal") nexttile plot(n,x1) title("Deconvolved Signal Without Regularization");

En su lugar, busque la deconvolución de y con respecto a h mediante el método de mínimos cuadrados con un factor de regularización de 1. Para un problema de deconvolución mal condicionado, como uno en el que haya señales ruidosas, puede especificar un factor de regularización para que no se produzca un sobreajuste en la solución de mínimos cuadrados.
[x2,r2] = deconv(y,h,Method="least-squares",RegularizationFactor=1);Represente esta señal deconvolucionada. Aquí, la función deconv con un factor de regularización específico recupera la señal original.
nexttile
plot(n,x2)
title("Deconvolved Signal Using Regularization")
Argumentos de entrada
Señal de entrada que se desea deconvolucionar, especificada como vector fila o vector columna.
Tipos de datos: double | single
Soporte de números complejos: Sí
Respuesta al impulso o filtro utilizado en la deconvolución, especificados como vectores fila o columna. y y h pueden tener longitudes y tipos de datos diferentes.
Si
yoh, o ambos, son de tiposingle, las salidas también serán de tiposingle. De lo contrario, las salidas serán de tipodouble.Las longitudes de las entradas deben satisfacer
length(h) <= length(y). Sin embargo, silength(h) > length(y),deconvdevuelve las salidas comox = 0yr = y.
Tipos de datos: double | single
Soporte de números complejos: Sí
Desde R2023b
Subsección de la señal convolucionada, especificada como uno de estos valores:
"full"(valor predeterminado):ycontiene la convolución completa dexconh."same":ycontiene la parte central de la convolución que tiene el mismo tamaño quex."valid":ycontiene solo las partes de la convolución que se calculan sin los bordes con relleno de ceros. Con esta opción,length(y)esmax(length(x)-length(h)+1,0), excepto cuandolength(h)es cero. Silength(h) = 0, entonceslength(y) = length(x).
Argumentos de par nombre-valor
Especifique pares opcionales de argumentos como Name1=Value1,...,NameN=ValueN, donde Name es el nombre del argumento y Value es el valor correspondiente. Los argumentos nombre-valor deben aparecer después de otros argumentos, pero el orden de los pares no importa.
Ejemplo: [x,r] = deconv(y,h,Method="least-squares",RegularizationFactor=1e-3)
Desde R2023b
Método de deconvolución, especificado como uno de estos valores:
"long-division": deconvolución por división larga de polinomios (predeterminado)."least-squares": deconvolución por mínimos cuadrados, donde la señal deconvolucionadaxse calcula para minimizar la norma de la señal residual (o resto)r. Es decir,xes la solución que minimizanorm(y - conv(x,h)).
Desde R2023b
Factor de regularización de Tikhonov para la deconvolución de mínimos cuadrados, especificado como un número real. Al utilizar el método de deconvolución de mínimos cuadrados, si se especifica el factor de regularización como alpha, se devuelve un vector x que minimiza norm(r)^2 + norm(alpha*x)^2. Para problemas mal condicionados, especificar el factor de regularización da preferencia a las soluciones x con normas más pequeñas.
Si utiliza el método de deconvolución de división larga predeterminado, RegularizationFactor debe ser 0.
Tipos de datos: double | single
Argumentos de salida
Señal deconvolucionada o cociente de la división, devueltos como un vector fila o columna tal que y = conv(x,h) + r.
Tipos de datos: double | single
Señal residual o resto de la división, devueltos como un vector fila o columna tal que y = conv(x,h) + r.
Tipos de datos: double | single
Referencias
[1] Nagy, James G. “Fast Inverse QR Factorization for Toeplitz Matrices.” SIAM Journal on Scientific Computing 14, no. 5 (September 1993): 1174–93. https://doi.org/10.1137/0914070.
Capacidades ampliadas
Notas y limitaciones de uso:
Para los argumentos de entrada
yyh:Debe especificar el vector de entrada como un vector de tamaño fijo o de longitud variable en el tiempo de generación del código. La primera o la segunda dimensión del vector pueden ser de tamaño variable. El resto de dimensiones debe tener un tamaño fijo de 1.
Consulte las notas y limitaciones de uso en la sección de generación de código C/C++. Las mismas notas y limitaciones de uso son aplicables a la generación de código GPU.
La función deconv es totalmente compatible con entornos basados en subprocesos. Para obtener más información, consulte Ejecutar funciones de MATLAB en entornos basados en subprocesos.
La función deconv es compatible con entradas de arreglos de GPU con estas notas y limitaciones de uso:
No se admite la especificación de la respuesta al impulso o el filtro
hcomo un objetogpuArraydisperso.No se admite el método de deconvolución
"least-squares".
Para obtener más información, consulte Run MATLAB Functions on a GPU (Parallel Computing Toolbox).
La función deconv es compatible con arreglos distribuidos con estas notas y limitaciones de uso:
No se admite el método de deconvolución
"least-squares".
Para obtener más información, consulte Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox).
Historial de versiones
Introducido antes de R2006aPuede realizar una deconvolución de mínimos cuadrados especificando el argumento nombre-valor Method como "least-squares". También puede especificar subsecciones convolucionadas diferentes y el factor de regularización de Tikhonov con deconvolución de mínimos cuadrados.
En versiones anteriores, deconv podía realizar una deconvolución utilizando solo el método de división larga de polinomios. Los nuevos argumentos permiten realizar deconvoluciones de mínimos cuadrados (Method="least-squares"), que devuelven soluciones más estables en comparación con la deconvolución de división larga predeterminada (Method="long-division").
Al utilizar el método de mínimos cuadrados para deconvolucionar una señal y con respecto a una respuesta al impulso h, deconv devuelve la señal x que minimiza la norma de la señal residual (o resto) r = y - conv(x,h). Es decir, x es la solución que minimiza norm(r). También puede especificar el factor de regularización de Tikhonov alpha para devolver una solución x que minimice norm(r)^2 + norm(alpha*x)^2 para todos los problemas mal condicionados.
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Seleccione un país/idioma
Seleccione un país/idioma para obtener contenido traducido, si está disponible, y ver eventos y ofertas de productos y servicios locales. Según su ubicación geográfica, recomendamos que seleccione: .
También puede seleccionar uno de estos países/idiomas:
Cómo obtener el mejor rendimiento
Seleccione China (en idioma chino o inglés) para obtener el mejor rendimiento. Los sitios web de otros países no están optimizados para ser accedidos desde su ubicación geográfica.
América
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)