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

「実はCDMAできてなかった!?急いでデバッグ!」の編集履歴(バックアップ)一覧に戻る

実はCDMAできてなかった!?急いでデバッグ! - (2011/10/05 (水) 00:59:52) のソース

-以下送信側の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()>http://www35.atwiki.jp/space_escalator/pages/75.html]]
まず最初にここでシンボル同期?
        _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が不安定?
----