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

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

11.07.2015, 23:32. Показов 3281. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru