Matlab:44100 Hz 数据的时间序列图
Posted
技术标签:
【中文标题】Matlab:44100 Hz 数据的时间序列图【英文标题】:Matlab: time series plot for 44100 hz data 【发布时间】: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
所做的工作。
是的,你说得对,只是我当时没有想到。
【参考方案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
。默认格式可能会更好。
【讨论】:
以上是关于Matlab:44100 Hz 数据的时间序列图的主要内容,如果未能解决你的问题,请参考以下文章
将 1ch 16000Hz PCM 转换为 2ch 44100Hz PCM
从 44100 到 96000 Hz 的音频上采样和线性插值