如何用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
相关产品推荐
相关产品推荐

