我的通道测量值为> 20,000,必须分为不同的级别,在我的情况下K = 8,并且必须映射到具有状态的信道测量。我必须在Matlab中找到状态转移概率矩阵。
我的问题是,我需要知道如何将这些值分成8个状态,并在Matlab中找到这8个状态的状态转移概率矩阵。
答案 0 :(得分:1)
以下是一个简单的例子:
%# some random vector (load your data here instead)
x = randn(1000,1);
%# discretization/quantization into 8 levels
edges = linspace(min(x),max(x),8+1);
[counts,bins] = histc(x, edges);
%# fix last level of histc output
last = numel(counts);
bins(bins==last) = last - 1;
counts(last-1) = counts(last-1) + counts(last);
counts(last) = [];
%# show histogram
bar(edges(1:end-1), counts, 'histc')
%# transition matrix
trans = full(sparse(bins(1:end-1), bins(2:end), 1));
trans = bsxfun(@rdivide, trans, sum(trans,2));
有几点需要注意:
简单地通过将整个数据范围划分为8个区来执行离散化。这是使用histc
完成的。请注意,由于函数的工作方式,我们必须合并最后两个计数并相应地修复二进制文件。
通过首先使用sparse
函数的鲜为人知的调用形式对共现进行计数来计算转移矩阵。也可以使用accumarray
。然后对计数矩阵进行归一化以获得总和为1的概率。
您提到您的MC模型应该只允许相邻状态之间的转换(1到2或8到7,但不在2到5之间)。我没有强制执行这个事实,因为这应该是数据本身的属性,在本例中随机数据不适用。