Difference between revisions of "User:CSeguinot"
(15 intermediate revisions by the same user not shown)  
Line 1:  Line 1:  
<! IQ_complex_signals.mediawiki >  
This  This tutorial originates from discussions on discussgnuradio@gnu.org. We will explain why simulating digital communications requires equivalent baseband representation of signal which in fact are complex signals. For this unique reason, complex signals are essential in GNURadio.  
This tutorial is intended for non specialist, it involves as less maths as possible and present most results with GNURadio flowgraph. Some examples involving simple modulation scheme used in HAM radio are presented. While introducing complex signal can be seen as increasing complexity, we will see that it drastically simplify studying impairment such as synchronization.  
If you are searching for more detailed information please refer to corresponding literature such as references [[#ancre1[1]]],[[#ancre2[2]]],[[#ancre3[3]]].  
The complex representation is obtained by replacing the cos function by an exponent function. The real signal correspond to the real part of the complex signal .  == Some maths ==  
This section summarize complex numbers properties used in this tutorial. More information can be found on  
[[wikipedia: Complex numbercomplex number Wikipedia page200px]].  
[[File:IQ_complex_tutorial_polar2.pngframeComplex number ''z''=''a'' + ''jb'']]  
A complex number is a number of the form ''a'' + ''jb'', where ''a'' and ''b'' are real numbers, and ''j'' is an indeterminate satisfying ''j''<sup>2</sup>=1 (Mathematician prefer using ''i'' instead of ''j'' used by physicist and radio engineers). For example, z<sub>1</sub>=2+3''j'' is a complex number. The real part Re{''z''} of z<sub>1</sub> is 2 and its imaginary part Im{''z''} is 3.  
: <math>z=a+jb </math>  
: <math>\text{Re}\{z\}=a</math>  
: <math>\text{Im}\{z\}=b</math>  
Complex numbers can be represented in the complex plane as vectors. The modulus or magnitude ''r'' of a complex number ''z'' = ''a'' + ''jb'' is  
: <math>r=z=\sqrt{a^2+b^2}</math>  
The phase φ of ''z'' mathematically referred to as the argument is the angle of the radius Oz with the positive real axis.  
: <math>\phi=\arg(z)=\arctan(b/a) </math> (for a≠0)  
Together, r and φ give another way of representing complex numbers, the polar form and the exponential form.  
: <math>z=r \left(cos(\phi) + j sin(\phi) \right) = r e^{j\phi}</math>  
[[File:IQ_complex_tutorial_polar1.pngframeThe complex plane]]  
The exponential form is convenient for computing the multiplication of two complex numbers.  
: <math>z_1= r_1 e^{j\phi_1}</math>  
: <math>z_1= r_2 e^{j\phi_2}</math>  
: <math>z=z_1z_2= r_1r_2 e^{j(\phi_1+\phi_2)}</math>  
Following complex number have a unit magnitude ''r''=1 :  
: <math>+1=e^{j0}</math>  
: <math>+j=e^{j\pi/2}</math>  
: <math>1=e^{j\pi}</math>  
: <math>j=e^{j3\pi/2} </math>  
A complex signal ''c(t)'' can be seen as two real signal ''i(t), q(t)'' combined to create a complex signal. It can also be represented by its time varying amplitude ''a(t)'' and its phase ''φ(t)''  
: <math>c(t) = i(t) + j q(t) = a(t) e^{j\phi (t)} </math>  
== Why we need complex and IQ signals ==  
GNURadio software is mainly used to design and study radio communications. Making high frequency transmission requires modulating a high frequency carrier at frequency ''F<sub>0</sub>''. The most common modulation for analog transmissions are Amplitude modulation (AM) Phase modulation (PM) and Frequency modulation (FM).  
[[File:IQ_complex_tutorial_AM_spectrum.pngthumb400pxAM spectrum]]  
For analog AM, the modulated signal ''m(t)'' is simply the mathematical product of the carrier ''c(t)'' and the baseband signal to transmit ''a(t)''. The corresponding hardware is a mixer whose scheme and mathematical representation is a multiplier.  
: <math>m(t) = a(t) c(t) = a(t) \cos(2\pi f_0t)</math>  
We call ''a(t)'' a baseband signal since its spectrum is in a low frequency range starting near 0 Hz (For example [020kHz] for an HIFI audio signal).  
The spectrum of an AM modulated signal ''M(f)'' is the translation or the audio spectrum ''A(f)'' around ±''F<sub>0</sub>'' with ''A(f)'' being the entire spectrum of the modulating signal, using both positive and negative frequencies  
: <math>M(f) = \frac{1}{2}\big(A(ff_0) + A(f+f_0)\big)</math>  
N.B. Negative frequencies are often omitted in spectrum representation since, for real signal (''a(t)'', ''m(t)'' are real) the power spectrum are symmetric around zero as will be detailed later.  
Up to now we have been dealing with real signal. The need for complex signal appears in the next step. Simulation requires sampled signal. Sampling is the operation of observing a continuous signal and taking a finite number of sample at a given sampling rate ''f<sub>s</sub>'' (i.e; one sample each 1/''f<sub>s</sub>'' second). simulator can only make calculations on a finite number of samples, they require sampled signal. Nyquist Sampling theorem states that the sampling rate must be greater than twice the maximum frequency ''F<sub>Max</sub>'' to be able to reconstruct the original signal from the sampled signal.  
: <math>f_s > F_{Max}</math>  
For an HIFI audio signal, maximum audio frequency <math>F_{Max Audio}</math> is closed to 20 kHz, sampling rate must be higher then 40 kHz (44.8 kHz is often used in computer sound card, 8 kHz is used for mobile phone since voice has a lower frequency range then HIFI audio).  
For an AM signal modulated by an audio signal, maximum frequency of the modulated spectrum is <math>F_{Max}=F_0+F_{Max Audio}</math>. Direct sampling of such signal is not possible with conventional hardware such as low cost SDR dongle. If the carrier frequency is close to 1 GHz, the sampling rate should be at least 2 GHz. This is obviously too much then computer can handle (higher then some computer clock).  
Flowgraph [[Media:IQ_tutorial_AM_TX_real.grcIQ_tutorial_AM_TX_real.grc]] illustrates amplitude modulation using only real blocks (excepted for bits source). As a consequence, the maximum carrier frequency is limited to several tens of kHz.  
* study the modulator part which simply multiply the baseband signal and the sine carrier  
* look at the influence of the carrier frequency on the modulated signal spectrum (carrier frequency must stay lower than half the sampling rate)  
* look at the spectrum shape for sawtooth input and random bit sequence (QT Gui chooser and Selector)  
* When transmitting random bits, you can desactivate the interpolating FIR Filter and replace it by a root raised cosine filter  
== Spectrum properties of signals==  
Amplitude spectrum is calculated using the Fourier Transform. It represents how the power is spread in the frequency domain. It allows for determining the signal bandwidth. Power Spectral Density or PSD correspond to the average magnitude of the Amplitude spectrum.  
In this section we summarize some properties of the phase arg''{X(f)}'' and magnitude ''X(f))''. We first consider properties for continuous signal. Then we will investigate additional properties of sampled signal (those used in GNURadio).  
Given a signal ''x(t)"" it amplitude/phase spectrum is denoted ''X(f))'' which is a complex function given by :  
: <math>X(f) =\int{x(t)e^{2j\pi ft}dt</math>  
=== continuous real signal ===  
Every real signal have a spectrum whose magnitude is symmetric and phase is antisymmetric.  
: <math>x(t) \in \mathbb{R}</math>  
: <math>X(f)=X^*(f)</math>  
: <math>X(f)=X(f)</math>  
: <math>\text{arg}\{X(f)\}=\text{arg}\{X(f)\}</math>  
[[File:IQ_complex_tutorial_complex_spectrum.pngthumb500pxComplex signal spectrum and, sampled complex signal spectrum (only first 3 patterns represented)]]  
=== continuous complex signal ===  
The main difference with real signal is that:  
* any complex signal having non null imaginary part exhibits a nonsymmetric spectrum.  
* as a consequence, every nonsymmetric spectrum correspond to a complex signal  
=== sampled signals ===  
We consider a signal ''x(t))'' and we note its sampled version ''x<sub>s</sub>(t))'' sampled at frequency ''F<sub>s</sub>''.  
The spectrum ''X<sub>s</sub>(f)'' of the sampled signal is a periodic function of period ''F<sub>s</sub>''.  
: <math>X_s(f)=\sum_k X(fkF_s)</math>  
So the sampled signal spectrum verify :  
: <math>X_s(f+kF_s)=X_s(f)</math>  
Generally the bandwidth of ''X(f))'' is lower then ''F<sub>s</sub>''/2. The infinite sum defined above exhibit no aliasing (no superposition of patterns ''X(f), X(f+F<sub>s</sub>)'' and ''X(fF<sub>s</sub>)'') .In that case, as stated in the Nyquist theorem of sampling, the original spectrum/signal can be recovered by filtering the sampled signal.  
When the maximum frequency of the signal spectrum do not respect Nyquist theorem, one should filter the signal with a low pass filter having a cuttoff frequency lower then ''F<sub>s</sub>''/2 before sampling: this correspond to the antialiasing filter used in every SDR hardware.  
== Complex enveloppe, equivalent baseband signal==  
Baseband signals have a spectrum at low frequency near 0 Hz. Audio, video and NRZ line code are baseband signals.  
Bandpass signals have no energy near 0 Hz and a spectrum located near a high frequency (generally the carrier frequency). Analog and digital AM PM and FM modulated signals are bandpass signals.  
A theorem ([[#ancre1[1]]],[[#ancre2[2]]],[[#ancre3[3]]]) states that any high frequency bandpass signal having a limited bandwidth ''B'' can be represented by a baseband equivalent signal having the same bandwidth. This baseband equivalent signal also called the complex envelope is used in simulators since its allow to lower sampling rate as compare to directly sampling the bandpass signal.  
The equivalent baseband representation help us for the simulation of bandpass signals. At this step we need some math. We will consider a carrier modulated in phase and/or amplitude (in the sake of simplicity, Frequency modulation is not considered but it can be related to phase modulation.). Such a modulated signal ''m(t)'' and it's complex representation <math>\tilde{m}(t)</math> is :  
: <math>m(t)=a(t) \cos(2\pi F_0t + \phi(t))</math>  
: <math>\tilde{m}(t)=a(t) e^{(j(2\pi F_0t + \phi(t)))} = a(t) e^{j \phi(t)} e^{j2\pi F_0t} = m^{bb}(t) e^{j2\pi F_0t}</math>  
For modulated signal, the complex representation is obtained by replacing the cos function by an exponent function . For a more general definition see [[#ancre1[1]]],[[#ancre2[2]]],[[#ancre3[3]]] . The real signal correspond to the real part of the complex signal <math>m(t)=\text{Re}(\tilde{m}(t))</math>.  
[[File:IQ_complex_tutorial_EQ_BB.pngthumb400pxAM spectrum]]  
One important property of <math>\tilde{m}(t)</math> spectrum <math>\tilde{M}(f)</math> is that it has only energy in the positive frequency range and verify.  
: <math>\tilde{M}(f)=M^+(f)</math>  
where <math>=M^+(f)</math> denotes the restriction of <math>=M(f)</math> to the positive frequency range.  
Let us now look at the complex envelope or equivalent baseband signal <math>m^{bb}(t)</math> of bandpass signal <math>m(t)</math> defined by :  
: <math>m^{bb}(t)= \tilde{m}(t) e^{+j2\pi F_0t} = a(t) e^{j \phi(t)} </math>  
Multiplying a signal by <math>e^{+j2\pi F_0t}</math> correspond to a frequency translation of the spectrum so that we have:  
:<math>M^{bb}(f)=M+(f+F_0)</math>  
So the spectrum of the complex enveloppe is a baseband signal whose spectrum has the same shape as <math>=M+(f)</math>. For this reason, knowing <math>\tilde{m}(t)</math> or <math>M^{bb}(f)</math> is sufficient to reconstruct <math>m(t)</math> or <math>M(f)</math>.  
== IQ modulator and demodulator==  
[[File:IQ_complex_tutorial_IQ.pngthumb200pxComplex signal in the IQ plane]]  
[[File:IQ_complex_tutorial_IQ_Mod_Demodcrop.pngthumb400pxID modulator and demodulator]]  
Let us now come to hardware and SDR and first rewrite the equivalent baseband signal and the modulated signal ''m(t)'' :  
: <math>m^{bb}(t)=a(t) e^{j \phi(t)} =i(t) + j q(t)</math>  
: <math>m(t)=\text{Re} \left[ \big(i(t)+jq(t)\big) e^{j2\pi F_0t} \right]</math>  
: <math>m(t)=i(t) \cos(2\pi F_0t) q(t)) \sin(2\pi F_0t)</math>  
The phase ''φ(t)'' of the modulated signal ''m(t)'', is identical to the phase of the complex signal ''c(t)=i(t)+jq(t)''. The equivalent baseband signal ''c(t)'' is represented in a complex plane also refeered to as the IQ plane. The resulting ''m(t)'' can be any modulated in AM, PM or even FM signal.  
* <math>i(t)=a(t) \cos(\phi(t))</math>  
* <math>q(t)=a(t) \sin(\phi(t))</math>  
As a result, the modulated signal ''m(t)'' is the addition of :  
* <math>i(t) \cos(2\pi F_0t)</math> which is an AM modulated signal, the product of ''i(t)'' by a signal In phase with the carrier (i stand for In phase)  
* <math>q(t) \sin(2\pi F_0t)</math> which is an AM modulated signal, the product of ''q(t)'' by a signal in Quadrature with the carrier (q stand for Quadrature)  
The corresponding hardware is called an IQ modulator. Every modern radio communication uses IQ modulator for emitting and IQ demodulator for receiving. The IQ demodulator is able to recover incoming ''i(t)'' and ''q(t)''. If the amplitude of the recovered carrier is 2, and if modulator and demodulator carrier are synchronous (same frequency and phase) the output of the IQ demodulator correspond to input ''i(t)'' and ''q(t)''.  
: <math>\hat{i}(t)=i(t) </math>  
: <math>\hat{q}(t)=q(t) </math>  
In real hardware, carrier are not synchronous and the receiver must compensate any phase and frequency difference between emitter and receiver. This is done using some hardware and/or software such as polyphase clock sync, and Costas loop.  
SDR Module such as USRP [https://www.ettus.com/allproducts/usrpn320/(USRP N320 block Diagram)] and SDR Dongle [https://www.programmersought.com/article/59454592969/ (RTL2832)] input and output are the 2 real signals ''i(t)'' and ''q(t)'' combined to form the complex signal ''i(t) + j q(t)'' which turns to be the equivalent baseband of the modulated emitted or received signal. These hardware are based on IQ modulator and IQ demodulator associated with mixers when intermediate frequency (IF) is used.  
== Some examples of EqBB signals ==  
In order to get familiar with complex signal, let us consider some basic examples.  
First, we suppose our emitter carrier is <math> \cos (2\pi F_0t)</math> so that every equivalent baseband signal will be defined according to this reference.  
=== complex envelope of a pure sine wave ===  
We will consider a pure sine wave, close to the carrier having a ''Δf'' frequency shift and ''φ'' phase shift as compared to the carrier. After some math we get its complex equivalent signal.  
: <math>m(t) = A \cos (2\pi (F_0+\Delta f)t+ \phi)</math>  
: <math>\tilde{m}(t) = A e^{(j(2\pi (F_0+\Delta f)t + \phi))} </math>  
: <math>m^{bb}(t) = A e^{2j(\pi (\Delta ft+\phi)} = A e^{j \Delta ft} e^{j\phi}</math>  
The complex envelope of the carrier itself is found for ''Δf''=0 and ''φ''=0 which yields <math>m^{bb}(t) = A</math>. We conclude that in a GNURadio flowgraph, the carrier is represented by a continuous components, a pure DC signal ; this may seemed counter intuitive. The spectrum <math>M^{bb}(f)</math> is a single peak at ''f=0'' which can be represented using the Dirac ''δ(f) function (or distribution)'' : <math>M^{bb}(f)=\delta(f))</math>. Shifting this spectrum of <math>+F_0</math> towards positive frequency we get the positive part of the carrier spectrum (a peak at <math>+F_0</math>) : <math>M^+(f)=\delta(fF_0))</math>. The negative part of the spectrum is simply obtained by symmetry of the real part (a peak at <math>F_0</math>).  
This can be simulated with GNURadio flowgraph [[media:IQ_tutorial_eq_bb.grcIQ_tutorial_eq_bb.grc]]. The spectrum of our carrier is centered at 0 Hz. The Frequency sink has a feature to shift this spectrum around <math>F_0</math> which is a parameter of the sink. In a simulation, it is not necessary to represent the negative part of the spectrum since ''m(t'') being real, it spectrum is obviously symmetric.  
We will now consider ''Δf'' ≠0 which simulate a signal not exactly synchronous to the carrier. This yieds  
: <math>m^{bb}(t) = A e^{2j\pi \Delta ft}</math>  
The complex enveloppe is rotating vector (you can simulate this with ''Δf''=1 Hz giving a vector which rotate at 60 rpm or 1 turn per second) , its spectrum is a single peak at ''f=+Δf''. This complex signal exhibits a non symmetric spectrum (no peak at ''f=Δf''). Change ''Δf'' to 0.5 Hz, the vector now rotates counter clockwise at 30 rpm or 0.5 turn per second.  
Exercice:  
Open flowgraph [[media:IQ_tutorial_eq_bb.grcIQ_tutorial_eq_bb.grc]]. Parameter delta_f is set with an increment of 1/12, which correspond to 5 rotation per minute.  
* For ''Δf''=1/12=0.0833, what is the speed of rotation of the complex signal?  
* What do you observe when ''Δf''=1/12=0.0833 ?  
* Slowly increase ''Δf'' to reach ''f<sub>s</sub>/2'' and observe the spectrum really has a single peak at ''Δf''. Explain your observation when ''Δf>f<sub>s</sub>/2'.  
* Do the same for a negative ''Δf''  
* For ''Δf =f<sub>s</sub>'' what is the equivelant baseband frequency. What is the carrier frequency ?  
* Set ''Δf''=0 and ''φ''≠0. Discusss the simulated equivalent baseband signal.  
=== AM mod demod example===  
This example will consider signal baseband signal ''a(t)'' modulating a carrier at F<sub>0</sub> in AM, and its demodulation. As no phase modulation in used, ''φ(t)''=0 and consequently ''q(t)''=0.  
: <math>m(t) = a(t) \cos (2\pi (F_0t)=i(t) \cos (2\pi F_0t) q(t) \sin (2\pi F_0t)= </math>  
: <math>i(t) = a(t) </math>  
: <math>q(t) = 0</math>  
AM modulation is a special case for which the equivalent baseband complex signal has a null imaginary part and is real. Considering the schematic diagram of an IQ modulator demodulator, when ''q(t))'' is null the diagram is simplified (imaginary path is not used) yielding the well known AM modulation/demodulation scheme.  
Remind that in GNURadio flowgraph :  
* orange connections correspond to real signals (float numbers)  
* blue connections correspond to complex signals (complex numbers)  
Flowgraph [[media:IQ_tutorial_AM_TX_complex.grcIQ_tutorial_AM_TX_complex.grc]] contains two equivalent diagram for an AM modulation with a sawtooth input:  
* the upper one uses real signals. It is the exact AM modulator uses at the beginning of this tutorial.  
** sampling frequency is 200 kHz, 40 times the input rate which equal 5 kHz.  
** allowing a maximum carrier frequency close to 100Khz  
[[File:AM TX complex.pngthumb600pxAM modulator flowgraph]]  
* the lower one uses an equivalent baseband representation.  
** sampling frequency is 25 kHz, 5 times the input rate which equal 5 kHz.  
** the sawtoooth correspond to identical generator in both modulator  
** each blue input or output is the baseband equivalent of the corresponding signal in the upper AM modulator.  
** the carrier frequency can be any value compatible with connected Hardware  
** the carrier equivalent signal equal 1 (as stated in the previous section) so it has been disable and replaced by a complex constant  
** the Hardware input is the complex equivalent baseband signal  
** the carrier frequency is not needed nor used in complex blocks; excepted in the QT GUI spectrum to label the center frequency which is 0 but correspond to the ''F>sub>0</sub>''.  
Three blocks are unusefull and can be removed from the lower complex modulator:  
* save the current flowgraph as IQ_tutorial_AM_TX_complex_2.grc.  
* remove the complex multiplier, the carrier equivalent baseband (complex constant=1) and the carrier complex source (the disabled one). Reconnect complex to float and throttle blocks to obtain the flowgraph sketched on the right.  
You can now run this flowgraph and compare signal and their spectrum in both modulator. Once again, these simulations suppose perfectly synchronous emitter and receiver carrier which is quite far from reality.  
==== Further work : construct the AM demodulator flowgraph ====  
Use the flowgraph IQ_tutorial_AM_TX_complex_2.grc that you created, add blocks to perform AM demodulation and to recover the input signal ''a(t)'' from the modulated signal. You have to use the equivalent baseband representation of the demodulator.  
{ class="mwcollapsible mwcollapsed wikitable"  
 1st indication  
  
 Remind and use the relation between ''a(t)'' and ''c(t)=i(t)+jq(t)'' given above.  
}  
{ class="mwcollapsible mwcollapsed wikitable"  
 2nd indication  
  
 An AM demodulator extract the amplitude (magnitude) of the modulated signal...  
}  
{ class="mwcollapsible mwcollapsed wikitable"  
 Solution including filter  
  
 [[media:IQ_tutorial_AM_TX_complex_3.grcIQ_tutorial_AM_TX_complex_3.grc]]  
Running this flowgraph, demodulation is obtained taking the real part (imperfect solution), or the magnitude (good solution) of the complex signal.  
* these two methods give exactly the same results  
* these two methods are close to, but differ from original input signal due to the lowpass filter (only 6 peak are taken from the sawtooth spectrum, 3 for positive frequency and 3 other for negatives ones. )  
* in a real system, bandpass filtering before demodulation is used. As will be shown, the lowpass filter is equivalent to a bandpass filter acting on the bandpass modulated signal  
* Only taking magnitude is a good AM demodulation since it is less sensitive to frequency and phase lack of synchronism found in real systems.  
}  
=== QPSK example ===  
QPSK digital signal exhibit four phase state <math>\phi \in \{\pi/4, 3\pi/4, 3\pi/4, \pi/4 \}</math>.  
: <math>m^{bb}(t)=a(t) e^{j \phi(t)} =i(t) + j q(t)</math>  
And the baseband equivalent signal also exhibit 4 different values each one being used to code a 2 bits sequence 00 01 10 or 11 :  
: <math>m^{bb}(t) \in \{1+j , 1+j , 1j, 1j \}</math>  
Normally, we would use a GNURadio "constellation modulator" to simulate QPSK as is done in the excellent [[Guided_Tutorial_PSK_DemodulationGuided Tutorial on PSK Demodulation]].  
[[File:IQ_complex_tutorial_QPSK.pngthumb600pxQPSK modulator]]  
For the present tutorial we will simulate a QPSK without Nyquist filter in order to get phase states which can be simply displayed on a constellation sink. This is not possible with constellation modulator. Our QPSK modulator (complex representation) is build taking into account that the complex signal exhibit 4 different values, its obvious that both ''i(t)'' and ''q(t)'' have only 2 states so they are binary symmetric NRZ line codes:  
: <math>i(t), q(t) \in \{+1, 1\}</math>  
Flowgraph [[IQ_tutorial_QPSK.grc]] generates 2 sequences of bits, interpolates them to get 2 binary symmetric NRZ line codes. The NRZ signals are combined to create the complex equivalent baseband signal of the QPSK which can be transmitted to any SDR emitter.  
Simulate this flowgraph :  
* stop the QT GUI spectrum to observe that the complex baseband signal spectrum is no longer symmetric as expected for complex signals.  
* use spectrum averaging to see that despite of the previous observation, the power spectral density (average of the magnitude spectrum) is symmetric around 0 (which correspond to ''F<sub>0</sub>'' for the modulated signal.  
* Disable the interpolating filters and enable both root raised cosine filter (the filter used in every QPSK emitter). This yields the real spectrum of a QPSK.  
== Equivalent baseband scheme ==  
This section is not yet ready... Work in progress !!  
This diagram sketch a classical Emitter/Receiver (Tx/Rx) transmission including channel noise, and its equivalent baseband representation which could be used for a GNURadio simulation.  
Note that complex baseband signal don't permit precise modelization of non linear effects such as intermodulation so they are not considered here. Every linear band limited system has an equivalent baseband as despicted below.  
=== Bandpass filter===  
* give the equivalent baseband representation of a bandpass filter  
* explain what is a complex filter and when a filter is complex  
=== Unsynchronized demodulator ===  
* give the equivalent baseband representation of an unsynchronized receiver (using results obtained above)  
=== Channel noise ===  
* give the equivalent baseband representation of noise source  
* explain what is a complex noise.  
== Tx/Rx QPSK : the carrier asynchronism problem ==  
This section is not yet ready... Work in progress !!  
The idea of this section is to explain what is carrier asynchronism, how it can be simulated in GNURadio, and the basic mechanism to compensate it in a receiver.  
=== GNURadio Channel model ===  
* explain how carrier asynchronism is simulated with the channel model  
* give a flowgraph illustrating the problem (with the QPSK used above)  
* give a basic solution to compensate carrier asynchronism by muttiplying by exp(2 j pi df t)  
=== GNURadio XLating filter ===  
* explain the Xlating mecanism, spectrum cyclingshifted  
* give a basic solution to compensate carrier asynchronism with a Xlating filter  
* note that this solution is basic and not sufficient in real hardware  
=== Asynchronism in real hardware ===  
* give a recorded example of unmodulated carrier emitted and received by a SDR Dongle  
* try to compensate asynchronism  
* result : we need more robust block to synchronize: see PSK guided tutorial ...  
==References==  
Further reading for complex equivalent baseband signal:  
* <span id="ancre1"[1]> [1] Proakis J., ''Digital Communication'', McGraw Hill Series in Electrical and Computer Engineering, Singapore, 1989</span>  
* <span id="ancre2"[2]> [2] Gallager R., ''Principles of digital communication'', Cambridge University Press Cambridge, UK, 2008</span>  
* <span id="ancre3"[3]> [3] Benedetto S. and Biglieri E., ''Principles of digital transmission : with wireless applications'', Kluwer Academic/Plenum Publishers, NY, 1999</span> 
Latest revision as of 14:58, 28 January 2021
This tutorial originates from discussions on discussgnuradio@gnu.org. We will explain why simulating digital communications requires equivalent baseband representation of signal which in fact are complex signals. For this unique reason, complex signals are essential in GNURadio.
This tutorial is intended for non specialist, it involves as less maths as possible and present most results with GNURadio flowgraph. Some examples involving simple modulation scheme used in HAM radio are presented. While introducing complex signal can be seen as increasing complexity, we will see that it drastically simplify studying impairment such as synchronization.
If you are searching for more detailed information please refer to corresponding literature such as references [1],[2],[3].
Some maths[edit]
This section summarize complex numbers properties used in this tutorial. More information can be found on complex number Wikipedia page200px.
A complex number is a number of the form a + jb, where a and b are real numbers, and j is an indeterminate satisfying j^{2}=1 (Mathematician prefer using i instead of j used by physicist and radio engineers). For example, z_{1}=2+3j is a complex number. The real part Re{z} of z_{1} is 2 and its imaginary part Im{z} is 3.
Complex numbers can be represented in the complex plane as vectors. The modulus or magnitude r of a complex number z = a + jb is
The phase φ of z mathematically referred to as the argument is the angle of the radius Oz with the positive real axis.
 (for a≠0)
Together, r and φ give another way of representing complex numbers, the polar form and the exponential form.
The exponential form is convenient for computing the multiplication of two complex numbers.
Following complex number have a unit magnitude r=1 :
A complex signal c(t) can be seen as two real signal i(t), q(t) combined to create a complex signal. It can also be represented by its time varying amplitude a(t) and its phase φ(t)
Why we need complex and IQ signals[edit]
GNURadio software is mainly used to design and study radio communications. Making high frequency transmission requires modulating a high frequency carrier at frequency F_{0}. The most common modulation for analog transmissions are Amplitude modulation (AM) Phase modulation (PM) and Frequency modulation (FM).
For analog AM, the modulated signal m(t) is simply the mathematical product of the carrier c(t) and the baseband signal to transmit a(t). The corresponding hardware is a mixer whose scheme and mathematical representation is a multiplier.
We call a(t) a baseband signal since its spectrum is in a low frequency range starting near 0 Hz (For example [020kHz] for an HIFI audio signal).
The spectrum of an AM modulated signal M(f) is the translation or the audio spectrum A(f) around ±F_{0} with A(f) being the entire spectrum of the modulating signal, using both positive and negative frequencies
N.B. Negative frequencies are often omitted in spectrum representation since, for real signal (a(t), m(t) are real) the power spectrum are symmetric around zero as will be detailed later.
Up to now we have been dealing with real signal. The need for complex signal appears in the next step. Simulation requires sampled signal. Sampling is the operation of observing a continuous signal and taking a finite number of sample at a given sampling rate f_{s} (i.e; one sample each 1/f_{s} second). simulator can only make calculations on a finite number of samples, they require sampled signal. Nyquist Sampling theorem states that the sampling rate must be greater than twice the maximum frequency F_{Max} to be able to reconstruct the original signal from the sampled signal.
For an HIFI audio signal, maximum audio frequency is closed to 20 kHz, sampling rate must be higher then 40 kHz (44.8 kHz is often used in computer sound card, 8 kHz is used for mobile phone since voice has a lower frequency range then HIFI audio).
For an AM signal modulated by an audio signal, maximum frequency of the modulated spectrum is . Direct sampling of such signal is not possible with conventional hardware such as low cost SDR dongle. If the carrier frequency is close to 1 GHz, the sampling rate should be at least 2 GHz. This is obviously too much then computer can handle (higher then some computer clock).
Flowgraph IQ_tutorial_AM_TX_real.grc illustrates amplitude modulation using only real blocks (excepted for bits source). As a consequence, the maximum carrier frequency is limited to several tens of kHz.
 study the modulator part which simply multiply the baseband signal and the sine carrier
 look at the influence of the carrier frequency on the modulated signal spectrum (carrier frequency must stay lower than half the sampling rate)
 look at the spectrum shape for sawtooth input and random bit sequence (QT Gui chooser and Selector)
 When transmitting random bits, you can desactivate the interpolating FIR Filter and replace it by a root raised cosine filter
Spectrum properties of signals[edit]
Amplitude spectrum is calculated using the Fourier Transform. It represents how the power is spread in the frequency domain. It allows for determining the signal bandwidth. Power Spectral Density or PSD correspond to the average magnitude of the Amplitude spectrum.
In this section we summarize some properties of the phase arg{X(f)} and magnitude X(f)). We first consider properties for continuous signal. Then we will investigate additional properties of sampled signal (those used in GNURadio).
Given a signal x(t)"" it amplitude/phase spectrum is denoted X(f)) which is a complex function given by :
 Failed to parse (syntax error): {\displaystyle X(f) =\int{x(t)e^{2j\pi ft}dt}
continuous real signal[edit]
Every real signal have a spectrum whose magnitude is symmetric and phase is antisymmetric.
continuous complex signal[edit]
The main difference with real signal is that:
 any complex signal having non null imaginary part exhibits a nonsymmetric spectrum.
 as a consequence, every nonsymmetric spectrum correspond to a complex signal
sampled signals[edit]
We consider a signal x(t)) and we note its sampled version x_{s}(t)) sampled at frequency F_{s}.
The spectrum X_{s}(f) of the sampled signal is a periodic function of period F_{s}.
So the sampled signal spectrum verify :
Generally the bandwidth of X(f)) is lower then F_{s}/2. The infinite sum defined above exhibit no aliasing (no superposition of patterns X(f), X(f+F_{s}) and X(fF_{s})) .In that case, as stated in the Nyquist theorem of sampling, the original spectrum/signal can be recovered by filtering the sampled signal.
When the maximum frequency of the signal spectrum do not respect Nyquist theorem, one should filter the signal with a low pass filter having a cuttoff frequency lower then F_{s}/2 before sampling: this correspond to the antialiasing filter used in every SDR hardware.
Complex enveloppe, equivalent baseband signal[edit]
Baseband signals have a spectrum at low frequency near 0 Hz. Audio, video and NRZ line code are baseband signals.
Bandpass signals have no energy near 0 Hz and a spectrum located near a high frequency (generally the carrier frequency). Analog and digital AM PM and FM modulated signals are bandpass signals.
A theorem ([1],[2],[3]) states that any high frequency bandpass signal having a limited bandwidth B can be represented by a baseband equivalent signal having the same bandwidth. This baseband equivalent signal also called the complex envelope is used in simulators since its allow to lower sampling rate as compare to directly sampling the bandpass signal.
The equivalent baseband representation help us for the simulation of bandpass signals. At this step we need some math. We will consider a carrier modulated in phase and/or amplitude (in the sake of simplicity, Frequency modulation is not considered but it can be related to phase modulation.). Such a modulated signal m(t) and it's complex representation is :
For modulated signal, the complex representation is obtained by replacing the cos function by an exponent function . For a more general definition see [1],[2],[3] . The real signal correspond to the real part of the complex signal .
One important property of spectrum is that it has only energy in the positive frequency range and verify.
where denotes the restriction of to the positive frequency range.
Let us now look at the complex envelope or equivalent baseband signal of bandpass signal defined by :
Multiplying a signal by correspond to a frequency translation of the spectrum so that we have:
So the spectrum of the complex enveloppe is a baseband signal whose spectrum has the same shape as . For this reason, knowing or is sufficient to reconstruct or .
IQ modulator and demodulator[edit]
Let us now come to hardware and SDR and first rewrite the equivalent baseband signal and the modulated signal m(t) :
The phase φ(t) of the modulated signal m(t), is identical to the phase of the complex signal c(t)=i(t)+jq(t). The equivalent baseband signal c(t) is represented in a complex plane also refeered to as the IQ plane. The resulting m(t) can be any modulated in AM, PM or even FM signal.
As a result, the modulated signal m(t) is the addition of :
 which is an AM modulated signal, the product of i(t) by a signal In phase with the carrier (i stand for In phase)
 which is an AM modulated signal, the product of q(t) by a signal in Quadrature with the carrier (q stand for Quadrature)
The corresponding hardware is called an IQ modulator. Every modern radio communication uses IQ modulator for emitting and IQ demodulator for receiving. The IQ demodulator is able to recover incoming i(t) and q(t). If the amplitude of the recovered carrier is 2, and if modulator and demodulator carrier are synchronous (same frequency and phase) the output of the IQ demodulator correspond to input i(t) and q(t).
In real hardware, carrier are not synchronous and the receiver must compensate any phase and frequency difference between emitter and receiver. This is done using some hardware and/or software such as polyphase clock sync, and Costas loop.
SDR Module such as USRP N320 block Diagram) and SDR Dongle (RTL2832) input and output are the 2 real signals i(t) and q(t) combined to form the complex signal i(t) + j q(t) which turns to be the equivalent baseband of the modulated emitted or received signal. These hardware are based on IQ modulator and IQ demodulator associated with mixers when intermediate frequency (IF) is used.
Some examples of EqBB signals[edit]
In order to get familiar with complex signal, let us consider some basic examples.
First, we suppose our emitter carrier is so that every equivalent baseband signal will be defined according to this reference.
complex envelope of a pure sine wave[edit]
We will consider a pure sine wave, close to the carrier having a Δf frequency shift and φ phase shift as compared to the carrier. After some math we get its complex equivalent signal.
The complex envelope of the carrier itself is found for Δf=0 and φ=0 which yields . We conclude that in a GNURadio flowgraph, the carrier is represented by a continuous components, a pure DC signal ; this may seemed counter intuitive. The spectrum is a single peak at f=0 which can be represented using the Dirac δ(f) function (or distribution) : . Shifting this spectrum of towards positive frequency we get the positive part of the carrier spectrum (a peak at ) : . The negative part of the spectrum is simply obtained by symmetry of the real part (a peak at ).
This can be simulated with GNURadio flowgraph IQ_tutorial_eq_bb.grc. The spectrum of our carrier is centered at 0 Hz. The Frequency sink has a feature to shift this spectrum around which is a parameter of the sink. In a simulation, it is not necessary to represent the negative part of the spectrum since m(t) being real, it spectrum is obviously symmetric.
We will now consider Δf ≠0 which simulate a signal not exactly synchronous to the carrier. This yieds
The complex enveloppe is rotating vector (you can simulate this with Δf=1 Hz giving a vector which rotate at 60 rpm or 1 turn per second) , its spectrum is a single peak at f=+Δf. This complex signal exhibits a non symmetric spectrum (no peak at f=Δf). Change Δf to 0.5 Hz, the vector now rotates counter clockwise at 30 rpm or 0.5 turn per second.
Exercice: Open flowgraph IQ_tutorial_eq_bb.grc. Parameter delta_f is set with an increment of 1/12, which correspond to 5 rotation per minute.
 For Δf=1/12=0.0833, what is the speed of rotation of the complex signal?
 What do you observe when Δf=1/12=0.0833 ?
 Slowly increase Δf to reach f_{s}/2 and observe the spectrum really has a single peak at Δf. Explain your observation when Δf>f_{s}/2'.
 Do the same for a negative Δf
 For Δf =f_{s} what is the equivelant baseband frequency. What is the carrier frequency ?
 Set Δf=0 and φ≠0. Discusss the simulated equivalent baseband signal.
