You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用MATLAB分析同点位同基准潮位传感器的漂移与趋势差异

验证传感器漂移的MATLAB方法推荐

看起来你已经完成了不少基础的趋势分析工作,针对两台潮位传感器的漂移验证,我再分享几个更针对性的MATLAB方法,帮你更清晰地展示二者的趋势差异:

1. 差值序列的线性趋势拟合

直接计算两台传感器水位数据的差值,然后对差值序列做线性拟合,能直观看到漂移的方向和速率:

% 计算两台传感器的水位差值
diff_wl = wl1c - wl2c;
% 生成时间序列(假设你的数据是10分钟采样一次,转换为天数更直观)
time_days = (1:length(diff_wl)) * (10/60/24);
% 线性拟合差值序列
p = polyfit(time_days, diff_wl, 1);
fit_diff = polyval(p, time_days);
% 绘图展示
figure;
plot(time_days, diff_wl, 'b.', 'DisplayName', '水位差值');
hold on;
plot(time_days, fit_diff, 'r-', 'DisplayName', '线性拟合趋势');
xlabel('时间(天)');
ylabel('传感器1 - 传感器2 水位差值');
legend;
grid on;
title('水位差值的漂移趋势');

如果拟合的斜率显著不为0,就说明存在系统性漂移;斜率的正负能体现漂移方向。

2. 滚动窗口的偏差统计

针对你提到的高低潮区间偏差,可以用滚动窗口计算差值的均值和标准差,观察偏差是否在特定时段(比如高低潮)呈现变化趋势:

% 设置滚动窗口大小(比如对应1个潮周期的采样数,你之前用的n=74)
window_size = 74;
% 计算滚动窗口内的差值均值和标准差
rolling_mean = movmean(diff_wl, window_size);
rolling_std = movstd(diff_wl, window_size);
% 绘图
figure;
plot(time_days, rolling_mean, 'g-', 'DisplayName', '窗口平均差值');
hold on;
plot(time_days, rolling_mean + 2*rolling_std, 'r--', 'DisplayName', '均值±2倍标准差');
plot(time_days, rolling_mean - 2*rolling_std, 'r--');
xlabel('时间(天)');
ylabel('滚动窗口统计值');
legend;
grid on;
title('滚动窗口下的水位偏差变化');

这个方法能帮你聚焦到不同时段的偏差波动,尤其是高低潮时段的异常变化。

3. 潮位极值的趋势对比

既然偏差出现在最高和最低潮位,你可以提取每个潮周期的高潮位和低潮位,分别对比两台传感器的极值随时间的变化:

% 提取传感器1的潮位极值(假设用findpeaks函数,需要信号处理工具箱)
[pks1, locs1] = findpeaks(wl1c, 'MinPeakDistance', window_size); % 高潮位
[vls1, vlocs1] = findpeaks(-wl1c, 'MinPeakDistance', window_size); % 低潮位,取反找谷值
vls1 = -vls1;
% 同理提取传感器2的极值
[pks2, locs2] = findpeaks(wl2c, 'MinPeakDistance', window_size);
[vls2, vlocs2] = findpeaks(-wl2c, 'MinPeakDistance', window_size);
vls2 = -vls2;
% 计算极值差值并拟合趋势
peak_diff = pks1 - pks2;
valley_diff = vls1 - vls2;
peak_time = time_days(locs1);
valley_time = time_days(vlocs1);
% 拟合高潮位差值趋势
p_peak = polyfit(peak_time, peak_diff, 1);
fit_peak = polyval(p_peak, peak_time);
% 拟合低潮位差值趋势
p_valley = polyfit(valley_time, valley_diff, 1);
fit_valley = polyval(p_valley, valley_time);
% 绘图展示
figure;
subplot(2,1,1);
plot(peak_time, peak_diff, 'b.', peak_time, fit_peak, 'r-');
xlabel('时间(天)');
ylabel('高潮位差值(传感器1-传感器2)');
title('高潮位差值的漂移趋势');
grid on;
subplot(2,1,2);
plot(valley_time, valley_diff, 'g.', valley_time, fit_valley, 'r-');
xlabel('时间(天)');
ylabel('低潮位差值(传感器1-传感器2)');
title('低潮位差值的漂移趋势');
grid on;

通过分别分析高潮和低潮的差值趋势,能更精准地验证是否在极值区间存在漂移。

4. 累积差值的趋势分析

你已经做了累积和分析,可以进一步计算累积差值的趋势:

% 计算累积差值
cs_diff = cumsum(diff_wl);
% 拟合累积差值的线性趋势
p_cs = polyfit(time_days, cs_diff, 1);
fit_cs = polyval(p_cs, time_days);
% 绘图
figure;
plot(time_days, cs_diff, 'b-', 'DisplayName', '水位差值累积和');
hold on;
plot(time_days, fit_cs, 'r-', 'DisplayName', '累积和拟合趋势');
xlabel('时间(天)');
ylabel('累积水位差值');
legend;
grid on;
title('累积水位差值的漂移趋势');

累积差值的斜率变化能更明显地体现长期漂移的累积效应,比单步差值更易观察趋势。

这些方法可以帮你从不同维度验证传感器的漂移情况,你可以根据自己的数据集特点选择合适的方法组合使用~

内容的提问来源于stack exchange,提问作者Poly piter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:16:28