# How to reduce its execution time and why the value of e is a column vector?

2 views (last 30 days)

Show older comments

Sadiq Akbar
on 2 Jan 2023

Commented: Sadiq Akbar
on 9 Jan 2023

I have the following piece of code.

clc;clear all;

c = 340;

f = 3400;

d = c/f/2;

T = 1;

Sig = 2;

M = 6;

N = 7;

theta = linspace(-60, 60, Sig);

p = 6;

SNR = 10;

Fc=[2*10^3:2*10^3/(Sig-1):5*10^3];

T_Vector=1/f;

p_N = [0:M/p:M*(N-1)/p];

p_M = [0:N:(M-1)*N];

P = union(p_N,p_M);

A = zeros(length(P),Sig);

SigVec = zeros(Sig,T);

for Q = 1:Sig

A(:,Q) = exp(-j*P'*2*pi*d*sin(theta(Q)*pi/180)*f/c);

SigVec(Q,:) = exp(1j*2*pi*Fc(Q).*T_Vector);

end

%%%%%%%%%%%%%%%%%%

% xo calculation

%%%%%%%%%%%%%%%%%%

xo = A*SigVec;

%%%%%%%%%%%%%%%%%%%%%%%%%%

% xe calculation

%%%%%%%%%%%%%%%%%%%%%%%%%

b=theta;

for Q = 1:Sig

Ae(:,Q) = exp(-j*P'*2*pi*d*sin(b(Q)*pi/180)*f/c);

SigVec_est(Q,:) = exp(1j*2*pi*Fc(Q).*T_Vector);

end

xe = Ae*SigVec_est;

%%%%%%%%%%%%%%%%%

% MSE

%%%%%%%%%%%%%%%%

e = mean(abs(xo-xe).^2,2)

I want to reduce its execution time. Further, I want a single value of e as zero but it gives me a column vector of e.

### Accepted Answer

Walter Roberson
on 2 Jan 2023

### More Answers (1)

Voss
on 3 Jan 2023

@Sadiq Akbar: OK. See below.

Note that SigVec has T columns because of its pre-allocation, but that SigVec_est has one column because it was not pre-allocated in the original code. I've kept them like that (change T to something > 1 to see the difference).

clc;clear all;

c = 340;

f = 3400;

d = c/f/2;

T = 1;

Sig = 2;

M = 6;

N = 7;

theta = linspace(-60, 60, Sig);

p = 6;

SNR = 10;

Fc=[2*10^3:2*10^3/(Sig-1):5*10^3];

T_Vector=1/f;

p_N = [0:M/p:M*(N-1)/p];

p_M = [0:N:(M-1)*N];

P = union(p_N,p_M);

% A = zeros(length(P),Sig);

% SigVec = zeros(Sig,T);

%

% for Q = 1:Sig

% A(:,Q) = exp(-j*P'*2*pi*d*sin(theta(Q)*pi/180)*f/c);

% SigVec(Q,:) = exp(1j*2*pi*Fc(Q).*T_Vector);

% end

A = exp(-1j*P(:)*2*pi*d.*sin(theta*pi/180)*f/c);

SigVec = exp(1j*2*pi*Fc(:).*T_Vector*ones(1,T));

%%%%%%%%%%%%%%%%%%

% xo calculation

%%%%%%%%%%%%%%%%%%

xo = A*SigVec;

%%%%%%%%%%%%%%%%%%%%%%%%%%

% xe calculation

%%%%%%%%%%%%%%%%%%%%%%%%%

b=theta;

% for Q = 1:Sig

% Ae(:,Q) = exp(-j*P'*2*pi*d*sin(b(Q)*pi/180)*f/c);

% SigVec_est(Q,:) = exp(1j*2*pi*Fc(Q).*T_Vector);

% end

Ae = exp(-1j*P(:)*2*pi*d.*sin(b*pi/180)*f/c);

SigVec_est = exp(1j*2*pi*Fc(:).*T_Vector);

xe = Ae*SigVec_est;

%%%%%%%%%%%%%%%%%

% MSE

%%%%%%%%%%%%%%%%

e = mean(abs(xo-xe).^2,2)

### See Also

### Categories

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!