假设我有一个长且不规则的数字信号,由在不同时间出现(并且相互重叠)的较小但不规则的信号组成。我们将这些较短的信号称为构成较大信号的“片段”。“不规则”是指它不是特定的频率或模式。
鉴于长信号,我需要找到产生(尽可能接近)较大信号的部件的最佳排列。我知道这些片段是什么样子,但我不知道它们中有多少存在于完整信号中(或者任何片段存在于完整信号中的多少次)。你会用什么软件算法来做这个优化?我在网上搜索什么来获得解决此问题的帮助?
假设我有一个长且不规则的数字信号,由在不同时间出现(并且相互重叠)的较小但不规则的信号组成。我们将这些较短的信号称为构成较大信号的“片段”。“不规则”是指它不是特定的频率或模式。
鉴于长信号,我需要找到产生(尽可能接近)较大信号的部件的最佳排列。我知道这些片段是什么样子,但我不知道它们中有多少存在于完整信号中(或者任何片段存在于完整信号中的多少次)。你会用什么软件算法来做这个优化?我在网上搜索什么来获得解决此问题的帮助?
这是一个尝试。
这实际上是反卷积问题中更容易的一个。它更容易,因为您可能能够有一个独特的答案。更难的问题是你也不知道这些碎片是什么样子的。这种情况称为盲反卷积。这是一个更难的问题,通常是迭代和统计的(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 矩阵(可能取决于你如何看待它),那么上面的等式变为:
(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|| 最低,但这将花费太长时间。
你可以做的是使用伪逆解方程(3) ,多元线性回归(使用最小二乘,得出伪逆)或类似的东西
是否可以使用 Accelerate/LAPACK 求解非方形欠/过约束矩阵?
然后在 H 的零空间内移动该解,以得到一个受 uj[k] 必须为 0 或 1 约束的解。
或者,您可以使用Nelder-Mead或Levenberg-Marquardt之类的方法来找到以下各项的最小值:
||F - H U|| + lambda g(U)
其中 g 是一个正则化函数,定义为:
g(U) = ||U - U*||
如果 |U[j]|<|U[j]-1|,则 U*[j] = 0,否则为 1
好的,所以我不知道这是否会收敛。如果没有,你必须想出自己的正则化器。当您有一组线性方程时,使用广义非线性优化器有点愚蠢。
实际上,您会遇到噪音等等,因此使用MAP之类的东西并像以前一样应用小块实际上可能不是一个坏主意。