我现在正在阅读码分多址方法 ( CDMA ),它用于多个主机同时发送数据。
其背后的主要思想是使用正交向量基础将多个比特流编码为一个,通过链路发送连接的流,然后针对每个单独的消息对流进行不同的解码。
让我感到困惑的是,在数字逻辑中引入了负数,以及 0 表示没有信号。
当我第一次听说这种编码存在时,我对它应该如何工作的第一个想法与原来的不同,它看起来更简单。
有人可以检查我的方法并添加评论吗?为什么不使用它来代替 ORIGINAL CDMA?
我的解决方案概述
我取n 个正交向量(其中xor是我的向量空间中的加法运算),每个向量对应一个芯片码。然后,如果它是1,我将每一位编码为芯片代码,否则编码为 0。最后,我将所有位序列异或在一起并发送连接的结果。在另一端,接收者可以将比特流分解成独特的部分,并读取每个主机的消息。
更详细的解决方案
假设
有n台主机(编号从0到n - 1),它们都想使用同一条链路同时发送b位。
接收者得到一个加入的比特流,但只对读取一个主机的消息感兴趣(WLOG 是从第 0 个主机发送的消息)。
问题:创建一个满足假设的协议。
我的解决方案
对于第 i 个主机,为他分配一个2^i形式的芯片代码(这里是幂不是 xor),用binary编写。将此芯片代码称为 c(i)。例如:
Chip code 1000..00 would be given to host 0 Chip code 0100..00 would be given to host 1 ... Chip code 0000..01 would be given to host n-1.
每个位都将使用n位进行编码。
if (host i wants to send 0) { encode it as 0000...00 // n zeroes } else { encode it as c(i) }
对于我希望发送第 j位的主机,将编码位称为e(i, j)。例如:
if (host i wants to send a bit stream, such that j-th bit is 1) { e(i, j) = c(i) } else { e(i, j) = 0; }
对于每个j,计算
d(j) = e(0, j) ^ e(1, j) ^ ... ^ e(n - 1, j) // xor operation here
连接d(0), d(1), ... d(n - 1) 并通过链接发送这些n * b位。这将是另一端的接收者应该接收的加入流。
希望读取主机 0发送的数据的接收者可以查看 ( 0 - th , n - th , 2n - th , ..., b(n-1) - th ) 位以查看第一台主机发送了什么。
该解决方案比原来的解决方案更简单,因为它只使用xor操作进行编码,并且数字只是二进制(即在进行向量加法时没有-2,+3)。QED。
这个解决方案有效吗?如果是,为什么不使用它?我能猜到的最好理由是我们想区分主机发送什么和什么都不发送。还有其他原因吗?
撇开问题不谈:在 CDMA 的背景下,什么是“近乎正交”的向量?