一、最小二乘法原理

由此得到趋势的线性公式。(可在网上搜索更加详细的原理讲解)
二、在simulnk中建立模型并仿真
建立simulink模型:
建立简单的去趋势模块。

导入信号,进行仿真分析:
黄色线条:信号——去趋势处理——离散积分。
蓝色线条:信号——离散积分。

三、MATLAB Function中代码
function y = detrend(u)
% 确保输入u为行向量
u = u(:)'; % 强制转换为行向量(无论输入是行或列)
N = length(u);
u_reversed = fliplr(u); % 正确反转行向量顺序
t = 0:N-1; % 行向量 [0,1,2,...N-1]
% 计算中间量(确保结果为标量)
sum_t = sum(t);
sum_t2 = sum(t.^2);
sum_y = sum(u_reversed);
sum_ty = sum(t .* u_reversed); % 行向量点乘 → 标量
% 计算斜率a和截距b
denominator = N*sum_t2 - sum_t^2;
if denominator == 0
a = 0;
else
a = (N*sum_ty - sum_t*sum_y) / denominator;
end
b = (sum_y - a*sum_t) / N;
% 计算当前时刻趋势项并去趋势
trend = a*(N-1) + b; % 时间索引为N-1
y = u_reversed(end) - trend; % 输出标量
end
300

被折叠的 条评论
为什么被折叠?



