実はCDMAできてなかった!?急いでデバッグ!


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

  • 以下送信側のscrambler後の出力。送信ビット列は(1,1,1)の繰り返し。
dac_rate= 100M
samples/symbol= 2
Requested TX Bitrate: 100k Actual Bitrate: 100k
interp_rates= 500
noutput_items = 4096
in[0]=-1+1.22461e-16j, out[0]=-1+1.22461e-16j
in[1]=1+-1.22461e-16j, out[1]=1+-1.22461e-16j
in[2]=1+-1.22461e-16j, out[2]=1+-1.22461e-16j
in[3]=1+-1.22461e-16j, out[3]=1+-1.22461e-16j
in[4]=-1+1.22461e-16j, out[4]=-1+1.22461e-16j
in[5]=-1+1.22461e-16j, out[5]=-1+1.22461e-16j
in[6]=-1+1.22461e-16j, out[6]=-1+1.22461e-16j
in[7]=-1+1.22461e-16j, out[7]=-1+1.22461e-16j
in[8]=1+-1.22461e-16j, out[8]=1+-1.22461e-16j
in[9]=-1+1.22461e-16j, out[9]=-1+1.22461e-16j
in[10]=1+-1.22461e-16j, out[10]=1+-1.22461e-16j
in[11]=-1+1.22461e-16j, out[11]=-1+1.22461e-16j
in[12]=-1+1.22461e-16j, out[12]=-1+1.22461e-16j
in[13]=1+-1.22461e-16j, out[13]=1+-1.22461e-16j
in[14]=1+-1.22461e-16j, out[14]=1+-1.22461e-16j
in[15]=1+0j, out[15]=1+0j
in[16]=-1+-0j, out[16]=-1+-0j
in[17]=-1+-0j, out[17]=-1+-0j
in[18]=-1+-0j, out[18]=-1+-0j
in[19]=1+0j, out[19]=1+0j
in[20]=1+0j, out[20]=1+0j
in[21]=1+0j, out[21]=1+0j
in[22]=1+0j, out[22]=1+0j
in[23]=-1+-0j, out[23]=-1+-0j
in[24]=1+0j, out[24]=1+0j
in[25]=-1+-0j, out[25]=-1+-0j
in[26]=1+0j, out[26]=1+0j
in[27]=1+0j, out[27]=1+0j
in[28]=-1+-0j, out[28]=-1+-0j
in[29]=-1+-0j, out[29]=-1+-0j
....あとはこの2パターンの繰り返し。
受信シンボルをずらさずに拡散符号のみをずらしてしまっていた。
これだと、受信チップタイミングが正確じゃないとうまく復元できない。
そこで受信シンボルと拡散符号両方をずらして実装した!
以下usrpは使わずにシミュレーションの結果
//送信データ:src_data = (2.0-3.0j, -1.0+2.0j, 2.0+1.0j)
//うまくいく場合:(mask1, seed1, mask2, seed2, mask3, seed3, mask4, seed4)=(61, 1, 37, 1, 61, 1, 37, 5)
noutput_items = 2
in[0]=1.90323+-2.96774j, out[0]=1.90323+-2.96774j
in[1]=-0.935484+1.96774j, out[1]=-0.935484+1.96774j
noutput_items = 1
in[0]=1.96774+0.903226j, out[0]=1.96774+0.903226j
//うまくいかない場合:(mask1, seed1, mask2, seed2, mask3, seed3, mask4, seed4)=(61, 1, 37, 1, 61, 1, 37, 4)
//これは各信号の送信電力が異なることが原因
warning: the number of output is over the noutput_items(5 > 3).//1周期内で複数のチップで同期してしまう。
noutput_items = 2
YES! 59.000000+-92.000000j
YES! -47.000000+36.000000j ←エラー
YES! -39.000000+33.000000j ←エラー
YES! -29.000000+61.000000j
YES! 61.000000+28.000000j
in[0]=1.90323+-2.96774j, out[0]=1.90323+-2.96774j
in[1]=-1.51613+1.16129j, out[1]=-1.51613+1.16129j ←エラー
noutput_items = 1
in[0]=-1.25806+1.06452j, out[0]=-1.25806+1.06452j ←エラー
以下USRPを使った実験結果。
//()内の最初の数字は入ってきた信号の番号。31個おきに来てほしいが全然だめ。
YES!(2, 30) -2.032382+-1.723992j
YES!(44, 30) 3.130465+-2.949481j
YES!(60, 30) 3.492284+-0.969585j
YES!(77, 30) -1.292953+2.459058j
YES!(82, 30) -0.577329+-1.965199j
YES!(126, 30) -0.202586+2.704241j
YES!(169, 30) -3.191485+0.243769j
YES!(184, 30) -3.316458+-1.863901j
YES!(198, 30) -2.701298+-0.341406j
YES!(207, 30) -0.248555+2.502326j
YES!(250, 30) 2.689873+-2.241388j
YES!(268, 30) -1.315888+1.770464j
YES!(292, 30) 2.553026+2.924249j
YES!(308, 30) 0.538032+3.512487j
YES!(325, 30) -1.827436+-1.084042j
ナイキストフィルタが機能していない?→シミュレーションでは大丈夫だった

