[問題] 依然是有關QPSK的疑問...已回收

看板MATLAB作者 (空)時間16年前 (2009/10/16 17:02), 編輯推噓1(1011)
留言12則, 3人參與, 最新討論串1/3 (看更多)
各位大大好,小弟又來發問有關QPSK的問題了。 這次,我靠我自己寫出了QPSK程式碼,模擬值,也是自己寫出的。 但是好像還是有點問題...。 1.我的模擬值好像有問題,實在是太靠近實驗值了,尤其是在低SNR dB的時候, 幾乎重合實驗值.....請問該如何修改,才能跑出正確的圖? 2.當我把SNR的範圍拉長時(X軸拉長),後面幾個點卻跑不出來,值都是0, 請問該如何修改,才能跑出點來? 以下是我的程式碼。 clear all; close all; SNR = 1:1:15; %%%% SNR的範圍 Eb = 1; %%%% 設定Eb=1 No = 10.^(-SNR/10); %%%% 逆推得到的雜訊Power for i=1:length(SNR) NO = No(i); N(i)=0; correct(i)=0; for j=1:100000 s = sqrt(2*Eb/2); n1 = sqrt(NO/2)*randn(1); n2 = sqrt(NO/2)*randn(1); s1(j,i) = s + n1; s2(j,i) = s + n2; if (s1(j,i)>0 & s2(j,i)>0); correct(i)=correct(i)+1; %若在第一象限則判斷他對 else N(i)=N(i)+1; end end pe(i)=N(i)/j; %計算錯誤率 end semilogy(SNR,pe,'*'); %畫模擬值 hold %%%%%%%%%%%%%%%%% QPSK理論值 %%%%%%%%%%%%%%%%%%%%%%%%% r = 1:1:10; %%% SNR的範圍 %%% Eb=1; %%% 固定Eb=1 %%% No = 10.^(-r/10); %%% 逆推得到的No %%% for i=1:length(r) SNR = Eb./No; pe=2*(1/2)*erfc(sqrt(2*(SNR))/sqrt(2)); %%% 這是Matlab中不用Qfunction跑的錯誤 機率程式碼 %%% end semilogy(r,pe); %%% 畫圖,X軸為Eb/No的範圍,Y軸為錯誤機率 請好心的大大幫幫我,謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.23.17.113

10/16 23:14, , 1F
我的看法是只有AWGN假設下模擬和理論值基本上會非常像。
10/16 23:14, 1F

10/16 23:15, , 2F
所以你做的沒錯。
10/16 23:15, 2F

10/16 23:16, , 3F
另外一個問題應是取樣點數不足而已。
10/16 23:16, 3F

10/17 13:28, , 4F
阿...因為模擬值和實驗值在SNR低dB的時候,實在太靠近了,
10/17 13:28, 4F

10/17 13:29, , 5F
甚至比高SNRdB時還靠近,所以老X認為是錯誤的,但我不知道
10/17 13:29, 5F

10/17 13:29, , 6F
該怎麼跟他解釋,或是如何修正程式碼...。
10/17 13:29, 6F

10/17 13:30, , 7F
那請問C大,我要怎麼增加取樣點數阿? 因為我把SNR的範圍
10/17 13:30, 7F

10/17 13:30, , 8F
增加,但是後面的點都會因為N=0就不見了,跑不出點來。
10/17 13:30, 8F

10/17 13:31, , 9F
請問,我該怎麼修改,好讓我能做出更多的取樣點數呢?
10/17 13:31, 9F
※ 編輯: dv8508 來自: 114.38.131.147 (10/17 13:31)

10/19 01:01, , 10F
j=1:100000 有問題
10/19 01:01, 10F

10/19 01:01, , 11F
至少個數要是 錯誤率的倒數的一百倍
10/19 01:01, 11F

10/19 01:03, , 12F
low SNR 有滿足Monte carlo 所以那邊是正確的
10/19 01:03, 12F
文章代碼(AID): #1As3QmqH (MATLAB)
文章代碼(AID): #1As3QmqH (MATLAB)