删除huffman相关,分析工具不过滤异常数据

This commit is contained in:
ranchuan
2023-12-09 13:30:15 +08:00
parent bad906f3aa
commit 545fcccef9
3 changed files with 13 additions and 154 deletions

View File

@@ -118,5 +118,7 @@
2023.11.21
分析工具修改上下限时自动重绘
添加huffman压缩编码,已完成编码,未验证
2023.12.9
删除huffman相关分析工具不过滤异常数据

View File

@@ -258,7 +258,8 @@ class sch_data(object):
cur.execute(cmd,(self.date_start,self.date_end,scheme_id))
check_data=cur.fetchall()
for row in check_data:
if(row[3]==0):
# 这里过滤检测异常的结果
# if(row[3]==0):
s=row[5].split(',')
for i in range(len(s)):
data_list[i].append(int(s[i]))

View File

@@ -469,18 +469,18 @@ class protu(QObject):
# if __name__ == "__main__":
# u=protu()
if __name__ == "__main__":
u=protu()
# u.init("utcp:7777")
# u.send_file(0xee,"file/JQ_JCXB_V54.bin")
# u.send_file(0xed,"../Objects/checker_gen1_app_20230602.bin")
# 设置电阻 矫正值
# u.cmd=0x41
# data=bytearray([1,0,0x00,2,0,0x00,3,0,0x00,4,0,0x00,5,0,0x00,6,0,0x00,7,0,0x00,8,0,0x00,9,0,0x00,10,0,0x00,11,0,0x00,12,0,0x00,13,0,0x00,14,0,0x00,15,0,0x00,16,0,0x00,17,0,0x00,18,0,0x00,19,0,0x00,20,0,0x00])
# data=bytearray([1,100,0x00,2,0,0x00,3,0,0x00,4,0,0x00,5,0,0x00,6,0,0x00,7,0,0x00,8,0,0x00,9,0,0x00,10,0,0x00,11,0,0x00,12,0,0x00,13,0,0x00,14,0,0x00,15,0,0x00,16,0,0x00,17,0,0x00,18,0,0x00,19,0,0x00,20,0,0x00])
# 测量电阻
# u.cmd=0x42
# data=bytearray([0])
u.cmd=0x42
data=bytearray([5])
# 设置硬件版本号
# u.cmd=0x43
# data=bytearray([1,50,0x00,2,51,0x00,3,52,0x00,4,53,0x00,5,54,0x00,6,55,0x00,7,56,0x00,8,57,0x00,9,58,0x00,10,59,0x00,11,60,0x00,12,61,0x00,13,62,0x00,14,63,0x00,15,64,0x00,16,65,0x00,17,66,0x00,18,67,0x00,19,68,0x00,20,69,0x00])
@@ -490,7 +490,7 @@ class protu(QObject):
# data=bytearray([0x02]) # 上升
# data=bytearray([0x03]) # 下降
# print(u.encode(data).hex(' '))
print(u.encode(data).hex(' '))
# with open("file/EX_Coder_Test_2023-07-6.json","rb") as f:
# json_obj=json.loads(f.read())
# d=scheme_to_byte(json_obj)
@@ -513,147 +513,3 @@ class protu(QObject):
# 59 6D 03 00 31 00 00 31 CF
def sort_table(index_table):
for i in range(len(index_table)):
item=index_table[i]
for j in range(i+1,len(index_table)):
if(index_table[j][1]>item[1]):
index_table[i]=index_table[j]
index_table[j]=item
item=index_table[i]
def exp(num:int,e:int):
res=1
for i in range(e):
res*=num
return res
def clac_zl_table(num:int):
count=1
while(num>exp(2,count)):
count+=1
# 使用短编码的个数
diff=exp(2,count)-num
zl_table=[]
for i in range(diff):
zl_table.append(i)
# 使用长编码的个数
diff2=num-exp(2,count-1)
for i in range(diff,diff+diff2):
zl_table.append(i*2)
zl_table.append(i*2+1)
print(zl_table)
return zl_table,count,diff
def huffman(data:bytearray):
count_table=bytearray(256)
for i in data:
count_table[int(i)]+=1
index_table=[]
for i in range(len(count_table)):
if(int(count_table[i])>0):
index_table.append((i,count_table[i]))
# print(index_table)
sort_table(index_table)
print("index_table",index_table)
num=len(index_table)
# clac_zl_table(num)
ret=bytearray()
for i in index_table:
ret.append(i[0])
ret.append(i[1])
return index_table
# 获取树的值
def calc_sum_of_tree(tree:list):
sum=0
if(len(tree)==2):
sum=calc_sum_of_tree(tree[0])+calc_sum_of_tree(tree[1])
elif(len(tree)==1):
sum=tree[0][1]
return sum
# 获取树的深度
def calc_deep_of_tree(tree:list):
deep=1
if(len(tree)==2):
sum1=calc_deep_of_tree(tree[0])
sum2=calc_deep_of_tree(tree[1])
if(sum1>sum2):
deep+=sum1
else:
deep+=sum2
elif(len(tree)==1):
deep=1
return deep
# 在树中找到指定字符的编码
def calc_code_of_char(tree:list,code:int):
# 根据index_table生成huffman树
def creat_huffman_tree(index_table:bytearray):
index_list=[]
for i in range(len(index_table)//2):
index_list.append(index_table[i*2:i*2+2])
print("index_list",index_list)
tree=[index_list[-1]]
index_list=index_list[:-1]
while len(index_list)>0:
sub=[index_list[-1]]
index_list=index_list[:-1]
# 大在左,小在右
if(calc_sum_of_tree(sub)>calc_sum_of_tree(tree)):
tree=[sub,tree]
else:
tree=[tree,sub]
print("tree deep:",calc_deep_of_tree(tree))
print(tree)
return tree
# 根据值获取其序号
def value_to_index(index_table:list,value):
for i in range(len(index_table)):
if(value==index_table[i]):
return i
return -1
# 生成指定位数的mask
def calc_mask(num:int):
ret=0
for i in range(num):
ret<<=1
ret|=1
return ret
def huffman_encode(data:bytearray):
ret=bytearray(1024)
index=0
index_table=huffman(data)
# print("index_table",index_table.hex(' '))
print("index_table",index_table)
creat_huffman_tree(index_table)
def huffman_decode(data:bytearray):
zl_table,count,diff=clac_zl_table(data[0])
index_table=data[1:data[0]+1]
data=data[data[0]+1:]
index_all=len(data[1:])*8-data[0]
ret=bytearray()
index=0
if __name__ == "__main__":
huffman_encode(b"1234567891234233434237873678378263738")