AM mod demod example[edit]
This example will consider signal baseband signal a(t) modulating a carrier at F_{0} in AM, and its demodulation. As no phase modulation in used, φ(t)=0 and consequently q(t)=0.
AM modulation is a special case for which the equivalent baseband complex signal has a null imaginary part and is real. Considering the schematic diagram of an IQ modulator demodulator, when q(t)) is null the diagram is simplified (imaginary path is not used) yielding the well known AM modulation/demodulation scheme.
Remind that in GNURadio flowgraph :
 orange connections correspond to real signals (float numbers)
 blue connections correspond to complex signals (complex numbers)
Flowgraph IQ_tutorial_AM_TX_complex.grc contains two equivalent diagram for an AM modulation with a sawtooth input:
 the upper one uses real signals. It is the exact AM modulator uses at the beginning of this tutorial.
 sampling frequency is 200 kHz, 40 times the input rate which equal 5 kHz.
 allowing a maximum carrier frequency close to 100Khz
 the lower one uses an equivalent baseband representation.
 sampling frequency is 25 kHz, 5 times the input rate which equal 5 kHz.
 the sawtoooth correspond to identical generator in both modulator
 each blue input or output is the baseband equivalent of the corresponding signal in the upper AM modulator.
 the carrier frequency can be any value compatible with connected Hardware
 the carrier equivalent signal equal 1 (as stated in the previous section) so it has been disable and replaced by a complex constant
 the Hardware input is the complex equivalent baseband signal
 the carrier frequency is not needed nor used in complex blocks; excepted in the QT GUI spectrum to label the center frequency which is 0 but correspond to the F>sub>0.
