2013-12-01 6 views
2

У меня есть проект, и я сталкиваюсь с некоторыми проблемами. Пожалуйста, помогите мне. Я пока не так хорош в Matlab. В принципе, у меня есть набор данных движения (data.mat), которые были записаны на 3 дня без остановок. И мне нужно: 1. выберите только определенные определенные моменты (временной диапазон) всего этого набора данных. 2. разделите эти моменты на небольшие 2.56 секунды. 3. сделайте БПФ каждой маленькой части, чтобы увидеть движение по частоте домен и выберите только 5-25 Гц 4. Найдите несколько самых больших пиков частотыВыбор определенного временного диапазона в Matlab

Я написал код для создания БПФ и пиков для целых моих данных «Data.mat» и работает. Это мой код:

load('Data.mat'); 
P=data1(,2); % 
Fs=100  
Ts=1/Fs   
L=length(P)  
t = (0:L-1)*Ts;  
nfft = 256  

figure(1)  % raw signal plotting 
plot(t,P); 

y = fft(P,nfft)/L;  % FFT 
ymag = abs(y(1:length(y)/2+1)); 
ft = Fs/2*linspace(0,1,nfft/2+1); 

figure(2) % FFT plotting 
plot(ft,2*abs(y(1:nfft/2+1))) 

indx=ft>= 5 & ft<= 25; % only 5-25Hz 
ftsub=ft(indx); 
ymagsub=ymag(indx); 

% highest peaks 
[pks,locs] = findpeaks(ymagsub,'MinPeakHeight',0.02) 
plot(ftsub,ymagsub,ftsub(locs),pks,'rv','MarkerFaceColor','r') 

Теперь Im пытается выбрать только определенные моменты данных, но у меня есть проблемы с этим. . позволяет сказать, я хочу выбрать только диапазон времени: 13-03-2013 9: 20: 00-9: 45: 12 утра

Я попытался:

t_start =datenum('13-03-2013 9:20:00 AM', 'dd-mm-yyyy HH:MM:SS AM'); 
t_end = datenum('13-03-2013 9:45:00 AM', 'dd-mm-yyyy HH:MM:SS AM'); 
rows=find(P>= t_start & P<= t_end); 

, но я получаю ответ: строки = Пустая матрица: 0-by-1

Что-то не так? Если этот код неверен, как выбрать определенный временной диапазон? И как выбрать в 2.56 секунды?

Пожалуйста, помогите мне, я пытаюсь найти решение с тех пор, я действительно удручаю сейчас.

ответ

1

Для правильной работы этой линии: rows=find(P>= t_start & P<= t_end); P должен быть серии раз в формате MATLAB datenum.

Я предполагаю, что P - это ваши фактические данные, поэтому он не работает, потому что find просто сравнивает числовые значения в P с числовыми значениями даты - ваши значения «P» не отмечены меткой даты в MATLAB. Важно помнить, что вывод datenum - это просто номер, поэтому MATLAB позволит вам сравнить его с другими номерами, даже если результат не станет реальным.

варианты:

  1. Если данные содержат метку времени, загрузите что, убедитесь, что он находится в правильном формате (конвертировать обратно с datestr для проверки вменяемости). Это может быть первый столбец ваших данных. Выполните поиск по значениям времени, а затем используйте их для построения/извлечения соответствующих частей P.
  2. Постройте вектор времени - используя то, что вы знаете о времени первой точки данных + частота дискретизации, и выполните то же самое. Подобно вашему t, но в данных. Это также будет работать, если ваше получение данных означает, что у вас есть только время во времени, начиная с начала файла, плюс время начала.

Тогда это просто что-то вроде:

r=find(t>= t_start & t<= t_end); 
plot(t(r),P(r); 
+0

В первой колонке у меня есть число измерений: 1025600, 1025601, 1025602, 1025603 и т.д., так что я пытался сделать так: СТРОКЕ-ДАТЫ (1025600, 'dd- mm-yyyy HH: MM: SS AM ') ans = 30-12-2807 12:00:00 AM >> datestr (1025601,' dd-mm-yyyy HH: MM: SS AM ') ans = 31-12-2807 12:00:00 AM >> datestr (1025602, 'dd-mm-yyyy HH: MM: SS AM') ans = 01-01-2808 12:00:00 AM почему это похоже это? – user3053947

+0

Я также выполнил: дата ('13 -03-2013 9:20:00 AM ',' dd-mm-yyyy HH: MM: SS AM '), и я получаю ans = 7.3531e + 05, затем я сделал: datenum ('13 -03-2013 940: 00 AM ',' dd-mm-yyyy HH: MM: SS AM '), и я получаю ans = 7.3531e + 05. Почему я получаю тот же номер? Затем я исполнил: time = '13 -03-2013 9:20:00 AM '; timen = datenum (время, 'dd-mm-yyyy HH: MM: SS AM); datestr (timen, 'dd-mm-yyyy HH: MM: SS AM'), и я получил ans = 13-03-2013 9:20:00 AM – user3053947

+0

Ну, я не знаю, какой формат времени «1025600» быть; MATLAB 'datenum' не является автоматически взаимозаменяемым со всеми другими форматами времени или счетчиками. Вам нужно будет выяснить, как ваши счета соответствуют реальным временам, и конвертировать их соответствующим образом. Причина, по которой вы получаете одинаковый номер с двумя близкими временами, заключается в том, что при наборе данных число дней в день увеличивается, а на дисплее не отображаются все значимые цифры. Если вы отделите один результат от другого, вы увидите небольшую разницу. – nkjt

Смежные вопросы