送信側ナイキスト処理後信号
in[227]=-1.17823+0j, out[227]=-1.17823+0j
in[228]=-0.790348+0j, out[228]=-0.790348+0j
in[229]=-1.21569+0j, out[229]=-1.21569+0j
in[230]=-1.25261+0j, out[230]=-1.25261+0j
in[231]=0.294015+0j, out[231]=0.294015+0j
in[232]=1.27586+0j, out[232]=1.27586+0j
in[233]=-0.0367778+0j, out[233]=-0.0367778+0j
in[234]=-1.19521+0j, out[234]=-1.19521+0j
in[235]=-0.315031+0j, out[235]=-0.315031+0j
in[236]=1.09208+0j, out[236]=1.09208+0j
in[237]=1.53211+0j, out[237]=1.53211+0j
in[238]=1.04133+0j, out[238]=1.04133+0j
in[239]=-0.25585+0j, out[239]=-0.25585+0j
in[240]=-1.15792+0j, out[240]=-1.15792+0j
in[241]=-0.218387+0j, out[241]=-0.218387+0j
in[242]=1.16608+0j, out[242]=1.16608+0j
in[243]=1.26815+0j, out[243]=1.26815+0j
in[244]=0.927318+0j, out[244]=0.927318+0j
in[245]=0.881508+0j, out[245]=0.881508+0j
in[246]=0.927318+0j, out[246]=0.927318+0j
in[247]=1.26266+0j, out[247]=1.26266+0j
in[248]=1.15113+0j, out[248]=1.15113+0j
in[249]=-0.195209+0j, out[249]=-0.195209+0j
in[250]=-1.16199+0j, out[250]=-1.16199+0j
in[251]=-0.274933+0j, out[251]=-0.274933+0j
in[252]=1.09208+0j, out[252]=1.09208+0j
in[253]=1.48105+0j, out[253]=1.48105+0j
in[254]=0.978208+0j, out[254]=0.978208+0j
in[255]=-0.0510635+0j, out[255]=-0.0510635+0j
in[256]=-1.04133+0j, out[256]=-1.04133+0j
in[257]=-1.23068+0j, out[257]=-1.23068+0j
in[258]=-0.927318+0j, out[258]=-0.927318+0j
in[259]=-0.918971+0j, out[259]=-0.918971+0j
in[260]=-1.05207+0j, out[260]=-1.05207+0j
in[261]=-0.993213+0j, out[261]=-0.993213+0j
in[262]=-0.971414+0j, out[262]=-0.971414+0j
in[263]=-1.03547+0j, out[263]=-1.03547+0j
in[264]=-0.986371+0j, out[264]=-0.986371+0j
in[265]=-0.964553+0j, out[265]=-0.964553+0j
in[266]=-1.04119+0j, out[266]=-1.04119+0j
in[267]=-0.961232+0j, out[267]=-0.961232+0j
in[268]=-0.872503+0j, out[268]=-0.872503+0j
in[269]=-1.26266+0j, out[269]=-1.26266+0j
in[270]=-1.20594+0j, out[270]=-1.20594+0j
in[271]=0.26945+0j, out[271]=0.26945+0j
in[272]=1.26091+0j, out[272]=1.26091+0j
in[273]=0+0j, out[273]=0+0j
in[274]=-1.26091+0j, out[274]=-1.26091+0j

