Screenshot instructions:
Windows
Mac
Red Hat Linux
Ubuntu
Click URL instructions:
Rightclick on ad, choose "Copy Link", then paste here →
(This may not be possible with some types of ads)
From: Max.S<uraev@fa...>  20120130 17:48:07

Hello. Could you help me to understand the usage of *Vector classes? As far as I understood BitVector is just a boolean vector  this makes encryption process on it pretty straighforward. The SoftVector is trivalent vector with {0, 1, X  Unknown} values. The expected pipeline on receiving vectors is: demodulation > decryption > deinterleaving > decode (channel). And here is my problem: the decryption step usually described as simple XOR so I've presumed it supposed to work over boolean vectors. But in OpenBTS conversion from SoftVector to BitVector (mC > mU in XCCHL1Decoder) happens in XCCHL1Decoder::decode() which is way beyond decryption stage. So the question is  what should I do? Or better  what's the right thing to do: 1. Move SoftVector to BitVector conversion into decryption stage. 2. Implement XOR for SoftVector using Kleene's logic truth tables. The references to appropriate parts of standard\papers\manual\whatever are highly appreciated.  best regards, Max, http://fairwaves.ru 
From: Sylvain Munaut <246tnt@gm...>  20120130 17:57:50

> So the question is  what should I do? > Or better  what's the right thing to do: SoftVector are not 0,1,X ... they're softbits, so an analog version of the hard bits where values are spread from 1.0 to 1.0 (or maybe 0.5 to 0.5 depending on convension). For Xoring purposes, you just multiply the value per 1 when you want to flip it. ( so 0.212 becomes 0.212 ). Cheers, Sylvain 
From: Max.S<uraev@fa...>  20120130 18:28:28

31.01.2012 01:57, Sylvain Munaut пишет: >> So the question is  what should I do? >> Or better  what's the right thing to do: > > SoftVector are not 0,1,X ... they're softbits, so an analog version > of the hard bits where values are spread from 1.0 to 1.0 (or maybe > 0.5 to 0.5 depending on convension). > > For Xoring purposes, you just multiply the value per 1 when you want > to flip it. ( so 0.212 becomes 0.212 ). Just to clarify  when I decide to flip it? I mean in boolean xor we put a^b bit to 0 if a == b. I got boolean keystream vector  how do I convert it to soft vector and what should I consider as equality for "bits" of SoftVector? Some enlightening paper perhaps?  best regards, Max, http://fairwaves.ru 
From: Sylvain Munaut <246tnt@gm...>  20120130 18:38:10

> Just to clarify  when I decide to flip it? > I mean in boolean xor we put a^b bit to 0 if a == b. > I got boolean keystream vector  how do I convert it to soft vector and what should I > consider as equality for "bits" of SoftVector? You don't convert it to soft vector ... and you don't compare soft vector either. You scan your keystream bitvector in parallel with your data soft vector and if your keystream has a '1', then you flip the corresponding soft bit in your softvector. > Some enlightening paper perhaps? I don't think people do papers on such trivial things ... Cheers, Sylvain 
From: David Burgess <david@ra...>  20120130 23:20:17

Max  On Jan 30, 2012, at 9:47 AM, Max.Suraev@... wrote: > Hello. > > Could you help me to understand the usage of *Vector classes? > > As far as I understood BitVector is just a boolean vector  this makes encryption > process on it pretty straighforward. > > The SoftVector is trivalent vector with {0, 1, X  Unknown} values. > The expected pipeline on receiving vectors is: demodulation > decryption > > deinterleaving > decode (channel). The SoftVector is an encoding 0..1 of the symbol value estimate. (In a previous email I said that it was 0..255, which is not correct. The raw values from the radiomodem are 0..255, but we convert them to float in the range 0..1 on receipt.) It's not a logic value at all. It's a floating point number that describes the probability that the symbol is a "1" bit. If that probability is 0.0, then we are pretty sure it's a "0" bit. If that probability is 1.0, then we are pretty sure it's a "1" bit. And if that probability is 0.5, then we have no idea what the bit's value is. But it's a continuum, not just those three points. > > And here is my problem: the decryption step usually described as simple XOR so I've > presumed it supposed to work over boolean vectors. But in OpenBTS conversion from > SoftVector to BitVector (mC > mU in XCCHL1Decoder) happens in > XCCHL1Decoder::decode() which is way beyond decryption stage. That's because we want to preserve the probability information for use in the convolutional decoder, which is a "softinput" Viterbi algorithm. GSM applies ciphering "below" the decoder, so you need preserve that probability information through the deciphering process. It's not hard, conceptually or practically. Just selectively invert the probability of the symbol estimate: 1.0x is the inverse of x. > > So the question is  what should I do? > Or better  what's the right thing to do: > > 1. Move SoftVector to BitVector conversion into decryption stage. NO!! You will degrade the performance of the decoder by discarding information at that early stage. > 2. Implement XOR for SoftVector using Kleene's logic truth tables. No. This is signal processing, not Kleene logic. It's not as potentially damaging as option #1, but it is still suboptimal and wrong since it discards a lot of information. Do this for every softsymbol/cihperbit pair: float xor(bool cipher, float symbol) { if (cipher) return 1.0Fsymbol; else return symbol; } There are more efficient ways to code that in a loop, but you get the idea. > > The references to appropriate parts of standard\papers\manual\whatever are highly > appreciated. There's nothing in the spec about this. This is our specific implementation of the GSM decoder. To "invert" a soft symbol estimate, just invert the probability mapping. > > >  > best regards, > Max, http://fairwaves.ru  David David A. Burgess Range Networks, Inc. 560 Brannan St. San Francisco, CA 94107 USA cell +1 707 208 2622 
Sign up for the SourceForge newsletter:
No, thanks