This repository was archived by the owner on Jul 30, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpipeline.py
64 lines (49 loc) · 2.4 KB
/
pipeline.py
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
import os
from datetime import datetime
from mm_codecs import mm_encode, mm_decode
from ge_pattern_generator import GilbertElliotPatternGenerator
from util import read_generator, write_to, count_bit_errors
class EvaluationRun(object):
def __init__(self, seed=0, pattern=""):
self.seed = seed
self.pattern = pattern
self.ge = GilbertElliotPatternGenerator(1, 0.99999, 0.1, seed=seed)
self.result_bit_errors = 0
self.redundancy = 1
self.ideal_redundancy = 0
self.duration = 0
self.error_ratio = 0
def run(self):
src_file = "./resources/original.mp4"
dst_file = "./resources/received_{}.mp4".format(self.pattern.replace(".txt", ""))
size = os.path.getsize(src_file)
start = datetime.now()
stream_src = read_generator(src_file)
stream_enc = mm_encode(stream_src)
stream_tx = self.ge.step(stream_enc, "patterns/" + self.pattern)
stream_dec = mm_decode(stream_tx)
write_to(dst_file, stream_dec)
stop = datetime.now()
self.duration = (stop - start).total_seconds()
self.result_bit_errors = count_bit_errors(src_file, dst_file)
self.error_ratio = (float(self.result_bit_errors) / self.ge.bit_errors)
self.redundancy = (float(self.ge.bytes_processed) / size - 1)
ge_error_rate = float(self.ge.bit_errors) / (self.ge.bytes_processed * 8)
self.ideal_redundancy = 1 / (1 - ge_error_rate) - 1
def __str__(self):
return "%8d / %6d = %s | %s / %s | %6ds | %s" % (self.result_bit_errors, self.ge.bit_errors,
"{:8.2f}%".format(self.error_ratio * 100),
"{:10.2e}".format(self.redundancy),
"{:16.2e}".format(self.ideal_redundancy),
self.duration,
self.pattern)
def main():
dir_path = os.path.dirname(os.path.realpath(__file__))
pattern_files = sorted([f for f in os.listdir(os.path.join(dir_path, "patterns"))])
print("Residual / Errors = Ratio | Measured / Ideal Redundancy | Runtime | Pattern")
for pattern in pattern_files:
r = EvaluationRun(pattern=pattern)
r.run()
print(r)
if __name__ == "__main__":
main()