受信側ナイキスト処理後信号
in[208]=-0.0271897+0.0184883j, out[208]=-0.0271897+0.0184883j
in[209]=0.188148+0.175081j, out[209]=0.188148+0.175081j
in[210]=0.207298+0.197523j, out[210]=0.207298+0.197523j
in[211]=0.165036+0.161952j, out[211]=0.165036+0.161952j
in[212]=0.171123+0.164885j, out[212]=0.171123+0.164885j
in[213]=0.177717+0.172918j, out[213]=0.177717+0.172918j
in[214]=0.173703+0.170287j, out[214]=0.173703+0.170287j
in[215]=0.178282+0.170729j, out[215]=0.178282+0.170729j
in[216]=0.167504+0.161464j, out[216]=0.167504+0.161464j
in[217]=0.167904+0.170055j, out[217]=0.167904+0.170055j
in[218]=0.205657+0.197433j, out[218]=0.205657+0.197433j
in[219]=0.163012+0.123841j, out[219]=0.163012+0.123841j
in[220]=-0.0200712+-0.087424j, out[220]=-0.0200712+-0.087424j
in[221]=-0.15661+-0.257206j, out[221]=-0.15661+-0.257206j
in[222]=-0.0738102+-0.268916j, out[222]=-0.0738102+-0.268916j
in[223]=0.132715+-0.259833j, out[223]=0.132715+-0.259833j
in[224]=0.243271+-0.287363j, out[224]=0.243271+-0.287363j
in[225]=0.132589+-0.155635j, out[225]=0.132589+-0.155635j
in[226]=-0.0908096+0.109892j, out[226]=-0.0908096+0.109892j
in[227]=-0.134501+0.141768j, out[227]=-0.134501+0.141768j
in[228]=0.0711032+-0.106419j, out[228]=0.0711032+-0.106419j
in[229]=0.198146+-0.226899j, out[229]=0.198146+-0.226899j
in[230]=0.0226691+-0.0459986j, out[230]=0.0226691+-0.0459986j
in[231]=-0.247641+0.187493j, out[231]=-0.247641+0.187493j
in[232]=-0.316544+0.243089j, out[232]=-0.316544+0.243089j
in[233]=-0.127915+0.0916332j, out[233]=-0.127915+0.0916332j
in[234]=0.131429+-0.137219j, out[234]=0.131429+-0.137219j
in[235]=0.179694+-0.189776j, out[235]=0.179694+-0.189776j
in[236]=-0.0341896+0.00890518j, out[236]=-0.0341896+0.00890518j
in[237]=-0.247744+0.193355j, out[237]=-0.247744+0.193355j
in[238]=-0.286586+0.19281j, out[238]=-0.286586+0.19281j
in[239]=-0.243177+0.157334j, out[239]=-0.243177+0.157334j
in[240]=-0.227951+0.183381j, out[240]=-0.227951+0.183381j
in[241]=-0.264557+0.151405j, out[241]=-0.264557+0.151405j
in[242]=-0.285033+0.0494272j, out[242]=-0.285033+0.0494272j
送信側のRRCはサンプル数を増やす(例えば、samples_per_symbol = 2とかに)
受信側のRRCはサンプル数を変えない!
どうすればいいか?
提案手法1:RRCでdecimationする。→descrambler→dbpsk_demodの入力を1samples_per_symbolにする。→だめだった。
提案手法2:dbpsk_demodの中身を除いて、どうやってdecimationしているか調査。それをdescramblerに組み込んでみる。
とりあえずdbpsk_demodが何をしているか見たほうが良い。

gr_mpsk_receiver()

まず最初にここでシンボル同期?
       _def_costas_alpha = 0.1 //roop filter gain
       _def_gain_mu = None  //for M&M block
       _def_mu = 0.5
       _def_omega_relative_limit = 0.005

       # symbol clock recovery
       if not self._mm_gain_mu:
           self._mm_gain_mu = 0.1
           
       self._mm_omega = self._samples_per_symbol
       self._mm_gain_omega = .25 * self._mm_gain_mu * self._mm_gain_mu
       self._costas_beta  = 0.25 * self._costas_alpha * self._costas_alpha
       fmin = -0.1
       fmax = 0.1
       
       self.receiver=gr.mpsk_receiver_cc(arity, 0,
                                        self._costas_alpha, self._costas_beta,
                                        fmin, fmax,
                                        self._mm_mu, self._mm_gain_mu,
                                        self._mm_omega, self._mm_gain_omega,
                                        self._mm_omega_relative_limit)

