Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 34

Определить границы участка импульса

11.07.2015, 23:32. Показов 3320. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Господа. помогите разобраться со определением границ импульса. Сам график есть результат визуализации данных с массива np.array. Красные линии выделяют искомые границы. Необходимо определить длительность этого участка.
подскажите в какую сторону хоть смотреть.
Спасибо
Миниатюры
Определить границы участка импульса  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.07.2015, 23:32
Ответы с готовыми решениями:

Уточнение границы участка своими силами
Возникла задача в рабочем порядке найти расположение точек, ограничивающих участок в деревне. Профессиональных геодезистов приглашать не...

Сохранение импульса. Во сколько раз модуль импульса тела при броске больше модуля импульса в верхней точке траектории
Тело брошено под углом 60град. к горизонту со скоростью, модуль которой равен 20м/с.. Во сколько раз модуль импульса тела при броске больше...

Определить, как изменится сумма элементов матрицы, в случае замены элементов, выходящих за границы значениями границы
Если максимальный и минимальный элемент прямоугольной матрицы не попадают на заданный отрезок, определить, как изменится сумма элементов...

19
 Аватар для ivlevdenis
21 / 34 / 14
Регистрация: 23.07.2014
Сообщений: 148
11.07.2015, 23:43
время дискретизации * кол-во отсчетов в промежуток времени = время действия импулься
0
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 34
12.07.2015, 10:30  [ТС]
Спаибо КэП)
но как узнать количество точек в заданном участке?
Наверно так: время деиствия импульса / на частоту дискретизации??)
0
 Аватар для ivlevdenis
21 / 34 / 14
Регистрация: 23.07.2014
Сообщений: 148
12.07.2015, 11:59
А минусануть индекс конца от индекса начала не судьба?!
0
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 34
12.07.2015, 15:18  [ТС]
Для этого необходимо определить и конец и начало импульса. Собственно в этом то и вопрос)
Пока думаю так:
While i<100:
If a[i] > 5:
i=i+1
i.append(i)
print (len(i))
Извеняюсь за грамматику кода. Пишу с телефона)
0
 Аватар для ivlevdenis
21 / 34 / 14
Регистрация: 23.07.2014
Сообщений: 148
12.07.2015, 16:10
Первым делом я бы объявил переменную - максимальная длительность дребезга, что бы отсеивать паразитов. Также нужно задать минимальный уровень, при котором будет определяться наличие фронта импульса; и соответственно минимальный уровень, для определения спада.
И лучше сначала применить фильтр Гаусса, что бы немного сгладить сигнал, и избавиться от помех.
0
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 34
12.07.2015, 20:26  [ТС]
фильтр это хорошо. но данный импульс и так уже есть результат фильтрации сигнала на более ранних стадиях.
а про максимальный и минимальный уровень это да.. в этом направлении я и копаю.
но пока что то не так делаю)
тот код, изи прошлого моего сообщения, вызывает зависание программы.
Python
1
2
3
while l<abs(sec/2):
    if W[l]>5:
        l=l+1
что то if структура не нравится программе.
0
 Аватар для ivlevdenis
21 / 34 / 14
Регистрация: 23.07.2014
Сообщений: 148
13.07.2015, 02:08
Тебе не нужно проверять каждый элемент массива. Если я правильно понял, то W массив значений.
Python
1
2
3
4
5
W = np.array(...)
if any(W > 5): # проверяем, был ли вообще сигнал
    Wgt5 = np.where(W > 5) # выборка значений массива > 5
    iW = np.in1d(W, Wgt5) # если значение из W есть в Wgt5, то поставляем True, и наоборот
    plt.plot(iW) # вывод
Для моего сигнала (слева), будет результат(справа)
Миниатюры
Определить границы участка импульса   Определить границы участка импульса  
0
 Аватар для ivlevdenis
21 / 34 / 14
Регистрация: 23.07.2014
Сообщений: 148
13.07.2015, 02:17
Извиняюсь, в коде выше ошибка!
iW = np.in1d(W, Wgt5) читать как iW = np.in1d(W, W[Wgt5])
Результат:
Миниатюры
Определить границы участка импульса  
0
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 34
13.07.2015, 10:27  [ТС]
Я сделал так:
Python
1
2
3
4
5
6
7
for i in (W):
    #print W[l]
    if i >5.00:
        M=M+1
        
    i=i+1
