这是一个尝试。
这实际上是反卷积问题中的更简单。它更容易,因为您可能能够有一个独特的答案。 更难的问题是你也不知道这些碎片是什么样子的。这种情况称为盲反卷积。这是一个更难的问题,通常是迭代和统计的(ML 或 MAP),解决方案可能不正确。
幸运的是,您的情况更容易,但仍然不是那么容易,因为您有多个部分:p
我觉得可能就是俗称的混合反卷积吧?
所以让 f[t] for t=1,...N 成为您的长信号。让 h1[t]...hn[t] for t=0,1,2,...M 成为您的短信号。显然这里,N>>M。
所以你的假设是:
(1) f[t] = h1[t+a1[1]]+h1[t+a1[2]] + ...
+h2[t+a2[1]]+h2[t+a2[2]] + ...
+....
+hn[t+an[1]]+h2[t+an[2]] + ...
观察该方程的每一行实际上是 hj * uj,其中 uj 是移位 Kronecker delta 的总和。这里的 * 是卷积。
那么现在呢?
设hj是hj生成的Toeplitz matrix(可能看你怎么看)Toeplitz matrix,那么上面的等式就变成了:
(2) F = H1 U1 + H2 U2 + ... Hn Un
subject to the constraint that uj[k] must be either 0 or 1.
其中 F 是向量 [f[0],...F[N]],Uj 是向量 [uj[0],...uj[N]]。
所以你可以把它改写为:
(3) F = H * U
其中 H = [H1 ... Hn](水平串联)且 U = [U1; ... ;Un](垂直串联)。
H 是一个 Nx(nN) 矩阵。 U 是一个 nN 向量。
好的,所以解空间是有限的。它的大小为 2^(nN)。所以你可以尝试所有可能的组合,看看哪一个组合给你的 ||F - H*U|| 最低,但这会花费太长时间。
您可以做的是使用pseudo-inverse、多线性回归(使用最小二乘,结果为伪逆)或类似方法求解方程(3)
Is it possible to solve a non-square under/over constrained matrix using Accelerate/LAPACK?
然后在 H 的零空间内移动该解,以获得一个受 uj[k] 必须为 0 或 1 的约束的解。
或者,您可以使用 Nelder-Mead 或 Levenberg-Marquardt 之类的东西来找到以下的最小值:
||F - H U|| + lambda g(U)
其中 g 是一个正则化函数,定义为:
g(U) = ||U - U*||
如果|U[j]|
好的,所以我不知道这是否会收敛。如果没有,你必须想出自己的正则化器。当你有一组线性方程时,使用广义非线性优化器有点愚蠢。
实际上,你会有噪音,什么都没有,所以使用 MAP 之类的东西并像以前一样应用小块实际上可能不是一个坏主意。