How to introduce a time-shift into data?
38 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Paul Hinze
le 23 Juil 2022
Réponse apportée : Star Strider
le 23 Juil 2022
Dear Community!
I would like to introduce a time shift to my data. The goal is that the lower figure in the subplot gets a time shift of 4 ms.
Here is my code:
% time steps
DTms = 0.01; % [ms] time step -- 100kHz sampling rate
% time lengths
Tall = 2000; % [ms] entire duration of simulation
Tinit = 500; % [ms] starting time of stimulus
Tstim = 1000; % [ms] duration of entire stimulus
Tlast = 500; % [ms] time after stimulus
Nall = round(Tall /DTms);
Ninit = round(Tinit/DTms);
Nstim = round(Tstim/DTms);
Nlast = round(Tlast/DTms);
tvms = (0:Nall-1)*DTms-Tinit; % time vector (stimulus starts at time zero)
lmain = logical( [zeros(1,Ninit),ones(1,Nstim),zeros(1,Nlast)] );
tvmain = tvms(lmain);
fs = 1e5; % 100 [kHz] sampling rate
%% Here is now a part you don't have acces to, but i believe its not important
fibres_ipsi = zeros(25,length(lmain));
for i = 1:25
% Put all spikes of each row in one column vector;
fibres_ipsi (i,:) = ANout_ipsi (1,:,i);
end
fibres_contra = zeros(10,length(lmain));
for i = 1:10
% Put all spikes of each row in one column vector;
fibres_contra (i,:) = ANout_contra (1,:,i);
end
input_ipsi = sum(fibres_ipsi);
input_contra = sum(fibres_contra);
subplot(2,1,1)
plot(tvms, input_ipsi)
xlim([0 100])
subplot(2,1,2)
plot(tvms,input_contra)
xlim([0 100])
ITD = 4;
samples_per_itd = fs/ITD;
% Apply ITDs
spikes_indices = find(input_ipsi >= 1); % Get indices
spike_times = tvms(spikes_indices); % Get spike times
spike_time_ITD = spike_times + (ITD); % Apply ITD
The lower subplot datapoint should move to the right!
Thank you in advance,
Paul
0 commentaires
Réponse acceptée
Star Strider
le 23 Juil 2022
I cannot run the code (missing data), however the conversion from milliseconds (in this instance) to samples is straightforward —
fs = 1e5; % 100 [kHz] sampling rate = Samples/Second
time_shift = 4E-3; % 4 ms
index_shift = fs * time_shift % Samples/Second * Seconds = Samples To Be Shifted
One way to implement that would be to use the circshift function (if there are more than 400 samples between the last data and the end of the vector). There may be other ways that are more applicable to your particular application.
.
0 commentaires
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Dates and Time dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!