このブロックは受信した信号のシンボル同期を試みているのが分かる!(提案手法1のsamples/symbol=1だとやっぱりできなかった。。)
これはシンボル同期をとっている訳だから、逆拡散ブロックでシンボル同期がとれるならこのブロックはいらない?

また全く別のCDMA実現手法として、ビット列に拡散符号をexorする方法があるが、dbpskにおいて相互相関が変化しないか心配。そこは検証する必要がある。
とりあえずはシンボルクロックリカバリーを抜いたやつでやってみる。
→samples/symbol=1にして、bpskクロックリカバリーブロックを抜いて、自作逆拡散ブロックでシンボル同期を行ったやつはシミュレーション上は成功!(cdma_trx_sim.py)2010/8/10
あとはUSRP上でできるかどうか。。→できーーんかった。。
送信側(scramblerブロックの出力)の信号
dac_rate= 100M
samples/symbol= 2
Requested TX Bitrate: 100k Actual Bitrate: 100k
interp_rates= 500
noutput_items = 4096
in[0]=-1+-0j, out[0]=-1+-0j
in[1]=-1+-0j, out[1]=-1+-0j
in[2]=-1+-0j, out[2]=-1+-0j
in[3]=-1+-0j, out[3]=-1+-0j
in[4]=-1+-0j, out[4]=-1+-0j
in[5]=-1+-0j, out[5]=-1+-0j
in[6]=1+0j, out[6]=1+0j
in[7]=-1+-0j, out[7]=-1+-0j
in[8]=1+0j, out[8]=1+0j
in[9]=1+0j, out[9]=1+0j
in[10]=1+0j, out[10]=1+0j
in[11]=1+0j, out[11]=1+0j
in[12]=1+0j, out[12]=1+0j
in[13]=1+0j, out[13]=1+0j
in[14]=-1+-0j, out[14]=-1+-0j
in[15]=-1+-0j, out[15]=-1+-0j
in[16]=-1+-0j, out[16]=-1+-0j
in[17]=1+0j, out[17]=1+0j
in[18]=-1+-0j, out[18]=-1+-0j
in[19]=1+0j, out[19]=1+0j
in[20]=1+0j, out[20]=1+0j
in[21]=-1+-0j, out[21]=-1+-0j
in[22]=1+0j, out[22]=1+0j
in[23]=1+0j, out[23]=1+0j
in[24]=1+0j, out[24]=1+0j
in[25]=1+0j, out[25]=1+0j
in[26]=-1+-0j, out[26]=-1+-0j
in[27]=1+0j, out[27]=1+0j
in[28]=1+0j, out[28]=1+0j
in[29]=-1+-0j, out[29]=-1+-0j
in[30]=-1+-0j, out[30]=-1+-0j
受信側(rrcブロックの出力及びdescramblerブロックの入力)の信号
in[188]=0.175552+-0.326546j, out[188]=0.175552+-0.326546j
in[189]=0.217444+-0.340596j, out[189]=0.217444+-0.340596j
in[190]=0.208616+-0.342241j, out[190]=0.208616+-0.342241j
in[191]=0.199018+-0.275709j, out[191]=0.199018+-0.275709j
in[192]=0.192071+-0.153052j, out[192]=0.192071+-0.153052j
in[193]=0.220084+-0.048523j, out[193]=0.220084+-0.048523j
in[194]=0.237375+0.0307483j, out[194]=0.237375+0.0307483j
in[195]=0.0882086+0.104582j, out[195]=0.0882086+0.104582j
in[196]=-0.147752+0.128575j, out[196]=-0.147752+0.128575j
in[197]=-0.141685+0.114611j, out[197]=-0.141685+0.114611j
in[198]=0.100609+0.141016j, out[198]=0.100609+0.141016j
in[199]=0.175519+0.1403j, out[199]=0.175519+0.1403j
in[200]=-0.0341887+-0.0207997j, out[200]=-0.0341887+-0.0207997j
in[201]=-0.219064+-0.2424j, out[201]=-0.219064+-0.2424j
in[202]=-0.218771+-0.328796j, out[202]=-0.218771+-0.328796j
in[203]=-0.17938+-0.305753j, out[203]=-0.17938+-0.305753j
in[204]=-0.199681+-0.305043j, out[204]=-0.199681+-0.305043j
in[205]=-0.196181+-0.334701j, out[205]=-0.196181+-0.334701j
in[206]=-0.0866891+-0.335824j, out[206]=-0.0866891+-0.335824j
in[207]=0.0750645+-0.314504j, out[207]=0.0750645+-0.314504j
in[208]=0.185406+-0.325465j, out[208]=0.185406+-0.325465j
in[209]=0.230351+-0.359028j, out[209]=0.230351+-0.359028j
in[210]=0.225272+-0.302137j, out[210]=0.225272+-0.302137j
in[211]=0.112081+-0.0957169j, out[211]=0.112081+-0.0957169j
in[212]=-0.092795+0.110514j, out[212]=-0.092795+0.110514j
in[213]=-0.214461+0.158469j, out[213]=-0.214461+0.158469j
in[214]=-0.198232+0.127928j, out[214]=-0.198232+0.127928j
in[215]=-0.199779+0.120956j, out[215]=-0.199779+0.120956j
in[216]=-0.225487+0.108766j, out[216]=-0.225487+0.108766j
in[217]=-0.0860862+0.122314j, out[217]=-0.0860862+0.122314j
in[218]=0.149503+0.169737j, out[218]=0.149503+0.169737j
in[219]=0.146312+0.0885222j, out[219]=0.146312+0.0885222j
in[220]=-0.102973+-0.115509j, out[220]=-0.102973+-0.115509j
in[221]=-0.186544+-0.172623j, out[221]=-0.186544+-0.172623j
in[222]=0.0417972+-0.00808732j, out[222]=0.0417972+-0.00808732j
in[223]=0.222123+0.16844j, out[223]=0.222123+0.16844j
in[224]=0.143286+0.193518j, out[224]=0.143286+0.193518j
in[225]=0.0647017+0.0433133j, out[225]=0.0647017+0.0433133j
in[226]=0.144325+-0.160791j, out[226]=0.144325+-0.160791j
in[227]=0.151209+-0.17824j, out[227]=0.151209+-0.17824j
in[228]=-0.0345794+0.0201461j, out[228]=-0.0345794+0.0201461j
in[229]=-0.203123+0.16649j, out[229]=-0.203123+0.16649j
in[230]=-0.221573+0.146344j, out[230]=-0.221573+0.146344j
in[231]=-0.18466+0.111183j, out[231]=-0.18466+0.111183j
in[232]=-0.176022+0.125752j, out[232]=-0.176022+0.125752j
in[233]=-0.210362+0.132658j, out[233]=-0.210362+0.132658j
in[234]=-0.226634+0.122206j, out[234]=-0.226634+0.122206j
in[235]=-0.0914697+0.115461j, out[235]=-0.0914697+0.115461j 
シミュレーションにおける受信側のrrcの出力信号
in[32]=0.140315+0j, out[32]=0.140315+0j
in[33]=0.30459+0j, out[33]=0.30459+0j
in[34]=0.319499+0j, out[34]=0.319499+0j
in[35]=0.300049+0j, out[35]=0.300049+0j
in[36]=0.352104+0j, out[36]=0.352104+0j
in[37]=0.185528+0j, out[37]=0.185528+0j
in[38]=-0.206558+0j, out[38]=-0.206558+0j 
in[39]=-0.348597+0j, out[39]=-0.348597+0j
in[40]=-0.166385+0j, out[40]=-0.166385+0j
in[41]=-0.0115671+0j, out[41]=-0.0115671+0j
in[42]=0.0644147+0j, out[42]=0.0644147+0j
in[43]=0.155568+0j, out[43]=0.155568+0j
in[44]=0.133066+0j, out[44]=0.133066+0j
in[45]=0.000901505+0j, out[45]=0.000901505+0j
in[46]=0.0874433+0j, out[46]=0.0874433+0j
in[47]=0.365891+0j, out[47]=0.365891+0j
in[48]=0.372297+0j, out[48]=0.372297+0j
in[49]=0.0789112+0j, out[49]=0.0789112+0j
in[50]=-0.0190423+0j, out[50]=-0.0190423+0j
in[51]=0.176757+0j, out[51]=0.176757+0j
in[52]=0.181562+0j, out[52]=0.181562+0j
in[53]=-0.121206+0j, out[53]=-0.121206+0j
in[54]=-0.359209+0j, out[54]=-0.359209+0j
in[55]=-0.340918+0j, out[55]=-0.340918+0j
in[56]=-0.264656+0j, out[56]=-0.264656+0j
in[57]=-0.288471+0j, out[57]=-0.288471+0j
in[58]=-0.343603+0j, out[58]=-0.343603+0j
in[59]=-0.30422+0j, out[59]=-0.30422+0j
in[60]=-0.142394+0j, out[60]=-0.142394+0j
in[61]=-0.0181836+0j, out[61]=-0.0181836+0j
in[62]=0.0212902+0j, out[62]=0.0212902+0j
やっぱりシンボルクロックリカバリーを真剣にやらないとできないみたい。。
ってことはやはりdbpskをbpskに変えてやってその前で拡散させるしかない!!
diff_encoder及びdecoderを抜いた場合(scramble等なし)
in[100]=1.000000, out[100]=1.000000
in[101]=0.000000, out[101]=0.000000
in[102]=1.000000, out[102]=1.000000
in[103]=1.000000, out[103]=1.000000
in[104]=0.000000, out[104]=0.000000
in[105]=1.000000, out[105]=1.000000
in[106]=0.000000, out[106]=0.000000
in[107]=1.000000, out[107]=1.000000
in[108]=0.000000, out[108]=0.000000
in[109]=1.000000, out[109]=1.000000
in[110]=0.000000, out[110]=0.000000
in[111]=1.000000, out[111]=1.000000
in[112]=1.000000, out[112]=1.000000
in[113]=0.000000, out[113]=0.000000
in[114]=1.000000, out[114]=1.000000
in[115]=0.000000, out[115]=0.000000
in[116]=1.000000, out[116]=1.000000
in[117]=0.000000, out[117]=0.000000
in[118]=1.000000, out[118]=1.000000
in[119]=0.000000, out[119]=0.000000
in[120]=1.000000, out[120]=1.000000
in[121]=1.000000, out[121]=1.000000
in[122]=0.000000, out[122]=0.000000
in[123]=1.000000, out[123]=1.000000
in[124]=0.000000, out[124]=0.000000
in[125]=1.000000, out[125]=1.000000
in[126]=0.000000, out[126]=0.000000
in[127]=1.000000, out[127]=1.000000 
diffを入れた場合はほとんどビットエラーはなかった。
とりあえずdiffを入れたままで、scramble系統をdbpskの前においてやったら1対1は成功(シミュレーション)(diffを抜いた場合はsamples/symbol=2じゃないとうまく複合できない)。
2:1で同じ符号でやると以下のように間違える(あたりまえ)。(正解は1と0の交互の信号)

