実は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,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が不安定? ----

表示オプション

横に並べて表示:
変化行の前後のみ表示: