[FREE PDF sample] Digital Modulations Using Matlab Build Simulation Models From Scratch black White Edition Viswanathan ebooks
[FREE PDF sample] Digital Modulations Using Matlab Build Simulation Models From Scratch black White Edition Viswanathan ebooks
com
https://ebookmeta.com/product/digital-modulations-using-
matlab-build-simulation-models-from-scratch-black-white-
edition-viswanathan/
OR CLICK HERE
DOWLOAD NOW
https://ebookmeta.com/product/digital-modulations-using-python-1st-
edition-mathuranathan-viswanathan/
ebookmeta.com
https://ebookmeta.com/product/build-a-blockchain-from-scratch-in-go-
lukac/
ebookmeta.com
https://ebookmeta.com/product/electrical-machine-fundamentals-with-
numerical-simulation-using-matlab-simulink-1st-edition-atif-iqbal/
ebookmeta.com
https://ebookmeta.com/product/the-world-jumper-2nd-edition-marie-
helene-lebeault/
ebookmeta.com
Dialogic Literary Argumentation in High School Language
Arts Classrooms A Social Perspective for Teaching Learning
and Reading Literature 1st Edition David Bloome
https://ebookmeta.com/product/dialogic-literary-argumentation-in-high-
school-language-arts-classrooms-a-social-perspective-for-teaching-
learning-and-reading-literature-1st-edition-david-bloome/
ebookmeta.com
https://ebookmeta.com/product/dig-in-12-easy-gardening-projects-using-
kitchen-scraps-1st-edition-kari-cornell-jennifer-s-larson/
ebookmeta.com
https://ebookmeta.com/product/why-budgets-matter-budget-policy-and-
american-politics-revised-and-updated-edition-dennis-s-ippolito/
ebookmeta.com
https://ebookmeta.com/product/midnight-ice-complete-series-kaitlyn-
davis/
ebookmeta.com
https://ebookmeta.com/product/all-about-dyspraxia-understanding-
developmental-coordination-disorder-kathy-hoopmann/
ebookmeta.com
International Health and Safety at Work Revision Guide For
the NEBOSH International General Certificate in
Occupational Health and Safety 3rd Edition Ed Ferrett
https://ebookmeta.com/product/international-health-and-safety-at-work-
revision-guide-for-the-nebosh-international-general-certificate-in-
occupational-health-and-safety-3rd-edition-ed-ferrett/
ebookmeta.com
Mathuranathan Viswanathan
April 2019
No part of this publication may be reproduced, distributed, or transmitted in any form or by any means,
including photocopying, recording, or other electronic or mechanical methods, without the prior written
permission of the author, except in the case of brief quotations embodied in critical reviews and certain other
noncommercial uses permitted by copyright law. For permission requests, write to
[email protected]
https://www.gaussianwaves.com
ISBN: 9781521493885
The author has used his best endeavours to ensure that the URLs for external websites referred in this book
are correct and active at the time of publishing. However, the author bears no responsibility for the referred
websites, and can make no guarantee that a site will remain live or that the content is or will remain
appropriate.
Dedicated to Advaith
Preface
There exist many textbooks that provide an in-depth treatment of various topics in digital modulation tech-
niques. Most of them underscore different theoretical aspects of design and performance analysis of digital
modulation techniques. Only a handful of books provide insight on how these techniques can be modeled and
simulated. Predominantly, such books utilize the sophisticated built-in functions or toolboxes that are already
available in software like Matlab. These built-in functions or toolboxes hide a lot of background computations
from the user thereby making it difficult, especially for a learner, to understand how certain techniques are
actually implemented inside those functions.
In this book, I intend to show how the theoretical aspects of a digital modulation-demodulation system can
be translated into simulation models, using elementary matrix operations in Matlab. Most of the simulation
models shown in this book, will not use any of the inbuilt communication toolbox functions. This provides
an opportunity for a practicing engineer to understand the basic implementation aspects of modeling various
building blocks of a digital modulation system. I intend the book to be used primarily by undergraduate and
graduate students in electrical engineering discipline, who wish to learn the basic implementation aspects of a
modulation demodulation technique. I assume that the reader has a fair understanding on the fundamentals of
programming in Matlab. Readers may consult other textbooks and documentations that cover those topics.
Theoretical aspects of digital modulation techniques will be kept brief. For each topic discussed, a short
theoretical background is provided along with the implementation details in the form of Matlab scripts. The
Matlab scripts carry inline comments intended to help the reader understand the flow of implementation.
As for the topics concerned, only the basic techniques of modulation and demodulation of various digital
modulation techniques are covered. Waveform simulation technique and the complex equivalent baseband
simulation model will be provided on a case-by-case basis. Performance simulations of well known digital
modulation techniques are also provided. Additionally, simulation and performance of receiver impairments
are also provided in a separate chapter.
Chapter 1 introduces some of the basic signal processing concepts that will be used throughout this book.
Concepts covered in this chapter include- signal generation techniques for generating well known test signals,
interpreting FFT results and extracting magnitude/phase information using FFT, computation of power and
energy of a signal, various methods to compute convolution of two signals. Chapter 2 covers the waveform
simulation technique for the following digital modulations: BPSK, differentially encoded BPSK, differential
BPSK, QPSK, offset QPSK, pi/4 QPSK, CPM and MSK, GMSK, FSK. Power spectral density (PSD) and per-
formance analysis for these techniques are also provided. Chapter 3 covers the complex baseband equivalent
models for techniques such as M-ary PAM, M-ary PSK, M-ary QAM and M-ary FSK modulations. Chapter
4 covers the performance simulation using the models built in Chapter 3. Chapter 5 covers the aspects of
using various linear equalizers in a simple communication link. Design and implementation of two important
types of equalizers namely the zero-forcing equalizer and the MMSE equalizer are covered. Chapter 6 covers
the topic of modeling receiver impairment, estimation and compensation for such impairments and a sample
i
ii Preface
performance simulation for such case. Reference texts are cited in square brackets within the text and the
references are provided at the end of each chapter.
The documentation for the Matlab scripts shown in this book, is available at the following URL: https:
//www.gaussianwaves.com/digital modulations matlab/doc
The scripts are thoroughly checked for integrity and they will execute without any error. If you face any
issues during execution, do not hesitate to provide feedback or contact me via the email provided below.
Alternatively, technical queries can be posted in the following forum: https://www.gaussianwaves.com/
discuss/
Finally, it is a pleasure to acknowledge the help I received while writing this book. I thank my wife Varsha
Mathuranathan for getting the manuscript edited so quickly and for her support during the review process that
greatly helped improve the manuscript. I also thank the numerous reviewers for their generous comments that
helped improve the contents of this book.
iii
iv Contents
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
Chapter 1
Essentials of Signal Processing
Abstract This chapter introduces some of the basic signal processing concepts that will be used throughout
this book. The goal is to enable the reader to appreciate the concepts and apply them in building a basic
communication system. Concepts covered include - signal generation techniques for generating well known
test signals like rectangular pulse, sine wave, square wave, chirp signal and gaussian pulse, interpreting FFT
results and extracting magnitude/phase information using FFT, computation of power and energy of a signal,
various methods to compute convolution of two signals, analytic signal and applications, FIR/IIR filters.
In experimental modeling and simulation, simple test inputs such as sinusoidal, rectangular pulse, gaussian
pulse, and chirp signals are widely used. These test signals act as stimuli for the simulation model and the
response of the model to the stimuli is of great interest in design verification.
In order to generate a sine wave, the first step is to fix the frequency f of the sine wave. For example, we wish
to generate a f = 10Hz sine wave whose minimum and maximum amplitudes are −1V and +1V respectively.
Given the frequency of the sinewave, the next step is to determine the sampling rate.
For baseband signals, the sampling is straight forward. By Nyquist Shannon sampling theorem, for faithful
reproduction of a continuous signal in discrete domain, one has to sample the signal at a rate fs higher than
at-least twice the maximum frequency fm contained in the signal (actually, it is twice the one-sided bandwidth
occupied by a real signal. For a baseband signal bandwidth (0 to fm ) and maximum frequency fm in a given
band are equivalent).
Matlab is a software that processes everything in digital. In order to obtain a smooth sine wave, the sam-
pling rate must be far higher than the prescribed minimum required sampling rate which is at least twice the
frequency f - as per Nyquist-Shannon theorem. Hence we need to sample the input signal at a rate signifi-
cantly higher than what the Nyquist criterion dictates. Higher oversampling rate requires more memory for
signal storage. It is advisable to keep the oversampling factor to an acceptable value.
An oversampling factor of 30 is chosen in the following code snippet. This is to plot a smooth continuous-
like sine wave. Thus the sampling rate becomes fs = 30 × f = 30 × 10 = 300Hz. If a phase shift is desired for
the sine wave, specify it too. The resulting plot from the code snippet shown next, is given in Figure 1.1.
1
2 1 Essentials of Signal Processing
Program 1.1: sinusoidal signal.m: Simulate a sinusoidal signal with given sampling rate
f=10; %frequency of sine wave
overSampRate=30; %oversampling rate
fs=overSampRate*f; %sampling frequency
phase = 1/3*pi; %desired phase shift in radians
nCyl = 5; %to generate five cycles of sine wave
t=0:1/fs:nCyl*1/f-1/fs; %time base
Fig. 1.1: A 10Hz sinusoidal wave with 5 cycles and phase shift 1/3π radians
The most logical way of transmitting information across a communication channel is through a stream of
square pulse – a distinct pulse for ‘0’ and another for ‘1’. Digital signals are graphically represented as square
waves with certain symbol/bit period. Square waves are also used universally in switching circuits, as clock
signals synchronizing various blocks of digital circuits, as reference clock for a given system domain and so
on.
Square wave manifests itself as a wide range of harmonics in frequency domain and therefore can cause
electromagnetic interference. Square waves are periodic and contain odd harmonics when expanded as Fourier
Series (where as signals like saw-tooth and other real word signals contain harmonics at all integer frequen-
cies). Since a square wave literally expands to infinite number of odd harmonic terms in frequency domain,
approximation of square wave is another area of interest. The number of terms of its Fourier Series expansion,
taken for approximating the square wave is often seen as Gibbs phenomenon, which manifests as ringing effect
at the corners of the square wave in time domain.
1.1 Generating standard test signals 3
True square waves are a special class of rectangular waves with 50% duty cycle. Varying the duty cycle
of a rectangular wave leads to pulse width modulation, where the information is conveyed by changing the
duty-cycle of each transmitted rectangular wave. A true square wave can be simply generated by applying
signum function over a periodic function.
g(t) = sgn sin(2π f t) (1.1)
where f is the desired frequency of the square wave and the signum function is defined as
−1 i f x < 0,
sgn(x) = 0 i f x = 0, (1.2)
1 if x > 0
Program 1.2: square wave.m: Generate a square wave with given sampling rate
f=10; %frequency of sine wave in Hz
overSampRate=30; %oversampling rate
fs=overSampRate*f; %sampling frequency
nCyl = 5; %to generate five cycles of square wave
t=0:1/fs:nCyl*1/f-1/fs; %time base
g = sign(sin(2*pi*f*t));
%g=square(2*pi*f*t,50);%inbuilt fn:(signal proc toolbox)
plot(t,g); title(['Square Wave f=', num2str(f), 'Hz']);
Fig. 1.2: A 10Hz square wave with 5 cycles and 50 − 50 duty cycle
4 1 Essentials of Signal Processing
where,
1
1
i f |t| < 2
1 1
rect(t) = 2 i f |t| = 2
(1.4)
1
0 i f |t| >
2
The following code simulates a rectangular pulse with desired pulse width and the resulting plot is shown
in Figure 1.3.
Program 1.3: rectangular pulse.m: Generating a rectangular pulse with desired pulse width
fs=500; %sampling frequency
T=0.2; %width of the rectangule pulse in seconds
t=-0.5:1/fs:0.5; %time base
g=(t >-T/2) .* (t<T/2) + 0.5*(t==T/2) + 0.5*(t==-T/2);
%g=rectpuls(t,T); %using inbuilt function (signal proc toolbox)
plot(t,g);title(['Rectangular Pulse width=', num2str(T),'s']);
In digital communications, Gaussian Filters are employed in Gaussian Minimum Shift Keying - GMSK (see
section 2.11) and Gaussian Frequency Shift Keying (GFSK). Two dimensional Gaussian Filters are used in
1.1 Generating standard test signals 5
Image processing to produce Gaussian blurs. The impulse response of a Gaussian Filter is written as a Gaussian
function as follows
2
1 − t
g(t) = √ e 2σ 2 (1.5)
2πσ
The following code generates a Gaussian Pulse with σ = 0.1s. The resulting plot is given in Figure 1.4
Program 1.4: gaussian pulse.m: Generating a Gaussian pulse with desired pulse width
fs=80; %sampling frequency
sigma=0.1;%standard deviation
t=-0.5:1/fs:0.5; %time base
g=1/(sqrt(2*pi)*sigma)*(exp(-t.ˆ2/(2*sigmaˆ2)));
plot(t,g); title(['Gaussian Pulse \sigma=', num2str(sigma),'s']);
All the signals discussed so far do not change in frequency over time. Obtaining a signal with time-varying
frequency is of main focus here. A signal that varies in frequency over time is called chirp. The frequency of
the chirp signal can vary from low to high frequency (up-chirp) or from high to low frequency (low-chirp).
Chirp signals are encountered in many applications ranging from radar, sonar, spread spectrum, optical
communication, image processing, doppler effect, motion of a pendulum, as gravitation waves, manifestation
as Frequency Modulation (FM), echo location etc.
A linear chirp signal sweeps the frequency from low to high frequency (or vice-versa) linearly. One ap-
proach to generate a chirp signal is to concatenate a series of segments of sine waves each with increasing(or
decreasing) frequency in order. This method introduces discontinuities in the chirp signal due to the mismatch
in the phases of each such segments. Modifying the equation of a sinusoid to generate a chirp signal is a better
approach.
6 1 Essentials of Signal Processing
The equation for generating a sinusoidal (cosine here) signal with amplitude A, angular frequency ω0 and
initial phase φ is
x(t) = A cos(ω0t + φ ) (1.6)
This can be written as a function of instantaneous phase
where θ (t) = ω0 (t) + φ is the instantaneous phase of the sinusoid and it is linear in time. The time derivative
of instantaneous phase θ (t), is equal to the angular frequency ω of the sinusoid.
d
ω(t) = θ (t) (1.8)
dt
Instead of having the phase linear in time, let’s change the phase to quadratic form and thus render it non-linear.
For some constant α,
θ (t) = 2παt 2 + 2π f0t + φ (1.9)
The first derivative of the phase is the instantaneous angular frequency as given by
d
ωi (t) = θ (t) = 4παt + 2π f0 (1.10)
dt
Hence, the time-varying frequency in Hz is given by
In the above equation, the frequency is no longer a constant, rather it is of time-varying nature with initial
frequency given by f0 . Thus, from the above equation, given a time duration T , the rate of change of frequency
is given by
f1 − f0
k = 2α = (1.12)
T
where, f0 is the starting frequency of the sweep, f1 is the frequency at the end of the duration T . Substituting
equations 1.11 and 1.12 in 1.10,
d
ωi (t) = θ (t) = 2π (kt + f0 ) (1.13)
dt
From equations 1.8 and 1.13
Z
θ (t) = ωi (t) dt
!
t2
Z
= 2π (kt + f0 ) dt = 2π k + f0t + φ0
2
!
t2
k
= 2π k + f0t + φ0 = 2π t + f 0 t + φ0 (1.14)
2 2
where, φ0 is a constant which will act as the initial phase of the sweep. Thus the modified equation for gener-
ating a chirp signal is given by
x(t) = A cos 2π f (t) t + φ0 (1.15)
where, the time-varying frequency function is given by
k
f (t) = t + f0 (1.16)
2
1.2 Interpreting FFT results - complex DFT, frequency bins and FFTShift 7
A chirp signal can be generated without using the inbuilt chirp function in Matlab’s signal processing
toolbox. This is done by implementing a function that utilized equations 1.12, 1.15 and 1.16. The implemented
function is shown next.
The implemented function accepts five arguments to generate a chirp signal: t - the discrete time base for
generating the chirp, f0 - the initial frequency of the sweep, f1 - the frequency at time t1 and φ0 - the initial
phase of the chirp which is an optional argument. If the initial phase is not supplied to the function, it assumes
the initial phase to be zero.
The following test script utilizes the above function and generates a chirp with starting frequency f0 = 1Hz
at the start of the time base and f1 = 25Hz at t1 = 1s which is the end of the time base. From the PSD plot, it
can be ascertained that the signal energy is concentrated only upto 25Hz. The resulting plot is shown in Figure
1.5.
1.2 Interpreting FFT results - complex DFT, frequency bins and FFTShift
Often, one is confronted with the problem of converting a time domain signal to frequency domain and vice-
versa. Fourier Transform is an excellent tool to achieve this conversion and is ubiquitously used in many
applications. In signal processing , a time domain signal can be continuous or discrete and it can be aperiodic
or periodic. This gives rise to four types of Fourier transforms as listed in Table 1.1.
From Table 1.1, we note that when the signal is discrete in one domain, it will be periodic in other domain.
Similarly, if the signal is continuous in one domain, it will be aperiodic (non-periodic) in another domain.
For simplicity, lets not venture into the specific equations for each of the transforms above. We will limit
our discussion to DFT, that is widely available as part of software packages like Matlab, Scipy(python) etc..,
however we can approximate other transforms using DFT.
8 1 Essentials of Signal Processing
Chirp Signal
For each of the listed transforms above, there exist a real version and complex version. The real version of the
transform, takes in a real numbers and gives two sets of real frequency domain points - one set representing
coefficients over cosine basis function and the other set representing the coefficient over sine basis function.
The complex version of the transforms represent positive and negative frequencies in a single array. The
complex versions are flexible that it can process both complex valued signals and real valued signals. Figure
1.6 captures the difference between real DFT and complex DFT.
Consider the case of N-point real DFT , it takes in N samples of real-valued time domain waveform x[n] and
gives two arrays of length N/2 + 1 each set projected on cosine and sine functions respectively.
2 N−1
2πkn
Xre [k] = ∑ x[n]cos
N n=0 N
2 N−1
2πkn
Xim [k] = − ∑ x[n]sin (1.17)
N n=0 N
1.2 Interpreting FFT results - complex DFT, frequency bins and FFTShift 9
Here, the time domain index n runs from 0 → N, the frequency domain index k runs from 0 → N/2 The
real-valued time domain signal x[n] can be synthesized from the real DFT pairs as
N/2
2πkn 2πkn
x[n] = ∑ Xre [K]cos − Xim [K]sin (1.18)
k=0 N N
Caveat: When using the synthesis equation, the values Xre [0] and Xre [N/2] must be divided by two. This
problem is due to the fact that we restrict the analysis to real-values only. These type of problems can be
avoided by using complex version of DFT.
Consider the case of N-point complex DFT, it takes in N samples of complex-valued time domain waveform
x[n] and produces an array X[k] of length N.
1 N−1
X[k] = ∑ x[n]e− j2πkn/N
N n=0
(1.19)
• Next N/2 − 1 terms are negative frequency components (note: negative frequency components are the
phasors rotating in opposite direction, they can be optionally omitted depending on the application)
The corresponding synthesis equation (reconstruct x[n] from frequency domain samples X[k]) is
N−1
x[n] = ∑ X[k]e j2πkn/N (1.20)
k=0
From these equations we can see that the real DFT is computed by projecting the signal on cosine and sine
basis functions. However, the complex DFT projects the input signal on exponential basis functions (Euler’s
formula - eiθ = cosθ + isinθ connects these two concepts).
When the input signal in the time domain is real valued, the complex DFT zero-fills the imaginary part
during computation (That’s its flexibility and avoids the caveat needed for real DFT). Figure 1.7 shows how to
interpret the raw FFT results in Matlab that computes complex DFT. The specifics will be discussed next with
an example.
The FFT function in Matlab is an algorithm published in 1965 by J.W.Cooley and J.W.Tuckey for efficiently
calculating the DFT [1]. It exploits the special structure of DFT when the signal length is a power of 2, when
this happens, the computation complexity is significantly reduced. FFT length is generally considered as power
of 2 - this is called radix − 2 FFT which exploits the twiddle factors. The FFT length can be odd as used in
this particular FFT implementation - Prime-factor FFT algorithm [2] [3] where the FFT length factors into two
co-primes.
FFT is widely available in software packages like Matlab, Scipy etc.., FFT in Matlab/Scipy implements
the complex version of DFT. Matlab’s FFT implementation computes the complex DFT that is very similar
to above equations except for the scaling factor. For comparison, the Matlab’s FFT implementation computes
the complex DFT and its inverse as
1.2 Interpreting FFT results - complex DFT, frequency bins and FFTShift 11
N−1
X[k] = ∑ x[n]e− j2πkn/N
n=0
N−1
1
x[n] =
N ∑ X[k]e j2πkn/N (1.21)
k=0
The Matlab commands that implement the above equations are FFT and IFFT respectively. The correspond-
ing syntax is as follows
X = fft(x,N) %compute X[k]
x = ifft(X,N) %compute x[n]
Let’s assume that the x[n] is the time domain cosine signal of frequency fc = 10 Hz that is sampled at a
frequency fs = 32 ∗ f c for representing it in the computer memory (Figure 1.8).
x[n]=cos(2 π 10 t)
1
x[n]
-1
0 0.5 1 1.5 2
t=nTs
Let’s consider taking a N = 256 point FFT, which is the 8th power of 2.
Note: The FFT length should be sufficient to cover the entire length of the input signal. If N is less than
the length of the input signal, the input signal will be truncated when computing the FFT. In our case, the
cosine wave is of 2 seconds duration and it will have 640 points (a 10Hz frequency wave sampled at 32 times
oversampling factor will have 2 × 32 × 10 = 640 samples in 2 seconds of the record). Since our input signal is
periodic, we can safely use N = 256 point FFT, anyways the FFT will extend the signal when computing the
FFT. Due to Matlab’s index starting at 1, the DC component of the FFT decomposition is present at index 1.
>>X(1)
1.1762e-14 (approximately equal to zero)
That’s pretty easy. Note that the index for the raw FFT are integers from 1 → N. We need to process it to
convert these integers to frequencies. That is where the sampling frequency counts. Each point/bin in the FFT
output array is spaced by the frequency resolution ∆ f , that is calculated as
fs
∆f = (1.22)
N
where, fs is the sampling frequency and N is the FFT size that is considered. Thus, for our example, each point
in the array is spaced by the frequency resolution
fs 32 ∗ fc 320
∆f = = = = 1.25Hz (1.23)
N 256 256
The 10Hz cosine signal will register a spike at the 8th sample (10/1.25=8) - located at index 9 in Figure 1.9.
>> abs(X(8:10)) %display samples 7 to 9
ans = 0.0000 128.0000 0.0000
Therefore, from the frequency resolution, the entire frequency axis can be computed as
Now, plot the absolute value of the FFT against frequencies - the resulting plot is shown in the Figure 1.9.
After the frequency axis is properly transformed with respect to the sampling frequency, we note that the
cosine signal has registered a spike at 10Hz. In addition to that, it has also registered a spike at 256 − 8 = 248th
sample that belongs to negative frequency portion. Since we know the nature of the signal, we can optionally
ignore the negative frequencies. The sample at the Nyquist frequency ( fs /2) mark the boundary between the
positive and negative frequencies.
>> nyquistIndex=N/2+1;
>> X(nyquistIndex-2:nyquistIndex+2).'
1.2 Interpreting FFT results - complex DFT, frequency bins and FFTShift 13
ans =
1.0e-13 *
-0.2428 + 0.0404i
-0.1897 + 0.0999i
-0.3784
-0.1897 - 0.0999i
-0.2428 - 0.0404i
Note that the complex numbers surrounding the Nyquist index are complex conjugates and they represent
positive and negative frequencies respectively.
150
|X(k)|
100 X= 8 X= 248
Y= 128 Y= 128
50
0
0 50 100 150 200 250
k
100 X= 10 X= 310
|X(f)|
Y= 128 Y= 128
50
0
0 50 100 150 200 250 300
frequencies (f)
Fig. 1.9: Magnitude response from FFT plotted against - sample index (top) and computed frequencies (bot-
tom)
1.2.4 FFTShift
From Figure 1.9, we see that the frequency axis starts with DC, followed by positive frequency terms which
is in turn followed by the negative frequency terms. To introduce proper order in the x-axis, one can use
FFTshift function Matlab, which arranges the frequencies in order: negative frequencies → DC → positive
frequencies. The fftshift function need to be carefully used when N is odd.
For even N, the original order returned by FFT is as follows (note: here, all indices corresponds to Matlab’s
index)
• X[1] represents DC frequency component
• X[2] to X[N/2] terms are positive frequency components
• X[N/2 + 1] is the Nyquist frequency (Fs /2) that is common to both positive and negative frequencies. We
will consider it as part of negative frequencies to have the same equivalence with the fftshift function
• X[N/2 + 1] to X[N] terms are considered as negative frequency components
14 1 Essentials of Signal Processing
FFTshift shifts the DC component to the center of the spectrum. It is important to remember that the Nyquist
frequency at the (N/2+1)th Matlab index is common to both positive and negative frequency sides. FFTshift
command puts the Nyquist frequency in the negative frequency side. This is captured in the Figure 1.10.
The following code snippet, computes the fftshift using both the manual method and using the Matlab’s
in-built command. The results are plotted by superimposing them on each other. The plot in Figure 1.11 shows
that both the manual method and fftshift method are in good agreement. Comparing the bottom figures in the
Figure 1.9 and Figure 1.11, we see that the ordered frequency axis is more meaningful to interpret.
subplot(2,1,2);stem(f,abs(X1)); stem(f,abs(X2),'r')
xlabel('frequencies (f)'); ylabel('|X(f)|');%frequencies on x-axis
100 X= −8 X= 8
|X(k)|
Y= 128 Y= 128
50
0
−100 −50 0 50 100
k
150
|X(f)|
100 X= −10 X= 10
Y= 128 Y= 128
50
0
−150 −100 −50 0 50 100 150
frequencies (f)
Fig. 1.11: Magnitude response of FFT result after applying FFTShift : plotted against sample index (top) and
against computed frequencies (bottom)
1.2.5 IFFTShift
One can undo the effect of fftshift by employing ifftshift function. The ifftshift function restores the raw
frequency order. If the FFT output is ordered using fftshift function, then one must restore the frequency
components back to original order before taking IFFT. Following statements are equivalent.
When N is odd and for an arbitrary sequence, the fftshift and ifftshift functions will produce different
results. However, when they are used in tandem, it restores the original sequence.
>> x=[0,1,2,3,4,5,6,7,8]
0 1 2 3 4 5 6 7 8
>> fftshift(x)
5 6 7 8 0 1 2 3 4
>> ifftshift(x)
4 5 6 7 8 0 1 2 3
>> ifftshift(fftshift(x))
0 1 2 3 4 5 6 7 8
>> fftshift(ifftshift(x))
0 1 2 3 4 5 6 7 8
When N is even and for an arbitrary sequence, the fftshift and ifftshift functions will produce the same
result. When they are used in tandem, it restores the original sequence.
>> x=[0,1,2,3,4,5,6,7]
0 1 2 3 4 5 6 7
>> fftshift(x)
4 5 6 7 0 1 2 3
>> ifftshift(x)
4 5 6 7 0 1 2 3
>> ifftshift(fftshift(x))
0 1 2 3 4 5 6 7
>> fftshift(ifftshift(x))
0 1 2 3 4 5 6 7
For the discussion here, lets take an arbitrary cosine function of the form x(t) = Acos (2π fct + φ ) and proceed
step by step as follows
• Represent the signal x(t) in computer (discrete-time) and plot the signal (time domain)
• Represent the signal in frequency domain using FFT (X[k])
• Extract amplitude and phase information from the FFT result
• Reconstruct the time domain signal from the frequency domain samples
Consider a cosine signal of amplitude A = 0.5, frequency fc = 10Hz and phase φ = π/6 radians (or 30◦ )
x(t) = 0.5 cos 2π10t + π/6 (1.26)
In order to represent the continuous time signal x(t) in computer memory (Figure 1.12), we need to sample the
signal at sufficiently high rate (according to Nyquist sampling theorem). I have chosen a oversampling factor
1.3 Obtaining magnitude and phase information from FFT 17
of 32 so that the sampling frequency will be fs = 32 × fc , and that gives 640 samples in a 2 seconds duration
of the waveform record.
-0.5
0 0.5 1 1.5 2
time (t seconds)
Let’s represent the signal in frequency domain using the FFT function. The FFT function computes N-point
complex DFT. The length of the transformation N should cover the signal of interest otherwise we will some
loose valuable information in the conversion process to frequency domain. However, we can choose a reason-
able length if we know about the nature of the signal. For example, the cosine signal of our interest is periodic
in nature and is of length 640 samples (for 2 seconds duration signal). We can simply use a lower number
N = 256 for computing the FFT. In this case, only the first 256 time domain samples will be considered for
taking FFT. However, we do not need to worry about loss of any valuable information, as the 256 samples will
have sufficient number of cycles to extract the frequency of the signal.
In the code above, fftshift is used only for obtaining a nice double-sided frequency spectrum that delin-
eates negative frequencies and positive frequencies in order. This transformation is not necessary. A scaling
factor 1/N was used to account for the difference between the FFT implementation in Matlab and the text
definition of complex DFT as given in equation 1.19.
18 1 Essentials of Signal Processing
The FFT function computes the complex DFT and the hence the results in a sequence of complex numbers of
form Xre + jXim . The amplitude spectrum is obtained
q
2
|X[k]| = Xre2 + Xim (1.27)
For obtaining a double-sided plot, the ordered frequency axis, obtained using fftshift, is computed based
on the sampling frequency and the amplitude spectrum is plotted (Figure 1.13).
Amplitude spectrum
0.25
0.2
|X(k)|
0.15
0.1
0.05 f (Hz)
0
-30 -20 -10 0 10 20 30
Extracting the correct phase spectrum is a tricky business. I will show you why it is so. The phase of the
spectral components are computed as
Xim
∠X[k] = tan−1 (1.28)
Xre
The equation 1.28 looks naive, but one should be careful when computing the inverse tangents using com-
puters. The obvious choice for implementation seems to be the atan function in Matlab. However, usage of
atan function will prove disastrous unless additional precautions are taken. The atan function computes the
inverse tangent over two quadrants only, i.e, it will return values only in the [−π/2, π/2] interval. Therefore,
the phase need to be unwrapped properly. We can simply fix this issue by computing the inverse tangent over
all the four quadrants using the atan2(Ximg , Xre ) function. Let’s compute and plot the phase information using
atan2 function and see how the phase spectrum looks.
1.3 Obtaining magnitude and phase information from FFT 19
Program 1.15: Extracting phase information from the FFT result using atan2 function
phase=atan2(imag(X),real(X))*180/pi; %phase information
plot(f,phase); %phase vs frequencies
100
X[k]
-100
f (Hz)
-200
-150 -100 -50 0 50 100 150
Fig. 1.14: Extracted phase information from the FFT result - phase spectrum is noisy
The phase spectrum in Figure 1.14 is completely noisy, which is unexpected. The phase spectrum is noisy
due to fact that the inverse tangents are computed from the ratio of imaginary part to real part of the FFT
result. Even a small floating rounding off error will amplify the result and manifest incorrectly as useful phase
information [4]. To understand, print the first few samples from the FFT result and observe that they are
not absolute zeros (they are very small numbers in the order 10−16 . Computing inverse tangent will result in
incorrect results.
>> X(1:5)
ans =
1.0e-16 *
-0.7286 -0.3637 -0.2501i -0.4809 -0.1579i -0.3602 -0.5579i 0.0261 -0.495i
>> atan2(imag(X(1:5)),real(X(1:5)))
ans =
3.1416 -2.5391 -2.8244 -2.1441 -1.5181
The solution is to define a tolerance threshold and ignore all the computed phase values that are below the
threshold.
Program 1.16: Extracting phase information from FFT - using a tolerance threshold
X2=X;%store the FFT results in another array
%detect noise (very small numbers (eps)) and ignore them
threshold = max(abs(X))/10000; %tolerance threshold
X2(abs(X)<threshold)=0;%maskout values below the threshold
phase=atan2(imag(X2),real(X2))*180/pi; %phase information
stem(f,phase); %phase vs frequencies
The recomputed phase spectrum is plotted in Figure 1.15. The phase spectrum has correctly registered the
30◦ phase shift at the frequency f = 10Hz. The phase spectrum is anti-symmetric (φ = −30◦ at f = −10Hz
), which is expected for real-valued signals.
20 1 Essentials of Signal Processing
Phase spectrum
40
20
X[k]
-20
f (Hz)
-40
-30 -20 -10 0 10 20 30
Fig. 1.15: Extracted phase information from the FFT result - recomputed phase spectrum
1.3.3 Reconstructing the time domain signal from the frequency domain samples
Reconstruction of the time domain signal from the frequency domain sample is pretty straightforward. The
reconstructed signal, shown in Figure 1.16, has preserved the same initial phase shift and the frequency of the
original signal. Note: The length of the reconstructed signal is only 256 sample long ( 0.8 seconds duration),
this is because the size of FFT is considered as N = 256. Since the signal is periodic it is not a concern. For
more complicated signals, appropriate FFT length (better to use a value that is larger than the length of the
signal) need to be used.
reconstructed signal
0.5
x(t)
-0.5
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8
time (t seconds)
De beide dragers keken om naar Raffles, alsof zij diens verdere bevelen
wachtten.
Terwijl hij zijn wapen op hen gericht hield, begon hij nu met zachte, maar
niet minder bevelende stem:
„Gij hebt drie weken geleden den Schot Mc Allan van alles beroofd en hem
49,000 pond, in Engelsche banknoten van duizend pond, afgenomen. Gij
moet mij dat geld teruggeven.”
„Je liegt,” antwoordde Raffles bedaard en toen de oude hierop niets kon
antwoorden, vervolgde hij:
„Jullie hebt de keus, òf je geeft het geld terug, dan zal ik jullie met rust
laten en mij niet meer om je bekommeren, òf ge weigert, dan roep ik
onmiddellijk de politie op, nadat ik het je eerst, door middel van dit wapen,
onmogelijk heb gemaakt om te vluchten.”
„Behoort gijzelf niet tot de politie?” waagde de oude het nu, zeer verbaasd,
te vragen.
„Nu, vlug een beetje, ik wacht op antwoord,” beet hij hem toe.
„Goed,” antwoordde Raffles. „Jullie gaat vooruit, maar als je mij een poets
denkt te spelen, rekent er dan op, dat uw laatste oogenblik is
aangebroken.”
Raffles trad binnen en overzag met een enkelen blik het vertrek.
De oude ging naar een schrijftafel en wilde een der laden openen.
„Geen wapens?”
Hij beval den chauffeur in den meest verwijderden hoek van het vertrek te
gaan staan met opgeheven armen.
Nu naderde Raffles den oude en, terwijl hij hem den mond van het pistool
tegen een der slapen drukte, beval hij hem, de schrijftafel te openen.
„Open ze dan!”
Voor zijn oogen lag zijn eigen portefeuille, dezelfde, die hij aan boord van
de „Senegambia” aan Charly Brand had gegeven.
Raffles nam ze op en opende haar, zonder de beide mannen uit het oog te
verliezen.
„Waar is de rest van het geld?” vroeg Raffles, „maar spreek de waarheid!”
„Ik heb het gebruikt om dit huis te koopen, dat wij vroeger in huur
hadden.”
„En Tatiana?”
„En hij?” Raffles wees met zijn revolver naar den chauffeur.
Lord Lister was te wantrouwend van aard om zonder slag of stoot een
dergelijk sentimenteel verhaal te gelooven.
Anderzijds echter was, na alles wat hij hier had gezien, de schijn vóór den
ouden man.
Hij nam de portefeuille met de rest van het geld en stak dit alles bij zich.
„Als gij openhartig tegenover mij zijt, hebt gij niets van mij te vreezen,
zelfs al zou het ontbrekende geld niet weer voor den dag komen.
„Ik zal morgenmiddag met mijn vriend Mc Allan, denzelfden, dien gij drie
weken geleden geplunderd hebt, bij u komen en als gij mij kunt bewijzen,
dat uwe verhalen op waarheid gebaseerd zijn, wil ik u in meer dan een
opzicht van dienst zijn.
„Voorloopig vertrouw ik u nog niet. Gaat mij dus beiden voor en brengt mij
weer naar buiten. Als ik weg ben, moet gij Tatiana naar bed brengen. Zij
zal in den loop van den morgen vanzelf uit haar verdooving ontwaken.
Beide mannen liepen voor hem uit en na eenige minuten had Raffles het
huis in de avenue van het Bois de Boulogne verlaten.
Hij liep de donkere straten door en de gebeurtenissen van dien dag, vanaf
de ontmoeting in het Bois de Boulogne tot aan het dramatische einde
passeerden in zijn gedachten nog eens de revue.
Het raadselachtige gedrag van het jonge meisje was hem nu begrijpelijk.
Het verhaal van den ouden man voldoende om de wonderlijke houding van
Tatiana te verklaren. Maar zouden de woorden van Komartscheff waarheid
bevatten? [13]
Het viel Raffles niet moeilijk, er geloof aan te schenken. Maar hij hield er
niet van, alleen zijn gevoel te laten werken waar het zaken betrof, die
slechts konden worden opgehelderd door een logisch denkend verstand.
Toch doemde telkens weer de liefelijke verschijning van Tatiana voor hem
op, naast het beeld van ongekunsteld leed, dat de gedachte aan den
ouden Komartscheff in hem wakker riep en toen Raffles tegen drie uur in
den morgen zijn bed opzocht, hoopte hij van ganscher harte, dat het
resultaat van zijn onderzoek naar de bewoners der villa niet in tegenspraak
zou zijn met hun eigen mededeelingen.
[Inhoud]
VIERDE HOOFDSTUK.
IN DE CATACOMBEN.
Tatiana Komartscheff ontwaakte uit haar verdooving.
De zon stond hoog aan den hemel en haar stralen schenen op het bed,
waarop het jonge meisje met groote zorg door haar vader was neergelegd.
„Papa, wat is er gebeurd?” klonk het nu op angstigen toon van haar lippen.
De oude man stond op, sidderend en bleek naderde hij het bed zijner
dochter.
„Papa, laat ons vluchten, wij zullen elders de middelen vinden om ons
onderdrukt volk in zijn strijd tegen het tyrannieke juk te helpen en te
steunen.”
Hij bleef zwijgend bij de deur staan en zijn blik hing met slaafsche
bewondering aan de trekken van de schoone Tatiana.
Komartscheff had zijn verhaal gedaan en Tatiana, die zich in de kussens
had opgericht, vroeg:
„Ja,” antwoordde haar vader. „Hij zei, dat hij zijn vriend Mc. Allan, den
Schot, zou meebrengen.” [14]
„De arme man, die drie weken geleden in onze handen viel!” riep het jonge
meisje uit, terwijl een straal van vreugde haar gelaat verhelderde.
„De groote belangstelling van Tatiana voor dien knappen Schot leek mij
dadelijk een slecht voorteeken en het is zoo uitgekomen. Het lijkt er nu
zelfs op, alsof zij er zich op verheugt, hem weer te zullen zien. Als zij zulke
gedachten in zich omdraagt, zal de zaak van ons volk daaronder lijden.”
Tatiana wierp een blik vol minachting op den jongen man, en zonder
aarzelen sprak zij:
„Jij zoudt er natuurlijk niets tegen hebben, als ik de belangen van ons volk
aan jouw persoon opofferde, maar ik verzeker je, dat dit nooit zal
gebeuren.”
„Er is nu geen tijd om te twisten, laat ons liever overleggen, wat ons te
doen staat,” onderbrak Komartscheff het gesprek.
„Er valt niet veel te overleggen,” mompelde Andrej. „Als die twee zich
werkelijk hier wagen, zou het het beste zijn, hun voor eeuwig den mond te
snoeren.”
„Wij hebben geroofd en de bezittingen van anderen gebruikt voor ons doel,
maar ik weet, dat ik al mijn daden voor mijn Hoogsten Rechter kan
verantwoorden. Nimmer echter zullen deze handen, die zich uitstrekten
naar het geld van anderen, om het onzen onderdrukten broeders aan te
bieden, bevlekt worden met het bloed van onschuldige menschen!”
„Zij ligt nog in bed,” sprak Komartscheff, „maar als de heeren met ons
willen binnengaan,” en hij opende de deur van de slaapkamer van Tatiana.
De oogen van het jonge meisje vulden zich met tranen toen zij de beide
heeren zag, die bestemd waren geweest om haar slachtoffers te worden.
Heftig snikkend viel zij in de kussens terug.
Raffles was verbaasd bij het zien van haar ontroering, die zoo
ongekunsteld was, dat hij niet meer kon twijfelen aan de waarheid van
Komartscheffs verhaal.
Charly Brand was diep getroffen. Een gevoel van oneindig medelijden
maakte zich van hem meester en bedeesd trad hij naar het jonge meisje
toe.
„Ik bid u, wees kalm en droog uw tranen. Mijn vriend heeft mij de
opheldering, die uw vader hem gaf, medegedeeld, en ik geloof zonder
eenig voorbehoud aan de waarheid er van.”
Zij stak hem haar smalle, blanke hand toe, die hij eenigen tijd in de zijne
hield en met trillende lippen smeekte zij:
„Ik heb u reeds lang vergeven en mijn vriend en ik zijn hierheen gekomen,
niet om ons te wreken, maar om u te helpen.”
„Als eerste voorwaarde stel ik echter den eisch, dat uw dochter niet meer
gebruikt wordt voor zulke schandelijke dingen, die haar onwaardig zijn.”
Met een woedenden blik wendde Andrej zich tot den Amerikaan:
„Om welke reden maakt gij u bezorgd over het lot van deze dame?”
Een diepe blos kleurde bij die woorden de wangen van Tatiana en Charly
boog zich, als om de woorden van zijn vriend te bekrachtigen, over het
fijngevormde handje om er een langen kus op te drukken.
„Het huis, dat gij met het geld van mijn vriend hebt gekocht, wordt mijn
eigendom.
„Gij zult met uw dochter en uw neef de nog onbewoonde eerste étage van
de villa betrekken. Deze vertrekken gelijkvloers blijven ter beschikking van
mijn vriend en mij.”
„Ik moet natuurlijk elk uwer voorwaarden aannemen, maar zullen wij onze
zaken daarboven verder drijven?”
„Maar wij hebben geld noodig voor onze heilige zaak,” klaagde
Komartscheff.
„Ik denk, dat dit u aangenaam zal zijn, want gij loopt dan geen gevaar
meer, een menschenleven te verwoesten en de ziel van uw kind te
vergiftigen.”
Komartscheff keek vol innige dankbaarheid op naar den man, die hem als
een redder was verschenen.
„Laat ons deze vertrekken behouden, want alleen Tatiana en ik wonen hier.
Andrejs woning bevindt zich in een eenzaam gelegen huis in de Rue
Bayen, het is door een geheime onderaardsche gang met deze villa
verbonden.”
„Dat is interessant,” liet Raffles zich ontvallen, „daar moet ik meer van
weten.”
„Ik heb geen enkele reden, u iets te verbergen,” sprak Komartscheff, „ik
verzoek u, mij te volgen.”
Hij opende een deur, die van de slaapkamer toegang gaf tot een zijvertrek.
Raffles trad binnen en zag vol verbazing een groote ruime kamer, die geen
enkel meubel bevatte.
Alleen een kleine steendrukpers, een smeltoven, een zetkast en een zeer
primitieve, ruw houten plank aan den muur, waarop fleschjes en kleine
doosjes onordelijk door elkaar stonden, bevonden zich in deze ruimte, die
haar licht kreeg van een groot, nu echter door gordijnen gesloten raam.
[16]
In een hoek tegenover het venster bevond zich in schuine richting een met
rijk beeldhouwwerk versierde schoorsteen.
Verrast over de vreemde meubelen, die deze kamer bevatte, bleef Raffles
een oogenblik op den drempel staan.
Komartscheff wachtte zijn vragen niet af, maar begon dadelijk uit te
leggen:
„Hier is mijn laboratorium, ik ben scheikundige van beroep en hier in dit
vertrek vervaardig ik de bonbons, die Tatiana noodig heeft voor het
verdooven van onze slachtoffers. [17]
„Op deze kleine steendrukpers drukken wij vlugschriften, die van hier uit
met veel moeite in het Osmaansche Rijk worden binnengesmokkeld.”
„Hier, kijk!”
Komartscheff was naar den schoorsteen gegaan; door een druk op een
veer, die handig in het snijwerk was verborgen, schoof hij den
schoorsteenmantel als een deur op zijde. Hij wees Raffles een smallen
ingang, die nu zichtbaar was geworden.
Hij keek in de donkere opening en zag een trap, die naar beneden voerde,
maar waarvan het onderste gedeelte in de duisternis verloren ging.
„Breng licht,” beval hij Komartscheff, „wij zullen naar beneden gaan.”
In dit oogenblik verscheen Andrej op den drempel der deur, die naar de
slaapkamer leidde.
Met van woede verwrongen gelaat keek hij naar Raffles en met moeite
siste hij:
„Mijn woning zult gij met rust laten, de oude—” hij wees naar
Komartscheff—„mag zich door u laten overbluffen, ik niet.”
„Als woorden niet voldoende zijn, heb ik andere middelen voor u.”
Lord Lister begreep, dat hij zich hier in een der diepe schachten bevond,
welke nog heden ten dage als de overblijfselen der oude catacomben het
onderaardsche Parijs doorkruisen.
Langzaam bewogen de vier mannen zich voorwaarts bij het licht der
lantaarn.
Voordat hij begreep, wat deze van plan was, had Andrej zich tusschen hem
en Komartscheff geplaatst en terzelfder tijd weerklonk een slag. De jonge
man had de lantaarn op den grond geworpen, het licht doofde uit en een
ondoordringbare duisternis omgaf hen allen.
Dadelijk begreep Raffles den ernst van het oogenblik. Hij wilde snel zijn
revolver en electrische zaklantaarn te voorschijn halen, maar reeds voelde
hij zich door twee armen vastgegrepen en op den grond geslingerd.
Een sterke hand omklemde zijn hals en met dreigende stem klonk het hem
in de ooren:
Raffles herkende de stem van Charly Brand, die in de meening was, Andrej
te pakken te hebben.
Hij wilde Charly waarschuwen, maar tevergeefs trachtte hij een woord te
spreken; als in een schroef was zijn hals vastgeklemd.
Maar daar drong een zwakke lichtstraal door de duisternis en met groote
snelheid naderde Tatiana de groep. Zij hield een lantaarn in haar
linkerhand, die een schitterend licht verspreidde.
In hetzelfde oogenblik sloop Andrej naar Charly toe, die over Lord Lister
gebogen stond. Hij hield een blinkenden dolk in zijn opgeheven hand. (Zie
het titelblad.)
Een heesche lach kwam van de lippen van den [18]schurk en nog voordat
Charly op kon kijken, was de dolk in zijn zijde gedrongen.
Met een kreet wilde Charly opstaan, maar bewusteloos viel hij op Raffles
neer, die zich nu met inspanning van al zijn krachten van den grond
oprichtte.
Lord Lister overzag met een enkelen blik den toestand en begreep
onmiddellijk, wat hier gebeurd was.
Door een vuistslag neergeveld lag de oude man naast de lantaarn op den
grond. Vlak bij Raffles was Charly neergezonken en doodsbleek stond
Andrej tegen den muur, het bebloede wapen in de hand houdend.
Met een vloek wilde de schurk zich nu op Tatiana werpen, maar Raffles
was hem vóór. In zijn rechterhand het pistool geklemd houdend, riep hij
den jongen man toe:
„Terug, of ik schiet.”
Andrej wilde zich op zijn nieuwen vijand storten, maar terwijl hij zich
omdraaide, gleed zijn voet uit, hij viel en zijn eigen moordend wapen
drong hem in het hart.
Eerst nu zag Tatiana, dat Mc Allan gewond was. Met een kreet van schrik
trok zij de kleeren van de wond, waarna zij haar zakdoek gebruikte om het
bloed te stelpen.
Raffles, die wel zag, dat Komartscheff uit zijn bewusteloosheid ontwaakte,
schoof de bevende Tatiana op zijde.
„Laat dat, kindlief, ik zal onzen vriend naar de villa terugdragen. Ik hoop,
dat zijn wond ongevaarlijk is, help gij uw vader, die uw steun noodig
heeft.”
Met moeite beklom men de trap en terwijl de oude man uitgeput in een
stoel neerviel, legde Raffles met hulp van Tatiana den gewonden vriend op
het bed van het jonge meisje.
Een vluchtig onderzoek had hem ervan overtuigd, dat de wond inderdaad
van onschuldigen aard was. Vóór alles moest door een stevig verband
verder bloedverlies voorkomen worden.
Met vochtige oogen hoorde Tatiana’s vader naar Raffles’ verhaal over het
gebeurde in de onderaardsche gang.
Toen de oude geheel weer op zijn verhaal was gekomen, verzocht Raffles
hem, nu nogmaals den tocht te ondernemen naar de woning aan het
andere einde der gang.
Hij durfde met alle gerustheid zijn vriend aan de zorgen van het jonge
meisje toevertrouwen en zonder uitstel begaven de twee mannen zich
weer op weg.
Eindelijk, nadat het tweetal een weg van twee kilometer had afgelegd,
bleef de grijze gids plotseling staan.
Raffles zag bij het schijnsel der lantaarn de afgesleten treden van een
steenen trap, die niet zoo hoog was, als die, welke naar de villa leidde.
De zes smalle treden voerden naar een deur, welke op bijna onzichtbare
wijze in den muur was aangebracht en die nu door Komartscheff werd
geopend.
Het scheen een slaapvertrek te zijn, want in een der hoeken stond een
bed.
De smalle, ouderwetsche ramen zagen uit op een tuin. Dikke gordijnen, die
tot op den grond neerhingen, verhinderen om een blik naar binnen te
slaan.
Raffles trad naar een der vensters en opende het gordijn. Hij zag, dat het
vertrek zich gelijkvloers bevond en aan de andere zijde van den tuin
bemerkte hij een woonhuis van één verdieping, welks front waarschijnlijk
aan de straatzijde lag. De kamer, waarin hij zich bevond, behoorde tot een
afzonderlijk gelegen tuinhuis.
Deze heer Menuisier was het onderwerp der gesprekken van alle
babbelzieke vrouwen uit Ternes, zoo heette het stadsgedeelte, waarin deze
woning lag.
Hij oefende zijn woekerhandel reeds lang niet meer uit en leefde stil, maar
zijn onverzadiglijke gierigheid verhinderde hem, van zijn schatten te
genieten.
Hij leefde met zijn oude huishoudster, van wie men vertelde, dat zij
vroeger zijn beminde was geweest en was blij, dat hij een goed
betalenden huurder had gevonden voor zijn tuinhuis, van welks
onderaardschen uitgang hij geen vermoeden had.
Zonder Komartscheff hiervan iets te laten merken, begon hij met dezen
den terugtocht.
Eerst moest Charly weer op de been gebracht en het lijk van Andrej
verwijderd worden. Dit laatste kon het gemakkelijkst geschieden door hem
een graf te graven in den bodem van de onderaardsche gang.
Dit onaangename werk moest Raffles alleen op zich nemen, want Charly
lag hulpeloos op het ziekbed en op Komartscheff’s steun viel bij dit werk
niet te rekenen.
Toen de avond aanbrak, begon de groote onbekende zijn werk. Voorzien
van een houweel en spade ging hij naar beneden, naar de plek, waar het
gevecht had plaats gehad.
Het lijk van Andrej lag in een bloedplas, waarin zacht en spookachtig de
waterdroppels van het vochtige dak der gang neervielen! Zonder zijn
houweel noodig te hebben, had hij binnen een kwartier een gat van een
meter diep in den leemachtigen bodem gegraven. Hierin legde hij het lijk.
Hij legde zijn werktuigen op den grond, nam zijn lantaarn op en ging de
gang verder in, want hij wilde het wonderlijke tuinhuis nog eens aan zijn
onderzoekende blikken onderwerpen.
Spoedig had hij het eind der gang, waar het tuinhuis lag, bereikt.
Voorzichtig doofde hij het licht der lantaarn uit en opende de
geheimzinnige deur. Het zwakke licht, dat door de vensters binnendrong,
was hem voldoende.
Met een uitdrukking van voldoening liet hij zijn blikken door het vertrek
gaan. Het resultaat van dit nachtelijk onderzoek scheen zijn wenschen te
bevredigen; het plan, dat in hem was opgekomen, nam vastere vormen
aan.
Hij stak het licht in de lantaarn weer aan en terwijl zijn werkzaam brein
zich bezighield met het uitwerken zijner nieuwe plannen, begaf Raffles zich
weer naar de villa in de Avenue du Bois de Boulogne. [20]
[Inhoud]
VIJFDE HOOFDSTUK.
TATIANA.
De kamer, die tot dusverre als slaapvertrek van Tatiana had dienst gedaan,
had een groote verandering ondergaan.
Mc Allan had hier nu zijn intrek genomen om te herstellen van zijn wonde,
die gelukkig van ongevaarlijken aard bleek te zijn. De dolk was in zijn
vleesch gedrongen, zonder edele deelen te hebben geraakt, maar Charly
had veel bloedverlies geleden.
Tatiana had met behulp der huishoudster in haar eigen kamer alles in orde
gemaakt.
Het bed, waarop zij kort geleden zelf uit haar verdooving was ontwaakt,
had men vervangen door een divan. Hierop droeg zij, met inspanning van
al haar krachten, den gewonde, en toen Raffles met Komartscheff
terugkeerde, vond hij het meisje vol angst over zijn vriend gebogen, die, in
dekens gehuld en op zachte kussens neergevleid, nog steeds bewusteloos
was.
Hij zag niets van het geheimzinnige werk, dat Raffles verrichtte, evenmin
als de opofferende zorg van het blonde jonge meisje, dat dag en nacht
niet van zijn bed week. Hij merkte niet op, hoe een uitdrukking van
vreugde zich over haar lief gelaat verspreidde, als in zijn koortsvlagen de
naam „Tatiana” van zijn bleeke lippen vernomen werd.
Dit waren voor Tatiana Komartscheff oogenblikken van het hoogste geluk.
Zij begreep dan, dat de jonge man haar niet haatte of verachtte, dat hij
haar had vergeven, en zij verdubbelde nog haar zorgen voor den zieke.
Toen op zekeren dag Charly plotseling onrustiger dan anders was, klopte
het angstige meisje op de deur van de kamer, waarin de Amerikaan zich
bevond.
Een oogenblik bleef zij verbaasd staan, want er was zooveel in de kamer
veranderd, dat het haar opviel.
Zij deelde den Amerikaan den toestand van Mc Allan mede, en Raffles
haastte zich naar de legerstede van zijn vriend. Hij kwam al spoedig tot de
overtuiging, dat een zware droom den armen jongen onrustig maakte, en
schertsend sprak hij tot Tatiana, dat de zieke van zijn verpleegster
droomde.
Een diepe blos bedekte het gelaat van het meisje en zonder eenige
bedoeling, alleen om het gesprek een andere wending te geven, vroeg zij,
waarom de veranderingen in het aangrenzende vertrek waren
aangebracht.
„Mijn kind,” sprak hij, „vraag niet alles. Het is dikwijls gevaarlijk, te weten!”
Met een vriendelijken glimlach streelde hij haar wang en keerde daarna in
zijn kamer terug.
Ook Tatiana begaf zich weer naar haar plaats aan het ziekbed. De patiënt
scheen rustiger te zijn geworden.
Tatiana zat in den leunstoel, die naast den divan stond, waarop Mc Allan
lag. Haar blond hoofdje zonk achterover, vermoeid van het lange waken,
en de slaap sloot haar oogen.
Raffles, die even op den drempel was verschenen, had hoed en stok
opgenomen en was uitgegaan.
Patiënt en verpleegster sliepen. Het hoofd van den zieke schoof onrustig
op zijn kussen heen en weer en eindelijk opende Charly de oogen.
Verbaasd keek hij door het vertrek. Hij moest lang nadenken, voordat hij
zich kon herinneren, wat er was gebeurd. Weer doorleefde hij het
voorgevallene in de catacomben en nogmaals voelde hij het moordende
staal in zijn zijde dringen.
Daarna liet hem zijn geheugen in den steek, hij wist niet, wat er verder
met hem gebeurd was.
Plotseling viel zijn blik op het sluimerende meisje, dat naast den divan in
een stoel rustte.
Zij, die hem in zijn droomen had bijgestaan als een reddende engel, zij
was dus werkelijk in zijn nabijheid.
Hoe lang hij hier had gelegen wist hij niet, maar zij had bij hem gewaakt,
volhardend en trouw totdat de slaap haar had overvallen.
Een gevoel van innige dankbaarheid maakte zich van hem meester en vol
ontroering keek hij naar het sluimerende meisje.
Tatiana sliep niet rustig; zij droomde en twee dikke tranen rolden over haar
wangen.
„Tatiana!”
Zij ontwaakte als uit een bangen droom en haar verlegen blik viel op
Charly, die zich half had opgericht.
„Om Godswil, wat doet gij, gij moogt u nog niet bewegen!”
„Ik voel mij volkomen gezond. Mijn wond is zeker reeds genezen, maar gij
zijt bedroefd, gij hebt in den slaap geweend!”
Met een weemoedigen klank in haar stem antwoordde Tatiana:
„Ik u verachten!” Charly richtte zich weer op. „Ik [22]aanbid u, Tatiana, ik
ben het toeval dankbaar, dat mij in uw nabijheid voerde, ik dank Andrej
voor de verwonding, die hij mij toebracht, want gij hebt mij genezen.
Tatiana, hoe zou ik u kunnen verachten, ik, die u liefheb!”
„Ik ben kalm,” antwoordde zij met een glimlach. „Wilt gij naar mij
luisteren?”
[Inhoud]
ZESDE HOOFDSTUK.
DE GESCHIEDENIS VAN GRAAF KOMARTSCHEFF.
„Onze familie, dat wil zeggen die van mijn vader, is van Russische afkomst
en er bestonden reeds graven Komartscheff onder de regeering van Iwan
den Verschrikkelijke. Zij waren rijke schapenfokkers in de vlakten van
Ukraine.
„In den nacht verlieten zij hun woonplaats. Wat zij aan geldswaarde
bezaten, namen zij mee en na lang ronddolen vestigden zij zich op Turksch
gebied, in het tegenwoordige Bulgarije, waar zij veilig waren voor de
Russische wetten.
„Voor een paar duizend roebel kregen zij land van den Pascha, die als
gouverneur het district bestuurde.
„Mijn overgrootvader stierf en zijn zoon, die was getrouwd met de dochter
van een Bulgaarschen Wojwode, wiens bezitting aan de onze grensde,
nam het beheer der goederen over.
„Een jaar na den dood van mijn overgrootvader werd mijn vader geboren.
[23]
„De Pascha, die in Aitos resideerde—Elemer Pascha was reeds lang dood
en geen zijner opvolgers had zijn populariteit geërfd—haalde de schouders
op toen mijn vader hem het gebeurde verhaalde.
„Het volk mompelde, dat hij gemeene zaak maakte met de roovers en dat
in Stamboel de gunstelingen van den Sultan, die zelf van deze dingen niets
wist, benden samenstelden, om in de provincies te gaan plunderen.
„In onmachtige woede moest mijn vader zich in zijn lot schikken. Hij nam
het landgoed onder zijn beheer en zette het bedrijf verder voort.
„Hier woonde zijn beminde, de eenige dochter van een niet zeer
vermogend Oostenrijksch overste.
„In Weenen, ten huize van de ouders der bruid, werd het huwelijk gesloten
en mijn vader nam zijn jonge vrouw mee naar de kust van de Zwarte Zee.