print M, 'длинна импульса производнои'
но в итоге получаю не совсем то что хотел(
сказывается то что импульс в середине имеет провал до нуля, и изза этого границы считает меньше.
Видимо придется еще раз применять фильтр.
Python
1
2
3
4
5
6
7
8
i=0
r=[]
for i in (W):
    if i==max(W[i:i+50]):
     r.append(i)
     print r
    
     i=i+1
вот так теперь пытаюсь наити максимумы на всем диапазоне с шагом 50 точек.
но почему то не происходит итерации(

Добавлено через 1 минуту
Да. кстати. ни кто не в курсе, как в питоне реализованы цифровые фильтры? не смог наити. но ведь должны же быть???
0
 Аватар для ivlevdenis
21 / 34 / 14
Регистрация: 23.07.2014
Сообщений: 148
13.07.2015, 14:44
Странный код у тебя. Покажи полный листинг кода.
ps: фильтрацию можно сделать с помощью scipy.
Python
1
scipy.ndimage.gaussian_filter1d(ar, 1)
Кликните здесь для просмотра всего текста
Цитата Сообщение от Alexan1234 Посмотреть сообщение
Я сделал так:
Python
1
2
3
4
5
6
for i in (W):
* * #print W[l]
* * if i >5.00:
* * * * M=M+1
i=i+1
print M, 'длинна импульса производнои'
но в итоге получаю не совсем то что хотел(
сказывается то что импульс в середине имеет провал до нуля, и изза этого границы считает меньше.
Видимо придется еще раз применять фильтр.
Python
1
2
3
4
5
6
7
i=0
r=[]
for i in (W):
* * if i==max(W[i:i+50]):
* * *r.append(i)
* * *print r
i=i+1
вот так теперь пытаюсь наити максимумы на всем диапазоне с шагом 50 точек.
но почему то не происходит итерации(
Добавлено через 1 минуту
Да. кстати. ни кто не в курсе, как в питоне реализованы цифровые фильтры? не смог наити. но ведь должны же быть???
0
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 34
13.07.2015, 20:15  [ТС]
Да второи код он и не работает. одну итерацию проходит и все.
Ну а первый считает количество членов массива больше 5.
Спасибо за фильтр. сеичас поразбираюсь

Добавлено через 6 минут
Слушай. поналеглею еще)) есть пообширнее инфа о фильтрах этих scipy.ndimage.gaussian_filter1d(ar, 1).
как его пользовать? что то я на docs.scipy ни чо не нашел(
0
 Аватар для ivlevdenis
21 / 34 / 14
Регистрация: 23.07.2014
Сообщений: 148
13.07.2015, 20:19
Ну так это не в numpy, а в scipy)
http://docs.scipy.org/doc/scip... image.html
0
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 34
13.07.2015, 21:39  [ТС]
да вот это я и смотрю.. ни чо не понятно.. нет примеров))

Добавлено через 11 минут
что то ругается паитон 2.7
name 'ndimage' is not defined

Добавлено через 3 минуты
from scipy import ndimage
вот что просил..
0
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 34
13.07.2015, 21:52  [ТС]
Слушай. а подскажи, может знаешь как расстояния наити между максимумами)???
Миниатюры
Определить границы участка импульса  
0
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 34
13.07.2015, 22:21  [ТС]
Python
1
2
3
4
5
6
7
W=np.array(W)
 
#фильтр гауса
print "фильтр гауса"
bl = ndimage.gaussian_filter(W, 3)
plt.plot(bl)
plt.show()
вот соббственно код. тот что ты предложил., я поэтому его и не прикладыал.

ну а переменная W, это результат преобразования из List (списка)
0
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 34
13.07.2015, 23:09  [ТС]
вот данные
Вложения
Тип файла: txt 2otvV1.txt (19.8 Кб, 4 просмотров)
0
 Аватар для ivlevdenis
