Интересно, есть ли простой и эффективный способ отметить сигнал, который является сигналом от фотодиода, прикрепленного к монитору, и собирает информацию о его изменениях яркости. Яркость меняется резко.Маркировка сигнала
На следующем рисунке я указал часть сигнала от одного изменения яркости от более высокого до более низкого значения.
Теперь проблема, я не знаю, что было бы лучшим способом «знак» собрал сигнал с «маркеров», то есть. информация при изменении яркости. К сожалению, у меня нет никакого кода для обзора, потому что, если честно, я не знаю с чего начать. Буду признателен за советы и советы. Заранее спасибо.
PS Крайне важно, чтобы использовать метод, который будет поставить маркер в нужное место вовремя. Частота дискретизации сигнала на изображениях выше была 1024 Гц, а шкала x
выражена в секундах.
Образец данных: http://www.filedropper.com/data_6
UPDATE 10.02.2015
Когда я пытался найти решение моей проблемы, я получил идею, которая, может быть, это хорошая трасса.
Я использовал фильтр нижних частот на своем сигнале, т.е.
# File name "Filters.py"
import scipy.signal as ss
def filt(sig, sf, cf, btype='higphass'):
"""
:param sig: signal.
:param sf: sampling frequency.
:param cf: cut frequencies - array.
:param btype: bandpass type.
:return: bandpassed signal.
"""
if btype == 'higphass' or btype == 'lowpass':
b, a = ss.butter(3, Wn=cf/(0.5*sf), btype=btype, analog=0, output='ba')
return ss.filtfilt(b, a, sig)
elif btype == 'bandstop' or btype == 'bandpass':
b, a = ss.butter(3, Wn=(cf[0]/(0.5*sf), cf[1]/(0.5*sf)), btype=btype, analog=0, output='ba')
return ss.filtfilt(b, a, sig)
... 40 Гц для резки:
import IBD.ElectricalStimulation.Filters as filt
filtered = filt.filt(signal, 1024, 40, btype='lowpass')
py.plot(time_scale, filtered)
... который дал мне:
Далее, я образовавшаяся отфильтрованный сигнал с шагом (п) равен 1, а затем я поднял его до степени 2.
# Derivate signal.
step = 1
accuracy_range = 9
derivative = np.diff(filtered, n=step)
derivative = np.append(derivative, np.zeros(step)) ** 2
derivative[derivative > accuracy_range] = np.max(filtered)
derivative[derivative < accuracy_range] = 0
py.plot(time_scale, derivative)
Это приводит к:
Теперь проблема в том, что я не могу «знак» каждое событие. Некоторые изменения освещенности должны быть низкими, чтобы их «видели» по производной операции.
Не могли бы вы загрузить некоторые данные примера? –
Добавлено. Данные в файле data.txt были написаны с использованием метода numpy.savetxt(). Сам массив Numpy кодируется в 'float32'. – bluevoxel