2013-07-10 2 views
1

У меня новые вопросы после удовлетворения критериев из этих Matlab plot graph(segment by segment) and user input threshold value before writing to txt и Matlab load entire file but show and plot segment by segmentMATLAB график график (показывать только> порог)

мне было поручено построить график и показать пиковые узлы (те, что> Threshold), но только удается построить узлы и он застрял здесь:

what I can

Я пытаюсь построить его, что этот рис шоу, но я с трудом:

what I want

Вот мой код:

for e = 1:size(rows,1), 
    %plot normal graph first, hold it before plotting nodes 
    %so that it is combined 
    figure,plot(rows(e,:)), hold on; 

    %put the 'INPUT' statement outside the loop, or it will be evaluated 
    %multiple times (every time all the other conditions are true) 
    threshold = input('Key in the threshold value to use: '); 
    % loop over this if statement to find peaks in this row 
    for k = 2 : 999 
     if (rows(e,k) > rows(e, k-1) && rows(e,k) > rows(e,k+1) && rows(e,k) > threshold) 
      beat_count = beat_count + 1; 
      peaks(beat_count)=rows(e,k); 
      peak_x(beat_count) = k + 1000 * (e - 1); 
      plot(rows(e,peak_x(beat_count)),'ro'); 
     end 
    end 
    %pop up text to plot new segment 
    fprintf(1, 'press any key to continue!\n'); 

    % pause, on keypress go to next plot 
    pause; 
end 

% since peaks array keeps growing, we should print it out all at once: 
fprintf(fid, 'the following peaks were found:\n'); 
for ii = 1:beat_count 
    fprintf(fid, 'x = %d; peak = %f\n ', peak_x(ii), peaks(ii)); %open writer 
end 
fclose(fid); % close the file once you're done 

У меня есть 3 вопроса, на самом деле, но я хочу, чтобы решить его 1 на 1. Таким образом, первый 1 будет

  1. Постройте график и показать пиковые узлы 'O' для тех, что есть> чем пороговый ввод пользователем (мне удается построить пик 'O', но он все застрял на 1-м месте)

  2. Поскольку график является сегментом в каждом 1000, можно ли увеличить значение по оси x? Как и первый график, от 0 до 1000, а второй будет 1001 до 2000 и т. Д. До полной длины данных.

  3. Разрешить ввод данных пользователя с каким сегментом они хотят, чтобы начать, к примеру, я могу ввести значение, поэтому я сюжет от 3001 до 4000 и каждый раз после того, как ключ I в пороговом значении оно будет записывать вывод в текстовый файл вместо того, чтобы записывать весь вывод в текстовый файл все в конце. (Если что-то ошибка происходит на полпути, вам нужно переделать все, чтобы это предотвратить от повторения всего процесса, если что-то случится на полпути, и я могу начать, откуда я останавливаюсь, тоже)

ответ

0

Функция сюжета принимает два аргумента , значения x и значения y. Если вы хотите построить от 0 до 1000, установите значение х:

x = ((e-1)*1000):(e*1000); 
plot(x, rows(e,:)); 
... 

Для построения на «о» на правильное значение х, включать х аргумент:

plot(peak_x(beat_count), rows(e,peak_x(beat_count)),'ro'); 
... 

Если вы хотите печатать данные в файл каждый раз, когда пользователь заканчивает сегмент, откройте файл для добавления сразу после указанной строки:

fid = fopen('OUTPUTFILE.txt', 'at'); 
fprintf(fid, 'x = %d; peak = %f\n', peak_x(beat_count), peaks(beat_count)); 
fclose(fid);