В качестве простой модификации того, что вы делаете, вы можете попробовать что-то вроде этого:
def update(self, line):
# Get new data and update the counter
self.data_segment[self.ptr] = line[1]
self.ptr += 1
# Update the graph to show the last 256 samples
n = min( 256, len(self.data_segment) )
self.line_plot.setData(self.data_segment[-n:])
Для явного сокращения выборки данных вы можете попробовать это
resampled_data = scipy.signal.resample( data, NumberOfPixels )
или для уменьшения количества самых последних наборов из N точек,
n = min( N, len(self.data_segment) )
newdata = scipy.signal.resample( self.data_segment[-n:], NumberOfPixels )
self.line_plot.setData(newdata)
Тем не менее, хороший графический движок должен делать это автоматически.
Предостережение в отношении передискретизации или понижающей выборки заключается в том, что исходные данные не содержат информации или функций в масштабе, который является слишком быстрым для нового масштаба после повторной или понижающей выборки. Если это так, то функции будут работать вместе, и вы получите нечто, похожее на ваш второй график.
Некоторые общие замечания по сбору, обработке и отображению сигнала кодирования
Возможно, на данный момент полезно предложить некоторые общие комментарии по работе с сигналами и их отображению.
В любой задаче кодирования сбора, обработки и отображения сигнала архитектор или кодер (иногда по умолчанию) должен понимать (а) что-то из физического явления, представленного данными, (б) как будет использоваться информация, и (c) физические характеристики систем измерения, обработки сигналов и отображения (ср., полосы пропускания, частоты дискретизации, динамический диапазон, шумовые характеристики, алиасинг, эффекты пикселизации и т. д.).
Это большой предмет, и его не часто полностью описывают ни в одном учебнике. Кажется, нужен некоторый опыт, чтобы собрать все это вместе. Более того, мне кажется, что если вы недостаточно хорошо понимаете измерение, чтобы кодировать его самостоятельно, то вы также не знаете достаточно, чтобы использовать или полагаться на стандартную процедуру. Другими словами, ничто не заменит понимание, и обычная рутина должна быть лишь удобством, а не опорой. Даже для алгоритма передискретизации, предложенного выше, я бы посоветовал его пользователю понять, как он работает и как он влияет на их сигнал.
В этом конкретном примере мы узнаем, что приложением является кардиография, тип не указан, и что кодировщику предоставляется большая широта. Как кодер, мы должны попытаться узнать об этих видах измерений (например, сердце в целом и электро-, акустической и эхокардиографии) и о том, как они выполняются и используются, и попытаться найти некоторые примеры.
P / S. Для тех, кто работает с цифровыми фильтрами, если вы не изучали предмет формально, было бы полезно прочитать книгу Хемминга «Цифровые фильтры». Это доступно как книга Dover и доступно.