2

假设我有一个长且不规则的数字信号,由在不同时间出现(并且相互重叠)的较小但不规则的信号组成。我们将这些较短的信号称为构成较大信号的“片段”。“不规则”是指它不是特定的频率或模式。

鉴于长信号,我需要找到产生(尽可能接近)较大信号的部件的最佳排列。我知道这些片段是什么样子,但我不知道它们中有多少存在于完整信号中(或者任何片段存在于完整信号中的多少次)。你会用什么软件算法来做这个优化?我在网上搜索什么来获得解决此问题的帮助?

4

1 回答 1

1

这是一个尝试。

这实际上是反卷积问题中更容易的一个。它更容易,因为您可能能够有一个独特的答案。更难的问题是你也不知道这些碎片是什么样子的。这种情况称为盲反卷积。这是一个更难的问题,通常是迭代和统计的(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-MeadLevenberg-Marquardt之类的方法来找到以下各项的最小值:

  ||F - H U|| + lambda g(U)

其中 g 是一个正则化函数,定义为:

   g(U) = ||U - U*||

如果 |U[j]|<|U[j]-1|,则 U*[j] = 0,否则为 1

好的,所以我不知道这是否会收敛。如果没有,你必须想出自己的正则化器。当您有一组线性方程时,使用广义非线性优化器有点愚蠢。

实际上,您会遇到噪音等等,因此使用MAP之类的东西并像以前一样应用小块实际上可能不是一个坏主意。

于 2013-02-09T09:04:31.073 回答