• Объявления

    • admin

      Внимание! Постить только по теме "электроника"   02.09.2016

      Внимание! В данном разделе разрешено создавать только темы связанные с электроникой. Для проблем с ПО не связанных с электроникой существует специальный раздел.
      Нарушители будут забанены на 5 суток!
    • admin

      Просьба всем принять участие!   24.11.2017

      На форуме разыгрывается спектроанализатор Arinst SSA-TG LC (цена 18500 руб). Просьба всем перейти по ссылке ниже и принять участие!
1YHAIhwx

Программа-анализатор данных с осциллографа

2 сообщения в этой теме

1YHAIhwx    3

В моём распоряжении имеется осциллограф DSO Nano V3, который умеет подключаться к компьютеру лишь в режиме флешки, но умеет скидывать содержимое памяти в csv. Я снял осциллограмму, однако анализировать её на экране осциллографа довольно неудобно. Мой вопрос: существуют ли программы, повторяющие интерфейс осциллографа со всеми возможностями он предоставляет по анализу данных?

Требования:

  • свободное ПО, преимущественно под Linux;
  • умеет открывать csv с слепком данных;
  • умеет визауализировать данные;
  • умеет вырезать часть данных и сохранять их отдельно как csv или в графическом виде;
  • (желательно) уметь работать логическим анализатором, пусть и ограниченно.

Изначальная проблема: у меня есть осциллограмма как на пике. Это - визуализация csv, которую я снял с осциллографа.

sample.thumb.png.aefba18e2bedd2bf40f8ec15cfa6d570.png

Из этого csv я хотел бы получить строку из "0" и "1", где "1" отображает короткий импульс, "0" - длинный. Более длинные промежутки предлагается любезно не замечать.

Сейчас я делаю всё это набором скриптов, однако вручную ковырять всё это довольно неудобно.

Скрипт визаулизации:

Spoiler

import sys
from PIL import Image, ImageDraw

with open(sys.argv[1], 'r') as source:
    lines = []
    vmin = 65535
    vmax = 0
    vtotal = 0
    for line in source:
        if not line or line.startswith('TRACK'):
            continue
        value = line.strip().replace(",","")
        if value and not value.startswith('\x00'):
            value = int(value)
            vtotal += value
            lines.append(value)
            if value < vmin:
                vmin = value
            if value > vmax:
                vmax = value

print 'Min: %d; Max: %d; Average: %d, num lines: %d' % (vmin, vmax, vtotal / len(lines), len(lines))

PADDING = 10

img_width = (2 * PADDING) + len(lines)
img_height = (2 * PADDING) + (vmax - vmin)

img = Image.new("RGB", (img_width, img_height), "black")
canvas = ImageDraw.Draw(img)

x = PADDING
ystart = PADDING + vmax

for i in xrange(1, len(lines)):
    line = lines[i]
    canvas.line((x, ystart - lines[i - 1] + PADDING, x, ystart - line + PADDING), fill=0x00FF00)
    x += 1

img.show()

if len(sys.argv) == 3:
    img.save(sys.argv[2])

 

Скрипт анализа данных:

Spoiler

import sys
from PIL import Image, ImageDraw

with open(sys.argv[1], 'r') as source:
    lines = []
    vmin = 65535
    vmax = 0
    vtotal = 0
    for line in source:
        if not line or line.startswith('TRACK'):
            continue
        value = line.strip().replace(",","")
        if value and not value.startswith('\x00'):
            value = int(value)
            vtotal += value
            lines.append(value)
            if value < vmin:
                vmin = value
            if value > vmax:
                vmax = value

average = vtotal / len(lines)

#print 'Min: %d; Max: %d; Average: %d, num lines: %d' % (vmin, vmax, average, len(lines))

LOGIC_ONE = 3
LOGIC_ZERO = 10
prev = 2
lo = 0
lz = 0
for line in lines:
    v = 1 if line > average else 0
    if prev != v:
        prev = v
        lo = 0
        lz = 0
        #sys.stdout.write(str(v))
    else:
        if v:
            if lo == LOGIC_ONE:
                sys.stdout.write('1')
                lo = 0
            else:
                lo += 1
        else:
            if lz == LOGIC_ZERO:
                sys.stdout.write('0')
                lz = 0
            else:
                lz += 1
sys.stdout.write('\n')
sys.stdout.flush()

 

На выходе:

1111101111111101010111011111111111111111111111111111110101111110000000000000111111111110011011111111111101111111101010111011111111111111011110101111111101111111111010111101011111111111111111111010111111111110101111111111111111111111111011111111110101111111101101010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

 

16c.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сообщения

    • 1. Да. Только перед конденсатором нужно будет установить дроссель; 2. Да. Стабилитрон может быть 11-15В; 3. Смотря какая нагрузка БП и коэффициент трансформации тр-ра связи (ОС по току). Чем выше коэф. тем меньше ток через стабилитроны. При нагрузке 200Вт стабилитроны в моей схеме уже были ощутимо теплые. Как вариант можно взять 2 соединенных последовательно стабилитрона 0,5W 5,6-6,2В. Это будет эквивалент 11-12В, 1W.
    • ну если вы можете почти что голыми руками, около 10-ти часов тыкать железку под большим напряжением в уголь, так что бы уголь не пробило и кромку не оплавило, то я сниму перед вами свой капюшон.)
      скажу только что оно того стоит. у меня есть лампочка накала, стеклянная колба которой - исцарапанная после подобных процедур со стамесками.
      сложнее всего с ножами для фуговочного станка. 300мм. у меня было два комплекта, когда начинал экспериментировать. один "процементировал" а другой не трогал. изначально это были два одинаковых, уже отработанных комплекта.
      тот что после цементации звенел "выше" и дольше(4 человека определяли) и при обработке дуба продержался лучше. все при одних и тех-же условиях, "набитыми" руками.
      по этому, исходя из своего Опыта и наблюдений могу сказать  - нужен генератор пачек импульсов. нужно регулировать длительность импульса и его "интенсивность". 
      если можете предложить что-то более простое и не менее действенное исходя из Вашего опыта - предлагайте. и для этого - тоже.
    • http://forum.cxem.net/uploads/monthly_2017_12/IMG_0275.jpg.371ef102dd26df72239befb4ecf6b436.jpg Там есть красный и синий, красивые проводочки на клеммах, впаяных в плату. Четыре отверстия 1мм с выфрезерованными перемычками.
    • В общем, пока что все-таки пришел к данному способу измерения, как наиболее пригодному, недорогому  и простому в реализации и повторении. Если несколько упростить конструкцию, то можно реализовать устройство, используя только токарные изделия. Поэтому буду пробовать. Спасибо за рекомендацию! Осталось только придумать из какого материала выточить контактные пластины для контактного датчика. Пока что крутиться в голове Кремнистая бронза. Возможно? титан, правда никогда не слышал, чтобы из него делали контакты, но мне он нравиться своей стабильностью свойств в атмосфере. Для улучшения контакта и пробивки оксидных пленок, можно использовать повышенное напряжение (12, 24В) и после прохождения через прерыватель делить его и подавать на плату измерений.
    • для этого это однозначно не нужно. и для этого тоже...