This is an update ... I have implemented it using bsxfun but looks like it is slower than for loop
Below is the first code using for loop for both awgn and biterr functions
tic()
clear
N = 2^21;
EbN0_dB = (0:18);
Erate = zeros(size(EbN0_dB));
Enum = Erate ;
X = randi(2,N,1)-1;
for n = 1:numel(EbN0_dB)
Y = awgn(X,EbN0_dB(n),'measured');
Y = Y>0.5 ;
[Enum(n),Erate(n)]=biterr(X,Y);
end
toc()
semilogy(EbN0_dB,Erate)
grid
Elapsed time
Elapsed time is 3.504173 seconds.
The second using for loop for awgn only
tic()
clear
N = 2^21;
EbN0_dB = (0:18);
Erate = zeros(size(EbN0_dB));
Enum = Erate ;
X = randi(2,N,1)-1;
Y = zeros(size(X).*size(EbN0_dB));
for n = 1:numel(EbN0_dB)
Y(:,n) = awgn(X,EbN0_dB(n),'measured');
end
Y = (Y>0.5)+0 ;
[Enum,Erate]=biterr(X,Y,[],'column-wise');
toc()
semilogy(EbN0_dB,Erate)
grid
Elapsed time
Elapsed time is 3.894274 seconds.
And finally , using bsxfun for awgn function
tic()
clear
N = 2^21;
EbN0_dB = (0:18);
Erate = zeros(size(EbN0_dB));
Enum = Erate ;
X = randi(2,N,1)-1;
YY = bsxfun(@(a,b) awgn(a,b,'measured'),X,EbN0_dB);
YY = (YY > 0.5)+0 ;
[Enum,Erate]=biterr(X,YY,[],'column-wise');
toc()
semilogy(EbN0_dB,Erate)
grid
Elapsed time
Elapsed time is 3.999013 seconds.
Waiting you comments and advises .