我正在尝试绘制一个以44100赫兹的速度收集的时间序列。我希望有时间(以秒为单位),可能还有x轴上的日期。
假设我有一分钟的数据,即2646001个数据点,并假设为简单起见,所有数据点都是1:
y=repmat(1,2646001,1);
我通过将开始和结束日期转换为序列日期编号创建了一个日期编号向量,然后创建一个从第一个时间编号到最后一个时间编号的向量,速率为44100 hz:
StartTimeNum = datenum(2013,11,12,23,00,0);
EndTimeNum = datenum(2013,11,12,23,01,0);
T = EndTimeNum-StartTimeNum;
TimeNum = StartTimeNum:(T/length(y)):EndTimeNum;
然后我定义了我希望日期字符串的格式,并将时间数字向量转换为时间字符串。
FormatOut = 'dd/mm/yy, HH:MM:SS.FFF';
TimeStr= datestr(TimeNum, FormatOut);
但现在TimeStr是< 2646001x22 char>,而不是< 2646001x1 char>哪个Matlab不允许我用作x轴的输入。
在另一次尝试中,我发现时间序列(http://www.mathworks.co.uk/help/matlab/ref/timeseries.plot.html)是完美的,但由于我的数据是44100赫兹,我不知道如何定义单位(ts1.TimeInfo.Units),一般被描述为'天','小时'或'秒'但不是hz ......
有什么方法吗?
由于
答案 0 :(得分:3)
y=ones(2646001,1); % use ones(m,n) for more efficiency
StartTimeNum = datenum(2013,11,12,23,00,0);
EndTimeNum = datenum(2013,11,12,23,01,0);
T = EndTimeNum-StartTimeNum;
TimeNum = StartTimeNum:(T/(length(y)-1)):EndTimeNum; % length consistent
FormatOut = 'dd/mm/yy, HH:MM:SS.FFF';
figure,plot(TimeNum, y),datetick('x',FormatOut)
答案 1 :(得分:1)
直接绘制数据与TimeNum,然后使用datetick
设置标签:
plot(TimeNum, y);
datetick('x', 'dd/mm/yy, HH:MM:SS.FFF');
或者只尝试datetick
没有参数。默认格式可能更好。