Как я могу создать прямоугольную диаграмму последовательности импульсов из нескольких сигналов из данных в CSV-файле (в Linux)? - PullRequest
0 голосов
/ 07 февраля 2020

Например, учитывая данные в текстовом файле:

10:37:18.459 1     
10:37:18.659 0     
10:37:19.559 1 

Как это может быть отображено в виде изображения, которое выглядело как прямоугольная волна, которая правильно отображала высокое и низкое время? Я пытаюсь и gnuplot и scipy. В конечном итоге результат должен включать более одного датчика, и все графики должны отображаться друг над другом, чтобы отображалась дельта времени.

Код в следующей ссылке создает прямоугольную волну из перечисленных формул: ссылка на сигналы . Как может нижняя форма волны (pwm) управляться числами выше, если они были в файле (чтобы показать высокое состояние в течение 200 мс, затем низкое состояние в течение 100 мс и, наконец, высокое состояние)?

Ответы [ 2 ]

0 голосов
/ 28 февраля 2020

В итоге я получил ответ:

    file_info = os.stat( self.__outfile)
    if file_info.st_size:
        x,y,z,a = np.genfromtxt( self.__outfile, delimiter=',',unpack=True )
        fig = plt.figure(self.__outfile)
        ax = fig.add_subplot(111)
        fig.canvas.draw()

        test_array = [(datetime.datetime.utcfromtimestamp(e2).strftime('%d_%H:%M:%S.%f')).rstrip('0') for e2 in x]
        plt.xticks(x, test_array)
        l1, = plt.plot(x,y, drawstyle='steps-post')
        l2, = plt.plot(x,a-2, drawstyle='steps-post')
        l3, = plt.plot(x,z-4, drawstyle='steps-post')

        ax.grid()
        ax.set_xlabel('Time (s)')
        ax.set_ylabel('HIGH/LOW')
        ax.set_ylim((-6.5,1.5))
        ax.set_title('Sensor Sequence')
        fig.autofmt_xdate()
        ax.legend([l1,l2, l3],['sprinkler','lights', 'alarm'], loc='lower left')
        plt.show()

У меня был входной файл со значениями convertDateToFloat. Это было передано этой функции. Возможно, имя вводит в заблуждение (__outfile), но в предыдущей функции это был вывод.

0 голосов
/ 08 февраля 2020

Если я правильно понял ваш вопрос, вы хотите построить пошаговую функцию на основе временных данных. Чтобы избежать дальнейших угадываний, пожалуйста, уточните подробнее. В gnuplot есть стиль прорисовки with steps. Чек help steps.

Код:

### display waveform as steps
reset sesion

$Data <<EOD
10:37:18.459 1
10:37:18.659 0
10:37:19.559 1 
10:37:19.789 0 
10:37:20.123 1 
10:37:20.456 0 
10:37:20.789 1 
EOD

set yrange [-0.05:1.2]
myTimeFmt = "%H:%M:%S"       # input time format
set format x "%M:%.1S" time  # output time format on x axis

plot $Data u (timecolumn(1,myTimeFmt)):2 w steps lc rgb "red" lw 2 ti "my square wave"

### end of code

Результат:

enter image description here

...