2013-04-21 3 views
0

Я получил эту ошибку во время выполнения функции в Matlabошибки FSEEK во время работы функции Matlab

«Ошибка при помощи FSEEK Неверный идентификатор файла. Используйте Еореп генерировать правильный идентификатор файла.»

Могу ли я узнать, каковы возможные причины этой ошибки? Я очень новичок в Matlab. Пожалуйста, помогите мне. Большое спасибо

Прошу прощения, если я не буду публиковать общую функцию. Но я боюсь, что информации, которую я дал, недостаточно. Общее командование функции:

function gau_hmm_init_train(traininglist_filename,model_filename,MODEL_NO,STATE_NO, dim) 
if nargin == 0 
    traininglist_filename='training_list.mat' ; 
    model_filename='models.mat'; 
    MODEL_NO=11; 
    STATE_NO=4; 
    dim=12; 
end 
MIN_SELF_TRANSITION_COUNT=0; 
load(traininglist_filename,'list'); 
% allocate mean, var vectors, transition prob. for the of models 
mean_vec_i_m=zeros(dim,STATE_NO,MODEL_NO); 
var_vec_i_m=zeros(dim,STATE_NO,MODEL_NO); 
A_i_m=zeros(STATE_NO,MODEL_NO); 
vector_sums_i_m=zeros(dim,STATE_NO,MODEL_NO); 
var_vec_sums_i_m=zeros(dim,STATE_NO,MODEL_NO); 
fr_no_i_m=zeros(STATE_NO,MODEL_NO); 
self_tr_fr_no_i_m=zeros(STATE_NO,MODEL_NO); 
utterance_no=size(list,1); 
total_fr_no=0; 
for k=1:utterance_no 
    filename=list{k,2}; 
    m=list{k,1}; % word ID 
    fid=fopen(filename,'r'); 
    fseek(fid, 12, 'bof'); % skip the 12-byte HTK header 
    %fopen(fid, 12, 'bof'); % skip the 12-byte HTK header 
    c=fread(fid,'float','b'); 
    fclose(fid); 
    fr_no=length(c)/dim; 
    total_fr_no=total_fr_no+fr_no; 
    c=reshape(c,dim,fr_no); 

    for i=1:STATE_NO 
     begin_fr=round( fr_no*(i-1) /STATE_NO)+1; 
     end_fr=round(fr_no*i /STATE_NO); 
     seg_length=end_fr-begin_fr+1; 
     vector_sums_i_m(:,i,m) = vector_sums_i_m(:,i,m) + sum(c(:,begin_fr:end_fr),2); 
     var_vec_sums_i_m(:,i,m) = var_vec_sums_i_m(:,i,m) + sum(c(:,begin_fr:end_fr).*c(:,begin_fr:end_fr) , 2); 
     fr_no_i_m(i,m)=fr_no_i_m(i,m)+seg_length; 
     self_tr_fr_no_i_m(i,m)= self_tr_fr_no_i_m(i,m) + seg_length-1; 
    end %for s=1:STATE_NO 
end % for k=1:utterance_no 
for m=1:MODEL_NO 
    for i=1:STATE_NO 
     mean_vec_i_m(:,i,m) = vector_sums_i_m(:,i,m)/fr_no_i_m(i,m); 
     var_vec_i_m(:,i,m) = var_vec_sums_i_m(:,i,m)/fr_no_i_m(i,m); 
     A_i_m(i,m)=(self_tr_fr_no_i_m(i,m)+MIN_SELF_TRANSITION_COUNT)/(fr_no_i_m(i,m)+2*MIN_SELF_TRANSITION_COUNT); 
    end 
end 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%             tying of cov. matrices 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
overall_var_vec=sum(sum(var_vec_sums_i_m(:,:,:),3),2)/sum(sum(fr_no_i_m,2),1); 
for m=1:MODEL_NO 
    for i=1:STATE_NO 
     var_vec_i_m(:,i,m)=overall_var_vec; 
    end 
end 
%%%%%%%%%%%%%%%%   end of cov. matrices tying 
save(model_filename, 'mean_vec_i_m', 'var_vec_i_m', 'A_i_m'); 
fprintf('init. train complete \n');*** 

ответ

1

Похоже линии fid=fopen(filename, 'r'). Это имя файла происходит из переменной list, которая загружается из файла traininglist_filename, поэтому вы должны проверить, существуют ли эти файлы. Если вы передаете его traininglist_filename, вы должны загрузить этот файл в MATLAB и посмотреть содержимое списка; в противном случае он загрузит значение по умолчанию 'training_list.mat', поэтому вы должны посмотреть там, чтобы убедиться, что все имена файлов действительны. Возможно, вам не хватает файла?

+0

Большое спасибо за ответ Вакхья. Могу ли я спросить, если данный набор данных находится в .zip, я должен извлечь его первым? Прошу прощения, если этот вопрос звучит глупо. Большое спасибо – user2301196

+0

Прошу прощения, возможно, я должен задать более четкий вопрос, разместив команду. list_filename = 'training_list.mat'; dir1 = 'mfcc_e_d_a/isolated_digits_ti_train_endpt'; dir2 = {'MAN', 'WOMAN'}; dir3 = {{'AE', 'AJ', 'AL', 'AW', 'BD', 'CB', 'CF', 'CR', 'DL', 'DN', 'EH', ' EL ',' FC ',' FD ','}, Это значит, что у меня должно быть 3 папки для dir1, dir2 и dir3? спасибо – user2301196

-1

Чтобы продолжить ответ от @Wakjah, файл training_list.mat отсутствует в ссылочном пути по используемому вами коду, потому что он автоматически создается по пути MATLAB по умолчанию. Поэтому просто измените путь в «Текущей папке» туда, где вы открыли текущий код, и он должен работать.

+1

Хотя это ответ, не могли бы вы расширить его вообще? Читайте здесь для получения дополнительной информации о том, как дать хорошие ответы http://stackoverflow.com/help/how-to-answer –

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