2017-01-08 52 views
7

Czy możliwe jest obliczenie wstępnych (pamięci podręcznej) zagregowanych wartości (min/max/śr) wartości będących różnicą dwóch sygnałów ?Buforowanie agregacji szeregów czasowych różnic

Mam kilka kanałów (na przykład 50), z jednym lub większą liczbą pomiarów w każdej sekundzie, i mogę łatwo przechowywać wstępnie obliczone 1-minutowe lub 15-minutowe agregaty dla szybszego wyświetlania.

Ale jednym z wymagań jest pokazanie wykresu wartości względnych. Na przykład. jeśli mam kanały C1, C2 i C3, użytkownik chciałby zobaczyć średnie z C1 i średnie z (C2 - C3) (lub 15 minut minimum/maksimum) na oddzielnym wykresie.

Dla przykładów, powiedzmy, że mam te 2 kanały (i 48 więcej):

t(min) 0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 
C1  0.0 0.1 0.2 -0.1 0.0 0.1 0.3 0.5 0.7 0.9 0.2 
C2  0.1 0.4 0.2 0.1 -0.1 0.5 0.6 0.1 0.2 0.3 0.0 

mogę precalculate i przechowywania 5-minutowe agregaty:

t(min) 0 to +4 +5 to +10 
C1_min  -0.1   0.1 
C1_max  0.2   0.9 
C2_min  -0.1   0.0 
C2_max  0.4   0.6 

i łatwo dostać 10-minutowych lub 15-minutowe agregacje z tego.

Ale jeśli użytkownik chce zobaczyć min(C2-C1) lub max(C2-C1) 5-minutowe agregaty, dla dowolnej kombinacji tych 50 kanałów, wydaje się, że nie mogę ponownie użyć tych informacji.

Innymi słowy, wydaje mi się, że niemożliwe jest obliczenie tego, poza przechowywaniem każdej możliwej kombinacji tych krotek, ponieważ min(C2-C3) nie jest równa min(C2)-min(C3).

Czy brakuje mi jakiegoś pomysłu, który może pomóc mi szybciej obliczyć te wartości?

+0

Myślę, że pomogłyby przykładowe dane i pożądane wyniki. –

+0

@GordonLinoff: Zaktualizowałem pytanie, mam nadzieję, że dzięki temu będzie ono nieco jaśniejsze. – Lou

+2

Myślę, że masz rację co do min i max (rozważ dwa identyczne sygnały .. ich różnica będzie zerowa). średnia jest w porządku, ave (AB) = ave (A) -ave (B) (patrz http://math.stackexchange.com/questions/1360311/why-is-the-average-of-a-sum- równy-sumie-of-the-średnie) – danh

Odpowiedz

1

Po prostu trzeba mieć wszystkie dane z C2 i C3, aby uzyskać agregację min(C2-C3).

Jednakże, jeśli twoim celem jest zminimalizowanie dane wymagane do wykonania tej kalkulacji, proponuję zrobić to w następujący sposób (rozwiązanie to będzie wymagać do czynienia z dużymi liczbami - w zależności od liczby kanałów):

Jeśli znasz wszystkie kanały nie będą miały wartości, która przekracza pewną wartość (powiedzmy to 10) wtedy możemy połączyć wszystkie dane z kanałów w 1 kanale, nazwijmy to C

Aby obliczyć C:

C = (C1 * 10^1) + (C2 * 10^2) + (C3 * 10^3) + .. + (Cn * 10^n). 

Będziesz mieć kanał C, który ma wszystkie wartości kanałów osadzone.

Następnie obliczyć różnicę między 2 kanałami w pewnym momencie, wszystko co musisz zrobić, to „wyciąg” te 2 kanały wartości od C w locie:

C1 = floor((C mod 10^1)/10^(1-p))/10^p 
C2 = floor((C mod 10^2)/10^(2-p))/10^p 
... 
Cn = floor((C mod 10^n)/10^(n-p))/10^p 

Gdzie p jest precyzja dziesiętna wyodrębniona wartość kanału.

W tej kalkulacji precedensowym diff między dwoma kanałami x i y użyciu wstępnie obliczona C byłoby:

min(Cy-Cx) = min((floor((C mod 10^y)/10^(y-p))/10^p) - (floor((C mod 10^x)/10^(x-p))/10^p)) 

a następnie można agregować te wartości ponad odstępach czasu. Mam nadzieję, że to pomoże.

+0

Ale to nadal oznacza, że ​​muszę przeczytać każde "C", a każde "C" jest co najmniej tak duże, jak suma wszystkich kanałów. Oznacza to, że musiałbym czytać jeszcze więcej danych w ten sposób (cóż, mniej dostępu do tabel, ale większa całkowita ilość danych). – Lou

+0

Z pewnością zależy to od granic zasobów, w tym przypadku 'C' będzie dużą liczbą tak, ale obliczasz ją tylko raz w fazie przedliczenia wraz z min i maks. Ale wtedy, gdy chcesz wygenerować agregację różnic, nie potrzebujesz dostępu do wszystkich danych kanałów z okresu agregacji, a to tylko kwestia uzyskania dostępu do wartości 'C' odpowiadającego przedziału czasowego. –

+0

Tak więc dla twojego przykładu: jeśli masz 50 kanałów, to zapiszesz w pętli wszystkie kombinacje tych danych kanałów i umożliwisz uzyskanie różnic przez samo uzyskanie dostępu do wartości 'C'. Czy liczba pamięci jest ograniczona? –