【问题标题】:How to calculate Gradient in matlab?如何在matlab中计算梯度?
【发布时间】:2021-05-03 11:17:10
【问题描述】:

我正在研究行人步数检测(加速度)。我想从过滤后的信号中计算统计特征。我已经计算了一些,现在我想计算 gradient。 我的数据是 1x37205 双倍。我使用 for 循环计算特征,移动 window size=2samples 和前一个窗口的 50% 重叠。下面我附上了我试图计算梯度的代码。 我不确定这是否是正确的计算方法?此外,我也无法理解使用梯度的目的是什么,它对步数检测有何用处以及如何使用梯度?有人可以指导我或在matlab中提供任何代码帮助吗?

%%Here M is mean and V is variance i already calculated from filtered data
G = zeros(length(window:length(M)), 2);
for i = window:length(M)
temp = gradient(M(i+1-window:i),V(i+1-window:i));
G(i, 1) = temp(2, 1); % "c1"
G(i, 2) = temp(2, 1); % "c2"
end

【问题讨论】:

    标签: matlab machine-learning accelerometer feature-extraction gradient-descent


    【解决方案1】:

    Matlab 的最佳特性之一是它的文档。如果您不熟悉如何获取具体的函数文档,请在命令行中输入以下内容:

    doc functionName
    

    或者,对于显示在命令行中的“简要”文档,您可以输入:

    help functionName
    

    另请参阅文档link here

    您的问题措辞不佳,所以我将总结我的理解并相应地回答:

    • 你有一个步数检测数据 (1*37205) double,我们称之为 stepSignal
    • stepSignal 是位置数据
    • 您希望窗口为 2 步,重叠 50%。这是渐变函数的默认行为。

    您不需要“for”循环来实现您的目标。根据文档,“梯度”可以接受一个输入。

    请参阅下面的代码,如果需要,请对原始问题添加说明。

    %% Assume that stepSignal is already imported into the workspace
    velocity = gradient(stepSignal);
    

    最后一点,当你给“梯度”两个输入时,它会自动假设第二个输入是一个统一的间距值。

    【讨论】:

    • 感谢您的精彩解释,我明白了,如果我想使用大窗口大小(如 10 或任何与前一个窗口重叠 50% 的窗口),那么我仍然不需要使用 for 循环并将我的信号作为输入来计算它,正如您所说,这是梯度函数的默认行为。那么无论增加还是不增加尺寸都不会产生影响? @ibrahimabusharkh
    • 很抱歉再次打扰您。正如您之前所说,不需要使用 forloop 作为渐变。但我想要的是计算任何窗口大小的梯度(中心差),如 20 或 50 个样本,重叠率为 50%。我尝试跟随但没有重叠。我怎么能把它加到一圈。 Grad =gradient(Data_filtered(1:window:end),window) @ibrahimabusharkh
    • 嗨。你能给我一个样本数据集和你想得到的样本输出吗?
    • 如果您认为这个答案有用,请点赞。
    猜你喜欢
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多