21 / 34 / 14
Регистрация: 23.07.2014
Сообщений: 148
13.07.2015, 23:27
С помощью функции peakdet из скрипта.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import sys
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
from numpy import NaN, Inf, arange, isscalar, asarray, array
 
def peakdet(v, delta, x = None):
    """
    Converted from MATLAB script at [url]http://billauer.co.il/peakdet.html[/url]
    
    Returns two arrays
    
    function [maxtab, mintab]=peakdet(v, delta, x)
    %PEAKDET Detect peaks in a vector
    %        [MAXTAB, MINTAB] = PEAKDET(V, DELTA) finds the local
    %        maxima and minima ("peaks") in the vector V.
    %        MAXTAB and MINTAB consists of two columns. Column 1
    %        contains indices in V, and column 2 the found values.
    %      
    %        With [MAXTAB, MINTAB] = PEAKDET(V, DELTA, X) the indices
    %        in MAXTAB and MINTAB are replaced with the corresponding
    %        X-values.
    %
    %        A point is considered a maximum peak if it has the maximal
    %        value, and was preceded (to the left) by a value lower by
    %        DELTA.
    
    % Eli Billauer, 3.4.05 (Explicitly not copyrighted).
    % This function is released to the public domain; Any use is allowed.
    
    """
    maxtab = []
    mintab = []
       
    if x is None:
        x = arange(len(v))
    
    v = asarray(v)
    
    if len(v) != len(x):
        sys.exit('Input vectors v and x must have same length')
    
    if not isscalar(delta):
        sys.exit('Input argument delta must be a scalar')
    
    if delta <= 0:
        sys.exit('Input argument delta must be positive')
    
    mn, mx = Inf, -Inf
    mnpos, mxpos = NaN, NaN
    
    lookformax = True
    
    for i in arange(len(v)):
        this = v[i]
        if this > mx:
            mx = this
            mxpos = x[i]
        if this < mn:
            mn = this
            mnpos = x[i]
        
        if lookformax:
            if this < mx-delta:
                maxtab.append((mxpos, mx))
                mn = this
                mnpos = x[i]
                lookformax = False
        else:
            if this > mn+delta:
                mintab.append((mnpos, mn))
                mx = this
                mxpos = x[i]
                lookformax = True
 
    return array(maxtab), array(mintab)
 
value_list = open('2otvV1.txt').readlines()
values = [float(x.strip()) for x in value_list if x.strip() != '']
max_ind, min_ind = peakdet(values, 1)
plt.plot(values)
plt.plot(array(max_ind)[:,0], array(max_ind)[:,1], 'xb')
plt.plot(array(min_ind)[:,0], array(min_ind)[:,1], 'or')
А до остального нужно догадаться)
0
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 34
14.07.2015, 23:02  [ТС]
Спасибо). буду изучать.

Добавлено через 23 часа 5 минут
она мне безовсяких фильтров гауса в исходном сигнале все максимумы и минимумы локальные отметила!!!
0
 Аватар для ivlevdenis
21 / 34 / 14
Регистрация: 23.07.2014
Сообщений: 148
15.07.2015, 17:10
Да, в твоем случае фильтры применять не нужно. Если бы сразу были исходные данные, то и первоначальный ответ был бы точнее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.07.2015, 17:10
Помогаю со студенческими работами здесь

Найти приращение импульса тела и среднее значение импульса за время полета
Тело массой m бросили под углом к горизонту с начальной скоростью Vo. Спустя время Vo\tau тело упало на Землю. Пренебрегая сопротивлением...

Как из формулы импульса вывести формулу момента импульса
Здравствуйте! подскажите , пожалуйста, как из формулы импульса получить формулу момента импульса? буду очень благодарна, потому что срочно...

Определить модуль импульса тела
На тело действует сила, модуль которой изменяется по закону: F=At2+Bt, где A=3*\frac{H}{c^2}, B=2*\frac{H}{c}, t - время. Определить...

Определить продолжительность лазерного импульса
Помогите срочно. Через 2 часа экзамен. Разобрал все задачи кроме этой. Скорее всего она легкая, решается где-то в 2-3 действия но я не могу...

Определить изменения момента импульса
Доброго времени суток! Срочно, пожалуйста, помогите если можете


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru