由于变量s_k
是逻辑0/1,我无法实现此代码。我能以什么方式实现这个陈述?
s_k
是使用0/1
生成的rand()
的随机序列,并通过下面给出的平均值量化rand()
的输出。在此之后,我不知道如何实施。请帮忙。
N =1000;
input = randn(N);
s = (input>=0.5); %converting into logical 0/1;
更新
N = 3;
tmax = 5;
y(1) = 0.1;
for i =1 : tmax+N-1 %// Change here
y(i+1) = 4*y(i)*(1-y(i)); %nonlinear model for generating the input to Autoregressive model
end
s = (y>=0.5);
ind = bsxfun(@plus, (0:tmax), (0:N-1).');
x = sum(s(ind+1).*(2.^(-ind+N+1))); % The output of this conversion should be real numbers
% Autoregressive model of order 1
z(1) =0;
for j =2 : N
z(j) = 0.195 *z(j-1) + x(j);
end
答案 0 :(得分:2)
您已生成随机logical
序列,这很棒。您还需要知道N
,这是一次收集的总点数,以及时间值列表t
。因为这是一个离散求和,我将假设t
的值是离散的。首先需要做的是生成一个滑动窗口矩阵。此矩阵的每列表示输出的每个t
值的一组时间值。这可以通过bsxfun
轻松实现。假设最长时间为tmax
,开始时间为0
,且社区大小为N
(如您的等式),我们可以这样做:
ind = bsxfun(@plus, (0:tmax), (0:N-1).');
例如,假设tmax = 5
和N = 3
,我们得到:
ind =
0 1 2 3 4 5
1 2 3 4 5 6
2 3 4 5 6 7
每列代表我们想要计算输出的时间,列中的每一行都显示我们要为所需输出计算的时间值列表。
最后,要计算输出x
,您只需获取s_k
向量,使其成为列向量,使用ind
访问它,逐点执行将2^(-k+N+1)
替换为我们从k
得到的内容,然后乘以ind
进行乘法运算。所以:
s = rand(max(ind(:))+1, 1) >= 0.5;
x = sum(s(ind+1).*(2.^(-ind+N+1)));
第一个语句生成一个随机向量,该向量与我们拥有的最大时间值一样长。完成后,我们使用ind
索引此随机向量,以便生成logical
值的滑动窗口。当MATLAB开始索引为1时,我们需要将其偏移1。