% Define the parameters
start = 10;
offset = 2;
len = 20;
a = 5;
b = 25;
% Create A and B from a random array S.
S = randi(30,1,100);
A = S(start:start+len-1);
B = S(start+offset:start+offset+len-1);
% We compute R
R = a*A+b*B;
% We create our system of linear equation:
M = cat(2,diag(ones(len,1)*a),zeros(len,offset))+cat(2,zeros(len,offset),diag(ones(len,1)*b));
% We solve the system
S_theta = (M\R.').'
4条答案
按热度按时间gjmwrych1#
关系式
R=a*A + b*B
可以写成convolution
c=conv([b,0,0,0,a], S)
,其中第一信号中零的数目等于shift-2
或5-2==3
。因此,我们可以使用
deconvolution
来计算S
:注意,在反褶积中,
a
是第一个元素,b
是最后一个元素。结果与原始
S
* 几乎 * 相同,并且它只包含A
和B
共享的S
部分。vzgqcmou2#
实际上,你有一个线性系统,其中变量的数量等于
numel(R)+shift
,方程的数量等于numel(R)
,我认为你不可能得到你想要的结果,因为未知变量的数量总是比方程的数量多:sxpgvts33#
你有一个超定方程组,所以你不能得到精确的结果,但是matlab完全能够估计出这样一个方程组的解:
让我们将S_theta与S进行比较:
结果:
注意到结果会更好,如果:
1.偏移量较小(方程组中的未知量较少)
qyswt5oh4#
将
shift
个零分别打在S的前面(或后面),将前者乘以a
,后者乘以b
,然后将它们相加,这将问题简化为子串搜索,您可以使用暴力或更复杂的方法;见https://en.wikipedia.org/wiki/String-searching_algorithm