0

基本的に、j番目の行ごとに行列NV(i、j)が乗算されるrandn(n、1000000)で構成される行列xを作成しようとしています。

%monte carlo simulation
function [y1,y2,y3,y4]= ed1(SNRL,SNRS,SNRH,n) %ed is the energy detection
g1= SNRL:SNRS:SNRH;
g=10.^(g1/10);
beta=0.8; % is the probability pfa, it cannot be more than 1

pf1=zeros(1,length(g));
pd1=zeros(1,length(g));
pf2=zeros(1,length(g));
pd2=zeros(1,length(g));
x=zeros(n,length(g));
y=zeros(n,length(g));

for i=1 : length(g)



for j=1:n
     NV=(i,j); 
    x(j,:) = randn(n,1000000)*sqrt(NV(i,j)); 
     y(j,:)=randn(n,1000000*(j),:)*sqrt(g(i))+x(j,:); 
end

 %Tgam is the threshold of gamma distribution 
 Tgam = gaminv((1-beta),n/2,(2/n)*(1+g(i))); %probab of flase detection
 pf1(i)= gamcdf(Tgam,n/2,(2/n)*(1+g(i))); %ho
 pd1 (i) = gamcdf(Tgam,n/2,2/n); %h1 % prob of detection

 pf2(i)= length (find(sum(y.^2)/n<Tgam))/1000000;
 pd2 (i) = length (find(sum(x.^2)/n<Tgam))/1000000; 

 y1=pf1; y2=pd1; y3=pf2; y4=pd2;
end
4

1 に答える 1

2

エラーを引き起こすものが3つあります。

1)NV=(i,j)この構文では、エラーメッセージが表示されます。この行に関するエラーメッセージが表示されない場合は、このコードを呼び出す行にエラーがあり、それも投稿する必要があります。NV=zeros(length(g),n);NVがどうあるべきかがわかるまで、一時的な修正を試みてください。

2)randn(n,1000000*(j),:)構文も悪いです。意味ですかrandn(n,1000000*(j))?

3)x(j,:) = randn(1,10000)*sqrt(NV(i,j));:魔法のように長さが10000でxない限り、コードに記述されているサイズは適切ではありません。g

うまくいけば、これらの3つのことをチェックすることで、特定のエラーメッセージを表示しているものがわかるようになります(これは、これらのエラーが私に表示したメッセージのいずれとも同じではありません)。

于 2013-01-17T21:18:03.517 に答える