[問題] 有關迴圈紀錄的問題。已回收

看板MATLAB作者 (空)時間16年前 (2009/10/09 13:46), 編輯推噓0(009)
留言9則, 2人參與, 最新討論串1/1
大家好,小弟這次採用土法煉鋼的方式,嘗試自己寫程式看看,但還是遇到了 一些問題,想請問各位大大該怎麼解決。以下是程式碼和問題詳述。 clear all; close all; EsNo = 1:1:10; %%%% SNR的範圍 Es = 1; %%%% 設定Es=1 No = 10.^(-EsNo/10); %%%% 逆推得到的雜訊Power for i=1:length(EsNo) N(i+1)=0; correct1(i+1)=0; correct2(i+1)=0; correct3(i+1)=0; correct4(i+1)=0; %%%%%%%%%%%%%%%%%% 以下的迴圈應該是問題的主因%%%%%%%%%%%%%%%%%%% for j=1:100000 s = sqrt(Es/2); n1 = sqrt(No/2)*(randn(1) + j*randn(1)); n2 = sqrt(No/2)*(randn(1) + j*randn(1)); A(j) = s; %%%%%%%%%%%%%%%%%%%%%%%%%%%%% 如何紀錄s1 s2 %%%%%%%%%%%%%%%%%%%%% s1 = s + n1; s2 = s + n2; %%%%%%%%%%%%%%%%%%%%%%% 這邊也有問題%%%%%%%%%%%%%%%%%%%%%%%%%%%% if (s1>0 & s2>0); correct1(i+1)=correct1(i+1)+1; %若在第一象限則判斷他對 elseif (s1<0 & s2>0) correct2(i+1)=correct2(i+1)+1; %若在第二象限則判斷他對 elseif (s1<0 & s2<0) correct3(i+1)=correct3(i+1)+1; %若在第三象限則判斷他對 elseif (s1>0 & s2<0) correct4(i+1)=correct4(i+1)+1; %若在第四象限則判斷他對 else N(i+1)=N(i+1)+1; %若判斷錯誤則錯誤+1 end %%%%%%%%%%%%%%%%%%%%% 分隔線 %%%%%%%%%%% end pe(i+1)=N(i+1)/j; %計算錯誤率 end semilogy(i,pe,'*'); %畫模擬值 hold SNRindB2=0:0.1:10; for i=1:length(SNRindB2), SNR2=exp(SNRindB2(i)*log(10)/10); % theoretical error rate theo_err_prb(i)=qfunct(sqrt(2*SNR2)); %理論值 % echo off ; end; display(pe) display(N) display(s1) display(s2) semilogy(SNRindB2,theo_err_prb); 以上是我的程式碼,分隔線,是我自己認為這些地方是問題所在,特別標示出來的。 而我要問的問題是: Q1:請問我寫的第二個迴圈,也就是j=1:100000的那個,請問s1和s2要怎麼把它記錄起來, 好讓他不要被後來的s1和s2取代掉? 我遇到的問題就是,檢查if和else的時候,發現s1和s2的值,在第一到第四象限的值, 都是一樣的導致圖型根本跑不出來,請大大教教我,該怎麼寫,才能把值記錄下來, 要不然,我現在寫的程式,跑出來,幾乎都是一個點...。很糟糕= =。 Q2:我知道錯誤機率產生的方式,是輸入一個值,知道這個值原本在第幾象限,再丟入 程式做判斷,如果判斷和原本的象限相同,那正確+1,若跑到其他象限,代表判斷 錯誤,錯誤值+1。 請問我寫的if else的程式碼,可以正確的判斷錯誤機率嗎? 例如:第一個(s1,s2)=(+,+),程式判斷是第一象限,正確+1。 第二個(s1,s2)=(-,+),程式判斷是第一象限,錯誤+1。 . . . . 重複10萬次,每次得到的s1和s2的正負值都是隨機的,再丟入程式判斷是否正確 但是我覺得,我的寫法應該會把s1和s2全部都判斷成正確的,但不知道該怎麼改, 請各位好心的大大幫我解答。 p.s. correct會有1234,是因為我怕會被替換掉,所以另外起了4個,但是也不知道 對不對...。還請大大幫我看看 而最後,理論值的部分,我暫時是用版上的程式碼跑看看,我偷懶了= = 謝謝各位好心的大大幫忙。小弟我感激不盡。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.23.17.113 ※ 編輯: dv8508 來自: 163.23.17.113 (10/09 13:48) ※ 編輯: dv8508 來自: 163.23.17.113 (10/09 17:04)

10/10 17:40, , 1F
請問有人願意幫我糾正錯誤嗎QQ
10/10 17:40, 1F

10/10 20:07, , 2F
紀錄第二層:s1(j) s2(j); 全部紀錄:s1(i,j) s2(i,j)
10/10 20:07, 2F

10/11 11:22, , 3F
感謝大大回應,等等去實驗室用看看!!! 謝謝你
10/11 11:22, 3F

10/11 15:37, , 4F
請問S大大,我用你的方法記錄時會出現錯誤,我打出來
10/11 15:37, 4F

10/11 15:38, , 5F
k1=s1(j) ??? Index exceeds matrix dimensions.
10/11 15:38, 5F

10/11 15:38, , 6F
請問該怎麼解決? 謝謝幫忙。
10/11 15:38, 6F

10/11 16:51, , 7F
我的意思是把 s1 都換成 s1(j) 或 s1(i,j);s2 類似方法
10/11 16:51, 7F

10/11 17:04, , 8F
喔喔 了解
10/11 17:04, 8F

10/11 17:04, , 9F
我在試試看 感恩
10/11 17:04, 9F
文章代碼(AID): #1ApiuPqz (MATLAB)
文章代碼(AID): #1ApiuPqz (MATLAB)