2010-09-21 8 views
0

Mon script Matlab à:Matlab: extraction onsets dans différents fichiers et de les enregistrer dans des fichiers différents

  1. Extrait quatre fMRI onsets de fichiers Matlab (les fichiers sont nommés « sous 06 données », « sujet 05 data ', etc.)

  2. Mettez cette information dans un nouveau fichier avec deux autres variables nommées «durées» et «noms».

  3. Enregistrez tout cela dans un nouveau fichier MATLAB.

Je suis confronté à deux problèmes:

Pour le moment, le script parvient ci-dessous pour faire les étapes 1 à 3 pour le premier fichier Matlab dans le répertoire « Gender_recogntion », mais il ne fait pas 1 à 3 pour les autres fichiers MATLAB dans le dossier. Il se bloque dans la boucle à la ligne 'load (sub_name (i) .name);'.

C'est l'erreur que je reçois:

??? Mauvaise référence de la matrice d'index. Erreur dans ==> Gender_onsets_script_2 à 16
load (nom_sous_ (i) .name);

En outre, je voudrais nommer les nouveaux fichiers MATLAB avec le nom des fichiers MATLAB d'origine. Pour l'instant, les nouveaux fichiers MATLAB s'appellent 'onsets.mat'.

clear all 
close all 
clc 

cd 'C:\Program Files\MATLAB\R2007b\Data\Resilience\Real_data\Raw\Matlab_files\Gender_recogntion'; 

sub_name = dir('C:\Program Files\MATLAB\R2007b\Data\Resilience\Real_data\Raw\Matlab_files\Gender_recogntion\*.mat'); 

for i = 1:numel(sub_name); 
    load(sub_name(i).name); 

    names = {'sad' 'anger' 'neutral' 'rest'}; 
    durations = {[18] [18] [18] [18]}; 
    onsets=cell(1,4); 

    onsets{1} = data.time_since_scan_start(data.emotion==5)/1000; %Get the 36 onsets for sad. 
    onsets{2} = data.time_since_scan_start(data.emotion==4)/1000; %Get the 36 onsets for anger. 
    onsets{3} = data.time_since_scan_start(data.emotion==6)/1000;% Get the 36 onsets for calm. 
    onsets{4} = datarest.onset/1000; %Get the six onsets for the rest blocks. 

    onsets{1} = onsets{1}(1:6:36)'; %Get the first onset value of each of the six blocks. 
    onsets{2} = onsets{2}(1:6:36)'; 
    onsets{3} = onsets{3}(1:6:36)'; 
    onsets{4} = onsets{4}'; 

    %cd Onsets folder, saves onsets, and then cd back to folder "Matlab_files" 
    cd 'C:\Program Files\MATLAB\R2007b\Data\Resilience\Real_data\Onsets'; 
    save 'onsets.mat' names durations onsets 
    cd 'C:\Program Files\MATLAB\R2007b\Data\Resilience\Real_data\Raw\Matlab_files\Gender_recogntion'; 
end 
+0

Votre question est impossible à analyser. Vous dites que vous avez un crash à la ligne 'load (sub_name (i) .name)' mais ce n'est même pas une ligne dans le code que vous avez posté. Essayez de résoudre votre problème étape par étape, en vérifiant que vous comprenez ce qui s'est passé à chaque étape. Ensuite, lorsque vous arrivez à une étape qui provoque un problème, essayez d'écrire du code qui ne fait que cette étape et publiez-le comme exemple. – Marc

+0

Salut Marc, merci pour vos suggestions. Dans mon post original, je n'avais pas réalisé que le début de mon script n'était pas inclus ... J'ai changé cela. Depuis lors, j'ai essayé différentes façons de résoudre le problème, mais sans succès. – stephane

Répondre

0

Pour votre deuxième question sur les noms de la sortie fichiers identique à l'entrée, vous pouvez utiliser la version de fonction de sauver et passer dans la variable sub_name (i) .name comme argument de nom de fichier.

save (sub_name (i) .name, 'noms', 'durées', 'Onsets')

Il utilise le même nom pour l'entrée et la sortie (dans des répertoires différents, dans votre script) . Lorsque je sauvegarde les fichiers de sortie, je les garde dans le même répertoire que les entrées, donc je modifie un nom de fichier avec des expressions régulières (voir regexprep) ou ajouter un préfixe ou un suffixe (strcat) pour créer un lien mais distinct nom de fichier de sortie.

Pour référence future ... le type de fichier par défaut pour enregistrer est le format de données MATLAB; vous pourriez passer '-ASCII' comme argument pour enregistrer en tant que fichier texte si vos types de données étaient compatibles. Les tableaux de cellules dans cet exemple ne le sont pas, mais les chaînes et les matrices numériques le seraient, donc si les fichiers de sortie de texte étaient importants, vous pourriez utiliser d'autres structures de données depuis le début ou convertir des cellules avec cell2mat. Un exemple générique avec la version save(): save (nom de fichier, '-ASCII', 'x', 'y', 'z') où x, y, z sont des variables compatibles ASCII et le nom de fichier est un fichier texte .


[réponse supplémentaire, ajoutant 5 janvier 2011]

À propos de votre première question sur le message d'erreur: ??? Mauvaise référence de la matrice d'index.

Est-il possible qu'un fichier sauvegardé .mat contient une variable nommée dir, qui remplacerait la fonction liste de répertoires standard et provoquer cette erreur? J'ai lu cette astuce sur un autre site, je voulais juste le transmettre au cas où cela aiderait.

Questions connexes