计算并统计信号采样值发生变化的间隔时间的简单程序
(实现方式:octave/matlab)
以下是一个简单的MATLAB代码示例,用于统计信号采样值S0(采样周期固定)发生变化的时间间隔并绘制统计直方图:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | % 数据S0示例 S0 = [1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4]; % 数据预处理 S = round (S0,2); % 可选附加处理,将原始数据保留2位小数,以提高检测鲁棒性 % 计算时间间隔 time_intervals = diff ( find ( diff (S) ~= 0)); %思路:计算变化时刻对应序号(即对应时间点)的差值 %计算时间间隔时,若需要设定检测灵敏范围,则可改为:(以灵敏范围为±0.5之外为例) %time_intervals = diff(find( (diff(X)<-0.5) | (diff(X)>0.5) )); % 绘制直方图 histogram(time_intervals,0:1:200); %这里设置绘图范围为0~200,绘制时间间隔为1 xlabel ( '时间间隔' ); ylabel ( '频数' ); title ( '变化时间间隔统计' ); |
(这段代码假设数据P已经按照时间顺序排列。如果数据P中的采样时间不是均匀的,可能需要进行额外处理。)
若需要绘制数据,并单独绘制某个变化范围之外的值:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | figure ; plot (time,X); grid on; % 只绘制在-5~5变化范围外的值 % 筛选序号 ii = find ( ( diff (X)<-5) | ( diff (X)>5) ); z= zeros ( length (X),1); z(ii)=X(ii+1); % 新数据 X1 X1 = zeros ( size (z)); % 初始化新数据为全0 prev_value = 0; % 初始化上一个非零值为0 for i = 1: length (z) if z( i ) ~= 0 % 如果当前值非零 prev_value = z( i ); % 更新上一个非零值为当前值 end X1( i ) = prev_value; % 将新数据的当前位置设置为上一个非零值 end %将刚开始的0值替换为X第1个值 X1(X1==0)=X(1); % 输出结果 figure ; plot (time,X); hold on; plot (time,X1); legend ( '原始值' , '筛选值' ); grid on; |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库