in[2]=0.000000, out[2]=0.000000
in[3]=1.000000, out[3]=1.000000
in[0]=1.000000, out[0]=1.000000
in[1]=1.000000, out[1]=1.000000
in[0]=1.000000, out[0]=1.000000
in[1]=0.000000, out[1]=0.000000
in[2]=1.000000, out[2]=1.000000
in[3]=0.000000, out[3]=0.000000
in[0]=1.000000, out[0]=1.000000
in[1]=1.000000, out[1]=1.000000
in[0]=0.000000, out[0]=0.000000
in[1]=0.000000, out[1]=0.000000
in[2]=1.000000, out[2]=1.000000
in[3]=0.000000, out[3]=0.000000
in[0]=0.000000, out[0]=0.000000
in[1]=0.000000, out[1]=0.000000
in[0]=1.000000, out[0]=1.000000
in[1]=0.000000, out[1]=0.000000
in[0]=0.000000, out[0]=0.000000
in[0]=0.000000, out[0]=0.000000
in[1]=0.000000, out[1]=0.000000
in[0]=0.000000, out[0]=0.000000
ここまでは良い!はたして符号を変えたらうまくいくのか!?
→diffを入れているせいか結構きつい。。
→diffを抜いてもだめ。使用した符号の相互相関を調べたが問題なし
→問題解決(ユーザ間の電力の違いが原因だった。。)!シミュレーションでは複数ユーザでも成功!
USRPでやると。。
diff_encoderでやるとマルチユーザでもうまくいった!(送信ビット列全部0)
in[0]=0.000000, out[0]=0.000000
in[1]=0.000000, out[1]=0.000000
in[2]=0.000000, out[2]=0.000000
in[3]=0.000000, out[3]=0.000000
in[4]=0.000000, out[4]=0.000000
in[5]=0.000000, out[5]=0.000000
in[6]=1.000000, out[6]=1.000000
in[7]=0.000000, out[7]=0.000000
in[8]=0.000000, out[8]=0.000000
in[9]=0.000000, out[9]=0.000000
in[10]=0.000000, out[10]=0.000000
in[11]=0.000000, out[11]=0.000000
in[12]=0.000000, out[12]=0.000000
in[13]=0.000000, out[13]=0.000000
in[14]=0.000000, out[14]=0.000000
in[15]=0.000000, out[15]=0.000000
in[16]=0.000000, out[16]=0.000000
in[17]=0.000000, out[17]=0.000000
in[18]=0.000000, out[18]=0.000000
in[19]=0.000000, out[19]=0.000000
in[20]=0.000000, out[20]=0.000000
in[21]=0.000000, out[21]=0.000000
in[22]=0.000000, out[22]=0.000000
in[23]=0.000000, out[23]=0.000000 
in[24]=0.000000, out[24]=0.000000
in[25]=0.000000, out[25]=0.000000
in[26]=0.000000, out[26]=0.000000
in[27]=0.000000, out[27]=0.000000
in[28]=0.000000, out[28]=0.000000
in[29]=0.000000, out[29]=0.000000
in[30]=1.000000, out[30]=1.000000
in[31]=0.000000, out[31]=0.000000
マルコフ符号の方も作った!ただ。。
符号長31だとうまくいくのになぜか63だとうまくいかない。
→いろいろ試したけどdiff_encoderを用いるとカオスCDMAは難しい。。
→ってことでただのbpskで試してみようとしたけどシミュレーションの段階でマルチユーザがうまくいかない。
→符号や送信ビットのパターンによってうまくいかないことがあることが分かった。
→とりあえず異なる原始多項式を使ってビット列を発生させることで相互相関の低減を試みる
→やっぱりだめだった。。すごいこと思いついた!送信側:src→dbpsk→scramble→rrc、受信側:rrc→PLL→descramble→slicer→diffdecoder!
シミュレーションでマルチユーザでうまくいった!!以下パラメータ
corr seed1 seed2 seed3 seed4 mask1 mask2 mask3 mask4 1の数(1) 1の数(2)
0.291667 1 1 4 2 61 37 61 37 16 16
0.237903 3 6 4 3 97 115 91 115 32 32
上のパラメータはこの原子多項式の組み合わせで最大の相互相関値が一番低いものだお。
ガガーン!USRP使ったとたんにできなくなった。。(1:1でも。。)

