deconv
Deconvolución de mínimos cuadrados y división polinomial
Descripción
División larga polinomial
[
deconvoluciona un vector x
,r
] = deconv(y
,h
)h
a partir de un vector y
utilizando la división larga polinomial, 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)
, dondealgorithm
puede 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
División polinómica
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
Deconvolución de mínimos cuadrados de una señal totalmente convolucionada
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 polinomial 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")
Deconvolución de mínimos cuadrados de la parte central de una señal convolucionada
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-14 ×
0 0.0888 0.1776 0 0 0 0
Problema de deconvolución de mínimos cuadrados con soluciones infinitas
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 = -3.3307e-16
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.
Especificar el factor de regularización para señales ruidosas
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
y
— Señal de entrada que se desea deconvolucionar
vector fila o columna
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í
h
— Respuesta al impulso o filtro utilizado en la deconvolución
vector fila o columna
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
y
oh
, 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)
,deconv
devuelve las salidas comox = 0
yr = y
.
Tipos de datos: double
| single
Soporte de números complejos: Sí
shape
— Subsección de la señal convolucionada
"full"
(predeterminado) | "same"
| "valid"
Desde R2023b
Subsección de la señal convolucionada, especificada como uno de estos valores:
"full"
(valor predeterminado):y
contiene la convolución completa dex
conh
."same"
:y
contiene la parte central de la convolución que tiene el mismo tamaño quex
."valid"
:y
contiene 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)
Method
— Método de deconvolución
"long-division"
(predeterminado) | "least-squares"
Desde R2023b
Método de deconvolución, especificado como uno de estos valores:
"long-division"
: deconvolución por división larga polinomial (predeterminado)."least-squares"
: deconvolución por mínimos cuadrados, donde la señal deconvolucionadax
se calcula para minimizar la norma de la señal residual (o resto)r
. Es decir,x
es la solución que minimizanorm(y - conv(x,h))
.
RegularizationFactor
— Factor de regularización de Tikhonov
0
(predeterminado) | número real
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
x
— Señal deconvolucionada o cociente de la división
vector fila o columna
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
r
— Señal residual o resto de la división
vector fila o columna
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
Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.
Notas y limitaciones de uso:
Consulte Variable-Sizing Restrictions for Code Generation of Toolbox Functions (MATLAB Coder).
Entorno basado en subprocesos
Ejecute código en segundo plano con MATLAB® backgroundPool
o acelere código con Parallel Computing Toolbox™ ThreadPool
.
Esta función es totalmente compatible con entornos basados en subprocesos. Para obtener más información, consulte Ejecutar funciones de MATLAB en un entorno basado en subprocesos.
Arreglos GPU
Acelere código mediante la ejecución en una unidad de procesamiento gráfico (GPU) mediante Parallel Computing Toolbox™.
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 on a GPU (Parallel Computing Toolbox).
Arreglos distribuidos
Realice particiones de arreglos grandes por toda la memoria combinada de su cluster mediante Parallel Computing Toolbox™.
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 R2006aR2023b: Realizar una deconvolución de mínimos cuadrados con diferentes subsecciones convolucionadas
Puede 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 polinomial. 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.
Comando de MATLAB
Ha hecho clic en un enlace que corresponde a este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB. Los navegadores web no admiten comandos de MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)