从2016b版开始新增添加的dsp.TimeScope工具对于信号的实时处理非常有帮助,和操作示波器一样,可以实时观察处理信号的变化。
注意:本程序与2016b版本以前不兼容
但是有一点弊端,会影响处理的速度,且采样如果点数多需要深度缓冲(Buffer较大),需要根据电脑硬件配置来适当的进行调整。
我在使用的时候对信号进行了帧读取并放入循环移位,在实际进行运算时第一遍可以开启看下效果,基本了解以后可以关闭,将处理数据存入数组中,最后再使用Plot函数将整个信号绘制,可以增快处理速度。
scope = dsp.TimeScope( ...
'SampleRate',1000,...%采样率
'NumInputPorts',2,...%信号输入的端口
'Name',"Richard Yang",...
'BufferLength',1000*20*20, ...%数据缓冲长度,当数据溢出时,不能保存数据
'AxesScaling',"OnceAtStop",...%轴缩放
'TimeDisplayOffset',0,...%显示偏移
'TimeSpan',0.1,...%时间跨度
'TimeSpanSource','Property',...
'TimeSpanOverrunAction',"Scroll",...%当数据超过显示区域时的操作是刷新Warp还是平移Scroll
'ShowLegend',true,...%是否显示通道标签
'Title','2020/3/11',....%标题
'ReduceUpdates',false,...%是否延时更新数据,当为true时速度加快
'LayoutDimensions',[2,1],...%控制显示的窗口个数
'ActiveDisplay',2,...
'PlotType','Line',...%绘图形式
'ShowGrid',true,...%是否显示栅格
'ChannelNames',cellstr(["CH1","CH2"]),...%每个通道的名称
'TimeUnits','Metric',...%显示的时间单位(毫秒)
'TimeAxisLabels','All',...%是否显示轴标签
'YLabel',"Amp",...%Y轴名称
'YLimits',[-1,1],...
'ActiveDisplay',1,...%单独设置每个窗口的上述设定
'YLabel',"Amppp");%Y轴显示范围%Y轴名称
% scope = dsp.TimeScope('SampleRate',sine1.SampleRate,'TimeSpan',0.1,'NumInputPorts',2,'ShowLegend',true);
sine1 = dsp.SineWave('Frequency',100,'SampleRate',1000);
sine2 = dsp.SineWave('Frequency',100,'SampleRate',1000);
sine1.SamplesPerFrame = 10;
sine2.SamplesPerFrame = 10;
sine2.PhaseOffset=[pi/2];
for ii = 1:10
x = sine1();
y = sine2();
scope(y,x);%scope功能建议放入循环按帧来绘图速度较快
end
release(scope)
Copyright © 2020 by RichardYang. All rights reserved.
仅供参考,严禁转载,感谢。