First of all, I read the other convex ./ convex errors and “why isnt CVX accepting my model” topic but couldnt figured out how to pass this error.
The original error was :
Error using .*
Disciplined convex programming error:
Cannot perform the operation: {convex} ./ {convex}
Error in ./ (line 19)
z = times( x, y, ‘./’ );
Error in * (line 36)
z = feval( oper, x, y );
Error in / (line 15)
z = mtimes( x, y, ‘rdivide’ );
Error in optimclosedform (line 69)
maximize( abs(rx_intended) / abs(rx_interference + rx_noise) );
and I used quad_over_lin as suggested but it now requires second argument to be concave.
Optimization problem is a basic SINR calculation and I dont think it should be that hard so I hink I miss some basic thing in my code.
I’m just trying to find transmit power(scalar) value that maximizes SINR
Here is the code :
cvx_begin
variable p([64 10]);
W_ZF = H' * inv(H * H');
W_ZF = (W_ZF / norm(W_ZF,'fro'));
rx_noise = (1/sqrt(2)) * randn(1,1) *db2pow(noisevariancedb) + (1/sqrt(2)) * 1j * randn(1,1)*db2pow(noisevariancedb) *10e7;
tx_symbols = W_ZF;
tx_symbols = (tx_symbols.' ./ (N*K*mean(abs(W_ZF.')))).' ;
tx_symbols = tx_symbols .* p ;
k = 1;
H_k = H(k,:);
rx_gains = H_k * tx_symbols ;
rx_intended = rx_gains(:,k);
rx_interference = sum(rx_gains(:,[1:k-1 k+1:end]));
maximize( quad_over_lin(rx_intended , abs(rx_interference + sqrt(rx_noise) ) ) );
subject to
sum(sum(p)) < 100
cvx_end
and the error :
Error using cvx/quad_over_lin
The second argument must be concave.
Error in optimclosedform (line 69)
maximize( quad_over_lin(rx_intended , abs(rx_interference + sqrt(rx_noise) ) ) );