とりあえず途中経過をまとめる

  • bpskでは実際の通信は難しい
シミュレーションではできるが。。
  • dbpskでは拡散符号の相互相関や自己相関特性は変わってしまう
少しだけマルチユーザCDMAは成功するが。。
  • 送信側:src→dbpsk→scramble→rrc、受信側:rrc→PLL→descramble→slicer→diffdecoderは結局だめ
やっぱりdescrambleのシンボル同期の部分でdiffdec機能がないと実環境ではうまくいかない。。
(シミュレーションではうまくいったが。。)
  • さて。どうする?
手法1:diffenc及びdiffdecしても相互相関特性が変わらない方法を考える。
手法2:gmskでやってみる!

普通にbpskでできた!

ただ送信ビット列を11110000の繰り返しにするとうまくいくが111000の繰り返しはうまくいかない。。
11001010の繰り返しは途中でビット列が反転してしまう。
in[31]= 1.000000 , out[31]= 1.000000 
in[32]= 1.000000 , out[32]= 1.000000 
in[33]= 0.000000 , out[33]= 0.000000 
in[34]= 0.000000 , out[34]= 0.000000 
in[35]= 1.000000 , out[35]= 1.000000 
in[36]= 0.000000 , out[36]= 0.000000 
in[37]= 1.000000 , out[37]= 1.000000 
in[38]= 0.000000 , out[38]= 0.000000 
in[39]= 1.000000 , out[39]= 1.000000 
in[40]= 1.000000 , out[40]= 1.000000 
in[41]= 0.000000 , out[41]= 0.000000 
in[42]= 0.000000 , out[42]= 0.000000 
in[43]= 1.000000 , out[43]= 1.000000 
in[44]= 0.000000 , out[44]= 0.000000 
in[45]= 1.000000 , out[45]= 1.000000 
in[46]= 1.000000 , out[46]= 1.000000 ←ここから反転
in[47]= 0.000000 , out[47]= 0.000000 
in[48]= 0.000000 , out[48]= 0.000000 

でもscramblerを入れて1:1でなぜかできた。。送信ビットは(11110000)。
他のビットではだめなことも。。USRPが不安定?