Skip to content

Commit 32d671d

Browse files
authored
Add files via upload
1 parent fec10f1 commit 32d671d

File tree

4 files changed

+421
-0
lines changed

4 files changed

+421
-0
lines changed

2DimentionalParityCheck.py

+154
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
#!/usr/bin/env python
2+
# coding: utf-8
3+
4+
# In[10]:
5+
6+
7+
def testing(reciever,div=5):
8+
9+
message=str()
10+
length=len(reciever)
11+
#removing last column parity
12+
col = reciever[length-div:]
13+
reciever = reciever[:length-div]
14+
15+
#checking error at parity in rows(added in middle by sender) and then removing
16+
row=[]
17+
row_count=0
18+
while(reciever):
19+
chunk = reciever[:div]
20+
old_parity=int(reciever[div])
21+
reciever = reciever[div+1:]
22+
message+=chunk
23+
24+
sum_chunk=0
25+
for i in range(div):
26+
sum_chunk += int(chunk[i])
27+
if old_parity != (sum_chunk%2):
28+
row.append(row_count)
29+
row_count+=1
30+
31+
print("Error in row_parity at",row)
32+
33+
#checking parity in columns
34+
col_len=len(message)//div
35+
col_parity=[]
36+
for j in range(div):
37+
sum_chunk=0
38+
for i in range(col_len):
39+
sum_chunk += int(message[i*div+j])
40+
if int(col[j]) != (sum_chunk%2):
41+
col_parity.append(j)
42+
43+
print("Error in col_parity at",col_parity)
44+
print("message received",message)
45+
46+
if len(row)==0 and len(col_parity)==0:
47+
print("\nThere is no any error.")
48+
else:
49+
for i in range(len(row)):
50+
idx=row[i]*div+col_parity[-(i+1)]
51+
print("error found in the message at index",idx)
52+
53+
if message[idx]==0:
54+
message=message[:idx]+'1'+message[idx+1:]
55+
else:
56+
message=message[:idx]+'0'+message[idx+1:]
57+
print("\nMessage after correcting at index",idx,"is",message)
58+
print("\nFinal message is",message)
59+
60+
61+
# In[11]:
62+
63+
64+
# def test(sender,reciever,div=4):
65+
# length=len(reciever)
66+
# #removing last column parity
67+
# send = sender[length-div:]
68+
# rec = reciever[length-div:]
69+
70+
# #testing row parity
71+
# column_len=(length-div)//(div+1) # after removing last column parity
72+
# row=[]
73+
# for i in range(1,column_len):
74+
# x=i*(div+1)-1
75+
# if sender[x]!=reciever[x]:
76+
# row.append(i-1)
77+
78+
# #testing column parity
79+
# col=[]
80+
# for i in range(div):
81+
# if send[i]!=rec[i]:
82+
# col.append(i)
83+
# idx=(div+1)*(row[0])+col[0]
84+
# print("row error is", row[0]+col[0])
85+
# if reciever[row[0]+col[0]]==0:
86+
# reciever=reciever[:idx]+'1'+reciever[idx+1:]
87+
# else:
88+
# reciever=reciever[:idx]+'0'+reciever[idx+1:]
89+
# print(reciever)
90+
91+
92+
# In[12]:
93+
94+
95+
def addingParity(string,div=5):
96+
message=str()
97+
#adding parity in rows format
98+
while(string):
99+
chunk = string[:div]
100+
string = string[div:]
101+
message+=chunk
102+
103+
sum_chunk=0
104+
if len(chunk)==div:
105+
for i in range(div):
106+
sum_chunk += int(chunk[i])
107+
#parity adding
108+
message+=str(sum_chunk%2)
109+
else:
110+
for i in range(div-len(chunk)): #padding zeros
111+
message+='0'
112+
for i in range(len(chunk)):
113+
sum_chunk += int(chunk[i])
114+
#parity adding
115+
message +=str(sum_chunk%2)
116+
117+
#adding parity in columns format
118+
column_len=len(message)//(div+1)
119+
for i in range(div):
120+
sum_column=0
121+
for j in range(column_len):
122+
sum_column += int(message[i+(div+1)*j])
123+
message += str(sum_column%2)
124+
return message
125+
126+
127+
# In[13]:
128+
129+
130+
if __name__=='__main__':
131+
132+
input_message=input("\nEnter binary code for sending a message ")
133+
134+
sender_message=addingParity(input_message)
135+
print("sender message ",sender_message)
136+
input_test=input("\nEnter binary code for testing of message ")
137+
138+
# reciever_message=addingParity(input_test)
139+
# print("reciever message ",reciever_message)
140+
print("\nTesting result is here.......")
141+
# test(sender_message,reciever_message)
142+
testing(input_test)
143+
144+
145+
146+
# In[14]:
147+
148+
149+
rec='01011110011001101010010101001'
150+
se='01011110001001001011010101001'
151+
mSenDer='01011100010100111010'
152+
#works only for diagoal [in case of more than 1 bit error]
153+
#It always corrects 1 bit error
154+