Three blocks are unusefull and can be removed from the lower complex modulator:
 save the current flowgraph as IQ_tutorial_AM_TX_complex_2.grc.
 remove the complex multiplier, the carrier equivalent baseband (complex constant=1) and the carrier complex source (the disabled one). Reconnect complex to float and throttle blocks to obtain the flowgraph sketched on the right.
You can now run this flowgraph and compare signal and their spectrum in both modulator. Once again, these simulations suppose perfectly synchronous emitter and receiver carrier which is quite far from reality.
Further work : construct the AM demodulator flowgraph[edit]
Use the flowgraph IQ_tutorial_AM_TX_complex_2.grc that you created, add blocks to perform AM demodulation and to recover the input signal a(t) from the modulated signal. You have to use the equivalent baseband representation of the demodulator.
1st indication 
Remind and use the relation between a(t) and c(t)=i(t)+jq(t) given above. 
2nd indication 
An AM demodulator extract the amplitude (magnitude) of the modulated signal... 
Solution including filter 
IQ_tutorial_AM_TX_complex_3.grc
Running this flowgraph, demodulation is obtained taking the real part (imperfect solution), or the magnitude (good solution) of the complex signal.

QPSK example[edit]
QPSK digital signal exhibit four phase state .
And the baseband equivalent signal also exhibit 4 different values each one being used to code a 2 bits sequence 00 01 10 or 11 :
Normally, we would use a GNURadio "constellation modulator" to simulate QPSK as is done in the excellent Guided Tutorial on PSK Demodulation.
For the present tutorial we will simulate a QPSK without Nyquist filter in order to get phase states which can be simply displayed on a constellation sink. This is not possible with constellation modulator. Our QPSK modulator (complex representation) is build taking into account that the complex signal exhibit 4 different values, its obvious that both i(t) and q(t) have only 2 states so they are binary symmetric NRZ line codes:
Flowgraph IQ_tutorial_QPSK.grc generates 2 sequences of bits, interpolates them to get 2 binary symmetric NRZ line codes. The NRZ signals are combined to create the complex equivalent baseband signal of the QPSK which can be transmitted to any SDR emitter.
Simulate this flowgraph :
 stop the QT GUI spectrum to observe that the complex baseband signal spectrum is no longer symmetric as expected for complex signals.
 use spectrum averaging to see that despite of the previous observation, the power spectral density (average of the magnitude spectrum) is symmetric around 0 (which correspond to F_{0} for the modulated signal.
 Disable the interpolating filters and enable both root raised cosine filter (the filter used in every QPSK emitter). This yields the real spectrum of a QPSK.
Equivalent baseband scheme[edit]
This section is not yet ready... Work in progress !!
This diagram sketch a classical Emitter/Receiver (Tx/Rx) transmission including channel noise, and its equivalent baseband representation which could be used for a GNURadio simulation.
Note that complex baseband signal don't permit precise modelization of non linear effects such as intermodulation so they are not considered here. Every linear band limited system has an equivalent baseband as despicted below.
Bandpass filter[edit]
 give the equivalent baseband representation of a bandpass filter
 explain what is a complex filter and when a filter is complex
Unsynchronized demodulator[edit]
 give the equivalent baseband representation of an unsynchronized receiver (using results obtained above)
Channel noise[edit]
 give the equivalent baseband representation of noise source
 explain what is a complex noise.
Tx/Rx QPSK : the carrier asynchronism problem[edit]
This section is not yet ready... Work in progress !!
The idea of this section is to explain what is carrier asynchronism, how it can be simulated in GNURadio, and the basic mechanism to compensate it in a receiver.
GNURadio Channel model[edit]
 explain how carrier asynchronism is simulated with the channel model
 give a flowgraph illustrating the problem (with the QPSK used above)
 give a basic solution to compensate carrier asynchronism by muttiplying by exp(2 j pi df t)
GNURadio XLating filter[edit]
 explain the Xlating mecanism, spectrum cyclingshifted
 give a basic solution to compensate carrier asynchronism with a Xlating filter
 note that this solution is basic and not sufficient in real hardware
Asynchronism in real hardware[edit]
 give a recorded example of unmodulated carrier emitted and received by a SDR Dongle
 try to compensate asynchronism
 result : we need more robust block to synchronize: see PSK guided tutorial ...
References[edit]
Further reading for complex equivalent baseband signal:
 [1] Proakis J., Digital Communication, McGraw Hill Series in Electrical and Computer Engineering, Singapore, 1989
 [2] Gallager R., Principles of digital communication, Cambridge University Press Cambridge, UK, 2008
 [3] Benedetto S. and Biglieri E., Principles of digital transmission : with wireless applications, Kluwer Academic/Plenum Publishers, NY, 1999