首页 文章

Matlab:44100 hz数据的时间序列图

提问于
浏览
2

我正在尝试绘制一个以44100赫兹的速度收集的时间序列 . 我希望有时间(以秒为单位),可能还有x轴上的日期 .

假设我有一分钟的数据,即2646001个数据点,并假设为简单起见,所有数据点都是:

y=repmat(1,2646001,1);

我通过将开始和结束日期转换为序列日期数字创建了一个日期数字向量,然后创建一个从第一个时间数到最后一个时间数的向量,速率为44100赫兹:

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),通常被描述为'days',或者'hours'或'seconds'但不是在......

有没有办法解决?

谢谢

2 回答

  • 1

    直接绘制数据与TimeNum,然后使用 datetick 设置标签:

    plot(TimeNum, y);
    datetick('x', 'dd/mm/yy, HH:MM:SS.FFF');
    

    或者只尝试没有参数的 datetick . 默认格式可能更好 .

  • 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)
    

相关问题