1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 from timeside.core import implements, interfacedoc
24 from timeside.analyzer.core import Analyzer
25 from timeside.api import IValueAnalyzer
26 import numpy as np
27
28
29 -class Level(Analyzer):
30 implements(IValueAnalyzer)
31
32 @interfacedoc
33 - def setup(self, channels=None, samplerate=None, blocksize=None,
34 totalframes=None):
40
41 @staticmethod
42 @interfacedoc
45
46 @staticmethod
47 @interfacedoc
49 return "Level Analyzer"
50
51 @staticmethod
52 @interfacedoc
55
56 - def process(self, frames, eod=False):
57 if frames.size:
58
59 max_value = frames.max()
60 if max_value > self.max_value:
61 self.max_value = max_value
62
63 self.mean_values = np.append(self.mean_values,
64 np.mean(np.square(frames)))
65 return frames, eod
66
67 - def post_process(self):
68
69 max_level = self.new_result(data_mode='value', time_mode='global')
70
71 max_level.id_metadata.id += '.' + "max"
72 max_level.id_metadata.name += ' ' + "Max"
73
74 max_level.data_object.value = np.round(20*np.log10(self.max_value), 3)
75 self.process_pipe.results.add(max_level)
76
77
78 rms_level = self.new_result(data_mode='value', time_mode='global')
79 rms_level.id_metadata.id += '.' + "rms"
80 rms_level.id_metadata.name += ' ' + "RMS"
81
82 rms_level.data_object.value = np.round(20*np.log10(
83 np.sqrt(np.mean(self.mean_values))), 3)
84 self.process_pipe.results.add(rms_level)
85