CheckSum.py

+81
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
#!/usr/bin/env python
2+
# coding: utf-8
3+
4+
# In[1]:
5+
6+
7+
8+
def binSum(chunk1,chunk2,div=8):
9+
10+
st=bin(int(chunk1,2)+int(chunk2,2))
11+
12+
if len(st)==div+3: #for removing first 0b from binay code 0bxxxxxx
13+
carry='1'
14+
st1=st[3:]
15+
st= binSum(st1,carry)
16+
return st
17+
else:
18+
return st[2:]
19+
20+
21+
# In[2]:
22+
23+
24+
def findCheckSum(message,div=8):
25+
mess_len=len(message)
26+
27+
temp=message[:div]
28+
message=message[div:]
29+
for i in range((mess_len//div)-1):
30+
temp=binSum(temp,message[:div])
31+
message=message[div:]
32+
33+
checkSum=temp
34+
#for taking compliment of check_sum
35+
for i in range(len(checkSum)):
36+
if checkSum[i]=='0':
37+
checkSum=checkSum[:i]+'1'+checkSum[i+1:]
38+
else:
39+
checkSum=checkSum[:i]+'0'+checkSum[i+1:]
40+
return checkSum
41+
42+
43+
# In[3]:
44+
45+
46+
47+
def paddingZeros(message,div=8):
48+
if (len(message)%div!=0):
49+
for i in range(len(message)%div):
50+
message+='0'
51+
return message
52+
53+
54+
# In[6]:
55+
56+
57+
10011001111000100010010010000100
58+
59+
60+
# In[5]:
61+
62+
63+
if __name__=='__main__':
64+
65+
#sender side
66+
send_message=input("enter sender message ")
67+
sender_check_sum=findCheckSum(paddingZeros(send_message))
68+
69+
print("check sum of sender",sender_check_sum)
70+
71+
#reciever side checking
72+
rec_message=input("enter recieved message ")
73+
rec_check_sum=findCheckSum(paddingZeros(rec_message))
74+
75+
# st=bin(int(sender_info,2)+int(reciever_info,2))
76+
77+
if (sender_check_sum==rec_check_sum):
78+
print("\nNo error")
79+
else:
80+
print("\nerror is present")
81+

CyclicRedundancyCheck.py

+87
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
#!/usr/bin/env python
2+
# coding: utf-8
3+
4+
# In[47]:
5+
6+
7+
def divisionEx_OR(divisor,dividend):
8+
divisor_len=len(divisor)
9+
temp_remind=dividend[:divisor_len]
10+
11+
while(True):#performing devision using Ex-OR operation.....
12+
temp=''
13+
for i in range(divisor_len): #Ex-OR operation
14+
if divisor[i]=='0' and temp_remind[i]=='0':
15+
temp+='0'
16+
elif divisor[i]=='1' and temp_remind[i]=='1':
17+
temp+='0'
18+
else:
19+
temp+='1'
20+
21+
while(temp): #removing 0's from starting of the reminder
22+
if temp[0]=='0':
23+
temp=temp[1:]
24+
else:
25+
break
26+
27+
if (len(dividend)+ len(temp) >=divisor_len):
28+
while(len(temp)<divisor_len): #for adding 0/1's from dividend to temp_reminder
29+
temp+=dividend[0]
30+
dividend=dividend[1:]
31+
else:
32+
reminder=temp
33+
break
34+
temp_remind=temp
35+
return reminder
36+
37+
38+
# In[48]:
39+
40+
41+
import numpy as np
42+
43+
parity_gen=input("Enter the parity generato binar code ")
44+
mess=input("Enter the message for sending to reciever ")
45+
46+
for i in range(len(parity_gen)-1):
47+
mess+='0'
48+
print("message after padding 0's before appliying CRC ",mess)
49+
50+
#changing var_names......
51+
divisor=parity_gen; dividend=mess;
52+
53+
reminder=divisionEx_OR(divisor,dividend)
54+
print("reminder after division (in the sender side)",reminder)
55+
56+
57+
# In[49]:
58+
59+
60+
#for replacing 0's by reminder that are added before applying CRC
61+
mess=mess[:len(mess)-len(reminder)]+reminder
62+
print("message, after replacing 0's by reminder that are added before applying CRC, is",mess)
63+
64+
65+
# In[50]:
66+
67+
68+
#reciever side CRC
69+
reminder_new=divisionEx_OR(divisor,mess)
70+
print("reminder after division (in reciever side)",reminder_new)
71+
if sum(int(x) for x in reminder_new)==0:
72+
print("There is no any error.")
73+
else:
74+
print("There is some error.")
75+
76+
77+
# In[52]:
78+
79+
80+
#error
81+
11001
82+
1010101010
83+
84+
#no any error
85+
10011
86+
1101011111
87+

0 commit comments

Comments
 (0)