У меня есть проект, и я сталкиваюсь с некоторыми проблемами. Пожалуйста, помогите мне. Я пока не так хорош в 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 секунды?
Пожалуйста, помогите мне, я пытаюсь найти решение с тех пор, я действительно удручаю сейчас.
В первой колонке у меня есть число измерений: 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
Я также выполнил: дата ('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
Ну, я не знаю, какой формат времени «1025600» быть; MATLAB 'datenum' не является автоматически взаимозаменяемым со всеми другими форматами времени или счетчиками. Вам нужно будет выяснить, как ваши счета соответствуют реальным временам, и конвертировать их соответствующим образом. Причина, по которой вы получаете одинаковый номер с двумя близкими временами, заключается в том, что при наборе данных число дней в день увеличивается, а на дисплее не отображаются все значимые цифры. Если вы отделите один результат от другого, вы увидите небольшую разницу. – nkjt