如何在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)”。
我正在研究行人步数检测(加速度数据),我想根据过滤后的信号计算统计特征。我已经计算了一些,现在我想计算 相关系数 .
我的数据是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)”。