【问题标题】:Matlab: time series plot for 44100 hz dataMatlab:44100 Hz 数据的时间序列图
【发布时间】:2013-11-29 04:40:47
【问题描述】:

我正在尝试绘制一个以 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 是 ,而不是 Matlab 不允许我用作 x 轴输入的 。

在另一次尝试中,我找到了完美的时间序列类 (http://www.mathworks.co.uk/help/matlab/ref/timeseries.plot.html),但由于我的数据是 44100 hz,我不确定如何定义单位 (ts1.TimeInfo.Units),通常是描述为“天”、“小时”或“秒”,但不是以赫兹为单位...

有没有办法解决这个问题?

谢谢

【问题讨论】:

  • 提示一下,MATLAB 有一个ones 命令,可以更快地完成您使用repmat 所做的工作。
  • 是的,你说得对,只是我当时没有想到。

标签: matlab plot time-series


【解决方案1】:
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)

【讨论】:

    【解决方案2】:

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

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

    或者尝试不带参数的 datetick。默认格式可能会更好。

    【讨论】:

      猜你喜欢
      • 2010-10-31
      • 2016-07-01
      • 2018-01-13
      • 2018-09-30
      • 1970-01-01
      • 2019-12-03
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      相关资源
      最近更新 更多