编程CDMA码分复用
要点:
- 随机生成多个码片站:码片站中只含有-1,1序列
- 两两正交:要保证随机生成的码片站两两正交
- 已知收到的码片序列求创建的站发送的数据、
import numpy as np
#judge函数想实现如果可以找到每个列表都两两正交的话就返回,如果为找到就循环去找
def judge(ls):
for i in range(len(ls)):
for j in range(i+1,len(ls)):
if sum(map(lambda x, y: x * y, ls[i], ls[j]))!=0:
return
return ls
def anal(rchip,ls):
for i in range(len(ls)):
m = sum(map(lambda x, y: x * y, rchip, ls[i]))/x_bit
# print(m)
if m == 1:
print('第%d站指派的码片:发送的是1'%(i+1))
elif m == 0:
print('第%d站指派的码片:没发送数据'%(i+1))
elif m == -1:
print('第%d站指派的码片为:发送的是0'%(i+1))
# count = 0
x_bit=int(input('请输入想创建的码片位数:'))
x_num=int(input('请输入想创建码片的个数:'))
while(True):
myarry=np.random.randint(0,2,(x_num,x_bit))
ls=myarry.tolist()
for i in range(x_num):
for j in range(x_bit):
if ls[i][j]==0:
ls[i][j]=-1
if (judge(ls) is not None):
print(ls)
print("创建的码片站如下:")
for i in range(1,len(ls)+1):
print('第%d站指派的码片为:'%i,ls[i-1])
break
# count += 1
# print(count)
rchip=eval(input('输入接收到的码片序列:'))
anal(rchip,ls)
难点
- 随机生成的数中只含有-1和1,这个很难实现,解决办法是先生成只含0和1的随机数,然后再用-1把0给替换掉;
- 确保生成的任意两个码片都正交,需要使用循环。