如何在matlab中计算和保存相关系数?

How to calculate and save correlation coefficients in matlab?

我正在研究行人步数检测(加速度数据),我想根据过滤后的信号计算统计特征。我已经计算了一些,现在我想计算 相关系数 .

我的数据是1x37205 double。我使用 for 循环计算特征,移动 window size=2samples 和先前 window 的 50% 重叠。下面附上我尝试计算 corrcoef.

的代码

现在我想检查它是否是正确的计算方式,并且还想保存输出。我无法很好地理解如何保存所有 corrcoef。有人可以指导我或在 matlab 中提供任何代码帮助或我如何保存吗?

%%Here M is mean and V is variance i already calculated from filtered data
    for i=window:length(M)-window
    C = corrcoef(M(i-window/2:i+window/2),V(i-window/2:i+window/2))
    end

查看 corrcoef documentation 您可以看到输出是一个 2x2 矩阵。

保存所有系数的最简单方法是在循环外初始化矩阵 C,然后在每次迭代时分配值。 也许像

C = zeros(2, 2, length(window:lenght(M)-window));
for i = window:length(M) - window
    C(:, :, i) = corrcoef(M(i-window/2:i+window/2),V(i-window/2:i+window/2));
end

更好的是,你还可以看到corrcoef函数的输出结构是这样的:

[1, c1;
 c2, 1];

其中 c1 和 c2 是实际系数。 所以你也可以这样做:

C = zeros(length(window:lenght(M)-window), 2);
for i = window:length(M) - window
    temp = corrcoef(M(i-window/2:i+window/2),V(i-window/2:i+window/2));
    C(i, 1) = temp(1, 2); % "c1"
    C(i, 2) = temp(2, 1); % "c2"
end

编辑以回答评论

要实现任意大小和任意重叠的滑动 window,您可能需要更改索引:

wdwSize = 2;
overlap = 0.5;

C = zeros(length(1:wdwSize*overlap:length(A)-wdwSize*overlap), 2);

for i = 1:wdwSize*overlap:length(A)-wdwSize*overlap
    window = i:i+wdwSize - 1;
    temp = corrcoef(M(window), V(window));
    C(i, 1) = temp(1, 2); % "c1"
    C(i, 2) = temp(2, 1); % "c2"
end

在您的情况下,wdwSize*overlap 是一个整数,但您可能需要注意 window 大小和重叠的一般组合。

根据文档,此函数返回一个矩阵。 如果唯一的问题实际上是“如何保存这些数据”,您可以将其存储在元胞数组中。

numSamples = length(M)-window;
result = cell(1, numSamples);
for i=window:numSamples
    result{i-window+1} = corrcoef(M(i-window/2:i+window/2),V(i-window/2:i+window/2))
end

请记住,您可以像处理列表一样从元胞数组中检索数据,但您需要使用“result{i}”而不是“result(i)”。