编程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:returnreturn lsdef 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]=-1if (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给替换掉;
- 确保生成的任意两个码片都正交,需要使用循环。