function [ truecapacity , approxcapacity ]=part2trueapproxcapacity2(L,N,sigma,numsamples)

  angl = pi/4;
  d = 1;
  lambda = 10;
  
  c = L/N;
    
  %get an estimate very close to the true capacity
  sum = 0;
  for (k=1:numsamples)
    V1 = zeros(N,L);
    V2 = zeros(N,L);
    for (k=1:L) 
      theta = 2*angl*(rand(1)-0.5);
      V1(:,k) = ((exp(2*pi*j*sin(theta)*d/lambda)).^(0:(N-1)))';
      theta = 2*angl*(rand(1)-0.5);
      V2(:,k) = ((exp(2*pi*j*sin(theta)*d/lambda)).^(0:(N-1)))';
    end
    V1 = (1/sqrt(N))*V1;
    V2 = (1/sqrt(N))*V2;
    sum = sum + log2(det( eye(L,L) + (1/(sigma^2)) * V1' * V2 * V2' * V1 ));
  end
  truecapacity = sum/(numsamples*N);
  
  I2 = (2*pi)^(2-1)*quad(@p2,-pi,pi);
  I3 = (2*pi)^(3-1)*quad(@p3,-pi,pi);
  I4 = (2*pi)^(4-1)*quad(@p4,-pi,pi);
  I5 = (2*pi)^(5-1)*quad(@p5,-pi,pi);
  I6 = (2*pi)^(6-1)*quad(@p6,-pi,pi);
  moms(1) = I2*c^2;
  moms(2) = (2/3)*I2*c^2 + 2*I3*c^3 + I4*c^4;
  moms(3) = (11/20)*I2*c^2 + 4*I3*c^3 + 9*I4*c^4 + 6*I5*c^5 + I6*c^6;
  moms = moms/c;
      
  approxcapacity = 0;
  for (k=1:length(moms))
    approxcapacity = approxcapacity + (-1)^(k+1)*moms(k)/(k*sigma^(2*k));
  end
  approxcapacity = approxcapacity/log(2);
  %approxcapacity is now the capacity estimate