这是一个 CDMA 插图,其中我使用三次样条来说明 CDMA 概念。首先定义这些函数:
<script>
function go(x,y) {return(`M ${x},${y}`)}
function to(y) {return(`c 5 0 5 ${y} 10 ${y}`)}
function dn(y=10) {return to(y)}
function up(y=10) {return to(-y)}
function path(d,color='black') {return `<path d="${d}" stroke=${color} fill="none"/>`}
function svg(t) {return `<svg>${t}</svg>`}
function bits(n) {
let s='', n0=(n>>1)
for (m=0x80;m;m>>=1) s+= up(10* (!(m&n0)-!(m&n)) )
return s;
}
function plot(a) {
let s='', y0=0
for (let y of a) {
s += up(y-y0); y0=y
}
return s
}
function add(a) {
let s=''
if typeof y0 == 'undefined' var y0=0
for (m=0x80;m;m>>=1) {
let y=0; for (let e of a) y+= 5-10*!(e&m)
s += up(y-y0); y0=y
}
return s
}
</script>
然后你可以大致说明波浪是这样的:
<script>
document.write(svg(path(go(0,25)+(up()+dn()).repeat(10))))
</script>
这是使用此技术的 CDMA 示例
<h1>CDMA Example</h1>
<script>
a=0b00010010
b=0b00010101
document.write(svg(
path(go(0,40)+bits(a)+bits(~a)+bits(a)+bits(~a)+bits(a),'red')+
path(go(0,80)+bits(b)+bits(b)+bits(~b)+bits(~b)+bits(~b),'orange')+
path(go(0,100+add([a,b])+add([~a,b])+add([a,~b])+add([~a,~b])+add([a,b])+add([~a,~b])))
))
</script>
注意:实际的 CDMA 信号不会是位对齐的,甚至不会是芯片对齐的