How can I determine the complex envelope of a signal when knowing the analytic signal?
With constant amplitudes and phases, this becomes a simple exercise:

First, go to the spectral domain
$$
X(f) = \mathcal{F}\{x(t)\}=\sum A_i \frac{1}{2j} (\delta(f-(f_c+f_i)-\delta(f+(f_c+f_i))\exp(j2\pi\tau_if)
$$
with 
$$
\tau_i=\frac{\theta_i}{2\pi (f_c+f_i)}
$$
being phase offset translated to the equivalent time shift.

Now, you can shift this such that the carrier becomes DC:

$$X_d(f)=X(f-f_c) = \sum A_i \frac{1}{2j} (\delta(f-2f_c-f_i)-\delta(f+f_i))\exp(j2\pi\tau_i(f-f_c)$$

Applying a low-pass filter kicks out the high-frequency Dirac at $2f_c$. Then, transforming back to time, you get

$$
x_d(t) = -\sum A_i\frac{1}{2j}\exp(j2\pi f_i(t-\tau_i))\exp(-j2\pi\tau_if_c).
$$

This should be your complex envelope.

In case yo want to do this in Matlab, I would go for the following approach (which is completely different from the math above. It is the straight-forward implementation of shifting in frequency by multiplication in time):

T=1e-6;
fs=1e11;
t=[0:1/fs:T]';
fc=11.5e9;

B = 0.5e9;  % Signal bandwidth

carrier = exp(2j*pi*fc*t);

xpassband=1*sin(2*pi*(fc+0)*t)+2*sin(2*pi*(fc+0.1e9)*t);

xbaseband = carrier .* xpassband;

[b,a] = butter(6,B/(fs/2));
xbaseband_lowpass = filter(b, a, xbaseband);

subplot(2,1,1);
hold off;
plot(t, real(xpassband));
hold on;
plot(t, real(xbaseband_lowpass), 'r', 'LineWidth', 2);
plot(t, imag(xbaseband_lowpass), 'k', 'LineWidth', 2);
xlim([1e-7, 2e-7]);