2013-11-15 3 views
2

Я пытаюсь построить временной ряд, который был собран со скоростью 44100 Гц. Я хотел бы иметь время (в секундах) и, возможно, дату на оси х.Matlab: график временных рядов для данных 44100 Гц.

Скажем, у меня есть данные за одну минуту, то есть 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 символ>, а не < 2646001x1 полукокса>, который Matlab не позволяет мне использовать в качестве входных данных для оси х.

В другой попытке я нашел класс timeseries (http://www.mathworks.co.uk/help/matlab/ref/timeseries.plot.html), который был бы идеальным, но поскольку мои данные в 44100 Гц, я не уверен, как определить единицы (ts1.TimeInfo.Units), которые в общем описаны как «дни» или «часы» или «секунды», но не в hz ...

Есть ли способ обойти это?

Благодаря

+0

Просто подсказка, MATLAB имеет команду 'ones', которая делает то, что вы сделали с' repmat' намного быстрее. – Phonon

+0

Да, вы правы, я просто не думал об этом в то время. – user2895146

ответ

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) 
Смежные вопросы