# How can I determine the complex envelope of a signal when knowing the analytic signal?

Consider a signal $x(t) = \sum A_i \sin(2\pi(f_c+f_i) t + \theta_i),\, i=1\ldots N,$ and its analytic signal $Z_x(t) = x(t) + j\mathcal H[x(t)]$.

I want to describe the complex envelope (equivalent lowpass signal) as $x_{eq} (t) = r(t)\exp(j\Phi(t))$.

How do I know the amplitude $r(t)$ and the phase $\Phi(t)$ of the complex envelope?

As an example, let's consider: $x(t) = 1 sin(2\pi*11.5e9*t) + 2 sin(2\pi*11.6e9*t)$

In Matlab I would start the code with:

T = 1e-9;
f_s = 1e12;
t = [0 : 1/f_s : T]';
f_c = 11.5e9;

x_passband = 1*sin(2*pi*(f_c+0)*t) + 2*sin(2*pi*(f_c+0.1e9)*t);

x_analytic = hilbert(x_passband);

x_envelope = x_analytic .* exp(-1i*2*pif_ct);

The complex envelope should also be equal to:

amplitude = abs(x_analytic);

phase = angle(x_analytic);

x_envelope = amplitude * exp(j*phase);

• I dont know, if this is possible, when $phi=phi(t)$ is really changing with t. Also, you need some constraints on $A_i(t)$, e.g. their bandwidth etc. Then, if $phi_i$ are constant, you might try to calculate the spectrum of $Z_x(t)$, and find the equivalent low-pass signal. – Maximilian Matthé Dec 14 '16 at 18:43
• @Maximilian: I have edited my question - both the amplitude and the phase are now constant. However the frequency of the sine-waves are different. Can you tell me how to find the equivalent-low-pass signal from the spectrum? Do I really have to calculate the spectrum? – user25356 Dec 15 '16 at 8:39

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]);


• Do you also know how to implement this in Matlab? - I have edited my original question as how I would do it. – user25356 Dec 15 '16 at 10:31
• So we multiply xpassband with the carrier in order to shift the signal to 0 frequency. Don't we have to multiply by $exp(- j*2\pi*fc*t)$ ? When you apply the butter command, why do you choose a 6th order filter and what does the B/(fs/2) mean? Did you choose the bandwidth B? Is my code in the original question wrong? – user25356 Dec 15 '16 at 12:16
• it does not really matter, if you multiply with positive or negative carrier frequency, since your baseband signal is real and hence symmetric in the FD. The order of the filter was chosen arbitrarily, it should just filter out the high frequency part. B is the signal bandwidth in baseband. You need to know it (if you dont know, you can estimate it from your actual spectrum). B/(fs/2) is the cutoff frequency of the lowpass filter. Your code in the original post is almost fine, however you dont have a lowpass, so you will still have the carrier frequency in your signal. – Maximilian Matthé Dec 15 '16 at 17:31
• I correct myself: your baseband signal is complex, as you see. Downconversion by positive or negative yields the conjugated versions of the baseband. It depends also, how your upconversion was performed. – Maximilian Matthé Dec 15 '16 at 17:48