deconv
最小二乘反卷积和多项式除法
说明
多项式长除法
最小二乘反卷积
自 R2023b 起
[
支持上述语法中的任何输入参量组合,且可使用一个或多个名称-值参量指定选项。x
,r
] = deconv(___,Name=Value
)
您可以使用
deconv(__,Method=algorithm)
指定反卷积方法,其中algorithm
可以是"long-division"
或"least-squares"
。您还可以使用
deconv(__,RegularizationFactor=alpha)
将吉洪诺夫正则化因子指定为反卷积方法的最小二乘解。
示例
多项式除法
创建两个向量 y
和 h
,分别包含多项式 和 的系数。通过对 y
进行反卷积以消除 h
,将第一个多项式除以第二个多项式。反卷积得出与多项式 对应的商系数以及与 对应的余数系数。
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
全卷积信号的最小二乘反卷积
自 R2023b 起
创建一个具有高斯形状的信号 x
。将此信号与包含随机噪声的冲激响应 h
求卷积。
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);
绘制原始信号、冲激响应和卷积信号。
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")
接下来,使用默认多项式长除法方法,求出信号 y
关于冲激响应 h
的反卷积。使用这种方法时,反卷积计算不稳定,结果可以迅速增大。
[x1,r1] = deconv(y,h); x1(end)
ans = 7.5992e+90
相反,使用最小二乘法求反卷积会执行数值稳定的计算。
[x2,r2] = deconv(y,h,Method="least-squares");
绘制两个反卷积结果。此处,最小二乘法正确地返回了具有高斯形状的原始信号。
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")
卷积信号中心部分的最小二乘反卷积
自 R2023b 起
创建两个向量。计算与 xin
大小相同的 xin
和 h
的卷积的中心部分。卷积信号 y 的中心部分的长度为 7,而不是全长 length(xin)+length(h)-1
(即 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
求出信号 y
关于冲激响应 h
的最小二乘反卷积。使用 "same"
选项指定卷积信号 y
仅为中心部分,其中 y = conv(x,h,"same") + r
。显示 deconv
在舍入误差内还原了 x
中的原始信号。
[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
具有无限个解的最小二乘反卷积问题
自 R2023b 起
创建两个向量,每个向量包含两个元素,并使用 "valid"
选项求其卷积。此选项仅返回计算的没有补零边缘的卷积部分。在本例中,卷积信号 y
只有一个元素。
xin = [-1 2];
h = [2 5];
y = conv(xin,h,"valid")
y = -1
求卷积信号 y
关于冲激响应 h
的最小二乘反卷积。使用 "valid"
选项时,deconv
并不始终返回 x
中的原始信号,而是返回最小化 norm(x)
的反卷积问题的解。
[x,r] = deconv(y,h,"valid",Method="least-squares")
x = 1×2
-0.1724 -0.0690
r = -3.3307e-16
要检查该解,您可以求计算信号 x
与 h
的全卷积。此卷积信号的中心部分与定义反卷积问题的原始 y
相同。
yfull = conv(x,h,"full")
yfull = 1×3
-0.3448 -1.0000 -0.3448
在此问题中,deconv
返回与原始信号不同的信号,因为它求解一个具有两个变量的方程,即 。此方程组是欠定方程组,意味着此方程组的变量数目多于方程数目。当使用最小二乘法将残差范数(即 norm(y - conv(x,h,"valid"))
)最小化到 0 时,此方程组有无限个解。因此,deconv
也求出一个最小化 norm(x)
的解。
下图说明了此欠定问题的情况。蓝线表示方程 的无限多个解。橙色圆圈表示从原点到解线的最小距离。deconv
返回的解在这条线与圆圈之间的切点上,指示离原点最近的解。
为含噪信号指定正则化因子
自 R2023b 起
创建两个信号 x
和 h
,并求其卷积。对 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));
绘制原始信号、冲激响应和卷积信号。
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")
接下来,通过使用没有正则化因子的最小二乘法,求含噪信号 y
关于冲激响应 h
的反卷积。默认情况下,正则化因子为 0。
[x1,r1] = deconv(y,h,Method="least-squares");
绘制原始信号和反卷积信号。此处,没有正则化因子的 deconv
函数无法从含噪信号中还原原始信号。
figure; tiledlayout(3,1); nexttile plot(n,x) title("Original Signal") nexttile plot(n,x1) title("Deconvolved Signal Without Regularization");
改为通过使用正则化因子为 1
的最小二乘法,求 y
关于 h
的反卷积。对于病态反卷积问题,例如涉及含噪信号的问题,您可以指定正则化因子以便在最小二乘解中不会出现过拟合。
[x2,r2] = deconv(y,h,Method="least-squares",RegularizationFactor=1);
绘制此反卷积信号。此处,具有指定正则化因子的 deconv
函数还原原始信号。
nexttile
plot(n,x2)
title("Deconvolved Signal Using Regularization")
输入参数
y
— 要反卷积的输入信号
行或列向量
要反卷积的输入信号,指定为行向量或列向量。
数据类型: double
| single
复数支持: 是
h
— 用于反卷积的冲激响应或滤波器
行或列向量
用于反卷积的冲激响应或滤波器,指定为行向量或列向量。y
和 h
可以有不同长度和数据类型。
如果
y
和h
中有一个或两个都是single
类型,则输出的类型也是single
。否则,输出的类型为double
。输入的长度应满足
length(h) <= length(y)
。但是,如果length(h) > length(y)
,则deconv
返回的输出为x = 0
和r = y
。
数据类型: double
| single
复数支持: 是
shape
— 卷积信号的分段
"full"
(默认) | "same"
| "valid"
自 R2023b 起
卷积信号的分段,指定为以下值之一:
"full"
(默认值)-y
包含x
与h
的全卷积。"same"
-y
包含与x
大小相同的卷积的中心部分。"valid"
-y
仅包含计算的没有补零边缘的卷积部分。使用此选项时,length(y)
是max(length(x)-length(h)+1,0)
,但length(h)
为零时除外。如果length(h) = 0
,则length(y) = length(x)
。
名称-值参数
将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参量名称,Value
是对应的值。名称-值参量必须出现在其他参量之后,但参量对组的顺序无关紧要。
示例: [x,r] = deconv(y,h,Method="least-squares",RegularizationFactor=1e-3)
Method
— 反卷积方法
"long-division"
(默认) | "least-squares"
自 R2023b 起
反卷积方法,指定为下列值之一:
"long-division"
- 通过多项式长除法(默认值)进行反卷积。"least-squares"
- 通过最小二乘法进行反卷积,其中计算反卷积信号x
以最小化残差信号的范数(或余数)r
。也就是说,x
是最小化norm(y - conv(x,h))
的解。
RegularizationFactor
— 吉洪诺夫正则化因子
0
(默认) | 实数
自 R2023b 起
最小二乘反卷积的吉洪诺夫正则化因子,指定为实数。使用最小二乘反卷积方法时,将正则化因子指定为 alpha
会返回最小化 norm(r)^2 + norm(alpha*x)^2
的向量 x
。对于病态问题,指定正则化因子会优先考虑具有较小范数的解 x
。
如果使用默认长除法反卷积方法,则 RegularizationFactor
必须为 0
。
数据类型: double
| single
输出参量
x
— 经除法运算后得到的反卷积信号或商
行或列向量
经除法运行后得到的反卷积信号或商,以行向量或列向量形式返回,以使 y = conv(x,h) + r
。
数据类型: double
| single
r
— 经除法运算后得到的残差信号或余数
行或列向量
经除法运算后得到的残差信号或余数,以行向量或列向量形式返回,以使 y = conv(x,h) + r
。
数据类型: double
| single
参考
[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.
扩展功能
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
分布式数组
使用 Parallel Computing Toolbox™ 在集群的组合内存中对大型数组进行分区。
版本历史记录
在 R2006a 之前推出R2023b: 用不同卷积分段执行最小二乘反卷积
现在,您可以通过将 Method
名称-值参量指定为 "least-squares"
来执行最小二乘反卷积。您还可以在最小二乘反卷积中指定不同卷积分段和吉洪诺夫正则化因子。
在以前的版本中,deconv
只能使用多项式长除法方法来执行反卷积。新参量允许您执行最小二乘反卷积 (Method="least-squares"
),与默认长除法反卷积 (Method="long-division"
) 相比,它会返回更稳定的解。
当使用最小二乘法求信号 y
关于冲激响应 h
的反卷积时,deconv
会返回使残差信号范数(或余数)r = y - conv(x,h)
最小的信号 x
。也就是说,x
是最小化 norm(r)
的解。您还可以指定吉洪诺夫正则化因子 alpha
来返回解 x
,该解最小化病态问题的 norm(r)^2 + norm(alpha*x)^2
。
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 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)