Download as pdf or txt
Download as pdf or txt
You are on page 1of 70

Field Expedient SDR Introduction to

Software Defined Radio black and white


version 2nd Edition David Clark Paul
Clark
Visit to download the full and correct content document:
https://ebookmeta.com/product/field-expedient-sdr-introduction-to-software-defined-ra
dio-black-and-white-version-2nd-edition-david-clark-paul-clark/
More products digital (pdf, epub, mobi) instant
download maybe you interests ...

Field Expedient SDR Volume 2 Basic Analog Radio Paul


Clark

https://ebookmeta.com/product/field-expedient-sdr-volume-2-basic-
analog-radio-paul-clark/

Software-Defined Radio for Engineers Travis F Collins

https://ebookmeta.com/product/software-defined-radio-for-
engineers-travis-f-collins/

Software Defined Radio with Zynq UltraScale+ RFSoC


First Edition Louise Crockett

https://ebookmeta.com/product/software-defined-radio-with-zynq-
ultrascale-rfsoc-first-edition-louise-crockett/

Software Defined Radio: Theory and Practice (Artech


House Mobile Communications Library) 1st Edition
Reyland

https://ebookmeta.com/product/software-defined-radio-theory-and-
practice-artech-house-mobile-communications-library-1st-edition-
reyland/
Flora of The Central Wasatch and Adjacent Valleys A
Field Guide Stephen L Clark Editio ultima 27th Edition
Stephen L Clark

https://ebookmeta.com/product/flora-of-the-central-wasatch-and-
adjacent-valleys-a-field-guide-stephen-l-clark-editio-
ultima-27th-edition-stephen-l-clark/

The Anxiety and Worry Workbook : The Cognitive


Behavioral Solution. 2nd Edition David A. Clark

https://ebookmeta.com/product/the-anxiety-and-worry-workbook-the-
cognitive-behavioral-solution-2nd-edition-david-a-clark/

The Anxiety Worry Workbook 2nd ed The Cognitive


Behavioral Solution 2nd Edition David A. Clark

https://ebookmeta.com/product/the-anxiety-worry-workbook-2nd-ed-
the-cognitive-behavioral-solution-2nd-edition-david-a-clark/

Beginning Power BI 2nd Edition Dan Clark

https://ebookmeta.com/product/beginning-power-bi-2nd-edition-dan-
clark/

Fashion Merchandising Principles and Practice 2nd


Edition James Clark

https://ebookmeta.com/product/fashion-merchandising-principles-
and-practice-2nd-edition-james-clark/
Field Expedient SDR
Volume 3
Basic Digital Communications
Paul Clark
David Clark
Meadow Registry Press
Field Expedient SDR: Basic Digital Communications
Copyright © 2015 Meadow Registry, LLC
First Edition
R13
All rights reserved. No part of this book shall be reproduced, stored
in a retrieval system, or transmitted by any means, electronic,
mechanical, photocopying, recording, or otherwise, without the
written permission of the author. No patent liability is assumed with
respect to the use of the information contained herein. Although
every precaution has been taken in the preparation of this book, the
authors assume no responsibility for errors or omissions. Nor is any
liability assumed for damages resulting from the use of the
information contained herein.
This material and associated files can only be used by and for the
individual purchasing the material for private and research study
purposes and must not be copied or circulated. Under no
circumstances can the material be used for third party training or
commercial activities without written agreement from Meadow
Registry, LLC. Any unauthorized use of these materials will constitute
an infringement of copyright.
Warning and Disclaimer
Every effort has been made to make this book as complete and as
accurate as possible, but no warranty of fitness is implied. The
information is provided on an “as is” basis. The authors shall have
neither liability nor responsibility to any person or entity with respect
to any loss or damages arising from the information contained in this
book.

To:
MQ and LVP
Y and S and K
and our parents, who invested in love and education
Preface
Intended Audience
As we told you in the first volume of this series, you can’t have
“fun” without “fundamentals”. In that first book we introduced you to
gnuradio and then used it to work through some projects that
demonstrated foundational radio concepts. The second book then
delved much deeper into the practical usage of SDRs for analog
radio applications. This third book builds on the preceding two
volumes, adding digital radios to your toolbox. After laying a firm
foundation in books one and two, we think you’re ready.
If you haven’t read the first two volumes, that may not be a
problem if you have significant prior experience with gnuradio and
RF technology. If either of those topics is entirely unfamiliar to you,
then you should go back and start with the first book in the Field
Expedient SDR series. If you feel confident about the basics, but the
specific workings of amplitude and frequency modulation are a bit
fuzzy, it might be best if you brush up by working through the
examples in Volume 2 of the series.
Finally, please note that receiving radio data not meant for you
may be illegal. Transmitting power in many portions of the frequency
spectrum may also be illegal. Know the laws and regulations of your
area, and make sure you have the proper authorization and
permission before attempting some of the exercises contained in this
book.
General Layout of This Book Series
Volume 1 - Field Expedient SDR: Introduction to Software Defined
Radio explains complex but foundational radio concepts through a
series of projects that are easy to build and understand.
Volume 2 - Field Expedient SDR: Basic Analog Radio dives deeper
into SDR theory and operation while also focusing on the intensely
practical skills needed to make real-world radios work.
Volume 3 - Field Expedient SDR: Basic Digital Communications
covers the techniques used to transmit and receive digital data via
radio.
Volume 4 - Field Expedient SDR: Introduction to Reverse
Engineering explores the art and science of analyzing unknown
signals and then breaking them down to reveal the data within.
Where to Find the Files for This Book
To make your SDR learning experience as smooth as possible,
we’ve provided a number of project and input data files on our web
site at www.fieldxp.com. We recommend that you uncompress the
contents into a convenient location on your hard drive, because we
will be using the files frequently.
The contents of the compressed file are broken down by chapter,
so you can easily find the files you need as you work through the
material. We recommend that you build each project from scratch as
shown in the book’s text, but we included the finished projects as a
reference in case you run into trouble.
Each chapter will typically contain one or more completed project
files. We have also included some input data files, making it possible
to work through much of the material in this book without needing
access to any SDR hardware.
Recommended Hardware
You will need some kind of software defined radio hardware to
complete the exercises in this book. We recommend the HackRF
One, although you can use other types of SDR hardware. Because
this book has been written using the HackRF One as the expected
hardware, you will need to modify a few of the steps if you choose
to use another device.
While it may sound odd, we also recommend that you have an
external mouse with a middle button or clickable scroll wheel. This
will allow you to more easily access certain gnuradio functions.
A Note about Fonts
You’ll also notice that we use a number of different fonts and text
formats throughout the book. When you encounter the bold Courier
font, this indicates text that is typed into a Linux terminal or text
editor, such as:
mkdir sdr
or text typed into gnuradio-companion:
change the value of frequency to 880e3
The Courier font is also used to highlight items selected from user
interface menus:
for the Type property we select Float
We also reference the names of files that you can find in the
project folder associated with this course. We have underlined those
files names in the text, as in the following example:
... after you open the file simple_multiply.grc
Miscellaneous
This book relies heavily on screenshots to illustrate the various
projects we cover. The images in the book will also look slightly
different from what appears on your screen because you may be
using a different version of gnuradio and also because we enlarged
certain gnuradio display features for printing.
This book is written in a conversational tone, often including
phrases like “Remember when I told you...”. Although this book has
two authors, you will see that we use the term “I” rather than “we”
throughout the book. We believe this choice makes the text more
readable.
Table of Contents
Chapter 1 Introduction
How is Digital Different?
Wired vs. Wireless
How This Book is Structured
Recommended Hardware and Software
Things Covered and Not Covered
Chapter 2 Installing the Software
Installation
Binaries vs Source Code
Why Compile from Source Code?
Steps for Installing from Source Code
Obtain and Uncompress the Source Code
Extract (un-tar) and Configure Source Code
Compiling and Installing the Software
Installing gnuradio on Linux
Validating your gnuradio Installation
Chapter 3 On-Off Keying
What is OOK?
Building a Scanner
Building an OOK Receiver
Digital Baseband Waveforms
OOK Receiver Cleanup
Chapter 4 Complex Numbers and Why They Matter
Complex Numbers... Finally!
Building a Complex Number
Adding and Subtracting Complex Numbers
Multiplying Complex Numbers
Signals in the Complex Plane
Polar Plots
Magnitude
Phase
Chapter 5 OOK Revisited
OOK Transmitter
Testing the Whole Thing
ASK and the Meaning of Symbols
Chapter 6 Digital Baseband Structure
Baseband Again
Preambles
Payloads
A Short and Simple Detour into Python
Running Our Python Script
Manchester Encoding
PWM Encoding
CRC, Parity, and Error Checking
Digital Baseband Structure
Chapter 7 FSK
Shifting Frequency
Similarities and Differences
FSK Transmitter and Receiver Project
Optimizing the FSK Transmitter
Chapter 8 PSK
PSK Modulation
A Simple PSK System
Channel Models
Differential PSK
Reworking the Flowgraph for PSK
QPSK and Beyond
Chapter 9 Visualization Techniques for Digital Signals
Which Plot?
ASK and OOK
FSK
PSK
What If We Don’t Know?
Chapter 10 Conclusion
The Story Thus Far
The Road Ahead
Appendix
Index
1 Introduction
1.1 How is Digital Different?
When you think about digital RF, your first thoughts probably go to
WiFi or to your mobile device. While these are certainly very
common usages, digital modes also handle a host of less high-profile
operations. These include simple control devices such as garage
door openers, automobile key fobs, home ceiling fan controls, and
many more. They can also include systems that periodically send
small amounts of wireless data to communicate sensor readings or
system status. These systems include tire pressure monitor sensors,
home alarm sensors, automated power meters, home weather
stations, etc. Other technologies sit in between these very general
categories, such as Bluetooth, a technology that can be used for
control or for receiving data.
In this volume, you and I will be delving into the basics of digital
radios, building up from the simplest implementations and describing
more complex layers with each new project. By the time we finish,
you should have an idea of how to build simple receivers and
transmitters, as well as understand how basic digital transmissions
are structured.
We won’t focus on more complicated digital modes until a later
book, as we need to establish the basics first.
One word of caution. For this volume, I’m assuming that you’re
familiar with basic concepts of binary computing, such as bit
manipulation and hexadecimal numbers. If those concepts sound
new to you, you’ll want to spend a few minutes reading up online.
1.2 Wired vs. Wireless
There is one key point to everything we will cover in this book:
digital radios are all just a special case of the analog systems we’ve
studied in the last two volumes. For example, the 0s and 1s in many
wired digital systems are physically just 0 V or 3.3 V levels on a
given wire. It’s not physically impossible for that wire to have a 2.1 V
signal on it, but these systems are designed such that a 2.1 V signal
will not be placed on the wire if the system is functioning correctly.
In the same way, digital RF systems are designed such that a
small number of specific signal states represent digital values. There
are ways to represent digital bits using modes derived from AM, FM,
and PM. The key is to define a set of amplitudes, frequencies, or
phases that map to one or more digital bits. That may not make
complete sense yet, but we’ll flesh out the idea throughout this
book.
Our goal is to learn how the radio signals make the bits and then
how the bits make up usable data. Once we’ve got a handle on this,
we’ll understand the foundation of nearly every digital RF technology
out there. Even the more advanced modes, such as the 802.11
variants used for your WiFi, are built on the same basic concepts
we’ll discuss here. They just pile a lot of extra complexity on top of
the foundation.
1.3 How This Book is Structured
We will start this book with our usual software installation chapter.
Those of you who have been with me for Volumes 1 and 2 won’t
need this, but we will likely have a few readers for whom this
volume is their starting point.
We’ll then dive right into the world of digital radios by building a
scanner we can use to capture real-world signals. We’ll then
construct a flowgraph that receives signals modulated via On-Off
Keying (OOK), the simplest digital mode. By looking at real OOK
signals, we’ll also become familiar with how digital signals are put
together.
Before building an OOK transmitter, we’ll need to take a long-
awaited journey into the realm of complex numbers. We’ve put off
our study of these things long enough. We’ll need a deeper
understanding of them before we can really understand how digital
signals are sent and received. With this newfound knowledge, we’ll
build an OOK transmitter and test it with our receiver flowgraph.
Next we’ll explore the structure of digital baseband signals:
preambles, payloads, encoding types, and CRCs. We’ll also use some
rudimentary Python programming to greatly ease our ability to
extract digital data from baseband waveforms.
Since we’ll have a good handle on the general structure of digital
radios, we’ll modify our flowgraphs to use Frequency Shift Keying
(FSK) and Phase Shift Keying (PSK). As we work with these new
modes, we’ll introduce more advanced gnuradio features to model
noise and other systematic imperfections.
In our final chapter, we’ll cover the various methods of viewing
digital signals using gnuradio graphical sinks. Some types of
graphical displays work better with certain modes and we’ll discuss
why.
When you complete this volume, you’ll know enough to venture
into the wild and start exploring. Many of the online SDR tutorials
and walkthroughs will make much more sense, allowing you to build
more advanced radios and expand your understanding of radio
technology.
1.4 Recommended Hardware and Software
The goal of this book is to learn by doing. Although you can work
through the material here without SDR hardware, your experience
will be sub-optimal. For this reasons, I recommend you acquire the
HackRF One, a powerful yet affordable SDR platform.
We’ll also be using the same software as we did in Volumes 1 and
2. If you’ve run through the gnuradio installation process in that
book, you’re ready to go and can safely skip the installation chapter
in this book. If you’re jumping straight into Volume 3, have no fear!
We’ve included the software installation instructions in this book as
well. You will need a Linux PC, however, preferably running Ubuntu
14.04 LTS or 16.04 LTS.
As mentioned in the Preface, we also recommend that you have
an external mouse with a middle button or clickable scroll wheel.
This will allow you to more easily access certain gnuradio functions.
1.5 Things Covered and Not Covered
Our goal in this book series is to help you learn through doing.
However, this is not a digital signal processing (DSP) textbook. I
don’t believe many newcomers to SDR are well served by a deep
dive into the detailed mathematics underpinning signal processing,
sampling theory, or the study of electromagnetic fields and waves.
As such, I will provide an overview of key mathematical concepts
when necessary and refer you to other sources whenever possible.
And I will always endeavor to not just tell you the concept, but show
you the concept by actively using gnuradio.
I take the same approach with respect to computing topics. I
assume that you have a basic understanding of how to work in your
chosen operating system. Though you can work in OS X or Windows
if you like, you will see that I recommend Linux for your SDR work.
If you’re new to Linux, you might want to look through some
resources online to familiarize yourself with it first. You can also refer
to another book - Field Expedient Linux - which covers command
line topics with examples.
This volume also introduces Python code. Although we’ll be using
fairly simple programming constructs, you may want to work
through a few online tutorials if you’re unfamiliar with the Python
language.
2 Installing the Software
2.1 Installation
Remember the hour or two of slogging through software
installation we promised (or warned) you about in the introduction?
Well, it’s here. Unless you happen to be a hardcore Linux guru, this
will likely be your least favorite part of the book. However, if you
follow the instructions carefully, you should be through the
installation wilderness before you know it.
There is one piece of good news to veterans of Volumes 1 or 2 of
this series, though. You can skip this chapter entirely! The material
presented here is a carbon copy of the Installation chapter from the
first volume. I give you an hour of your life back! For the rest of you,
however, please bear with me for a bit longer.
First, you need to be aware of the basic software tools out there
for SDRs. We’ll be working primarily in gnuradio, so installing this is
a must.
Before I proceed, a word about operating systems. Two words,
really.
“Use Linux.”
It is definitely possible to install gnuradio on OS X and Windows.
I’ve done it and made them work. It was not fun nor was it easy,
and with every operating system update, for every new version of
gnuradio released, something may change just enough to complicate
things anew. For this reason I strongly advise you to follow the Linux
path. The gnuradio tool has been developed natively for Linux and
has always been easiest to get up and running on that platform. This
will likely always be the case.
One final note: you might be tempted to create a virtual machine
(VM) and install your software there. You may be able to get this to
work for your software, but the hardware will likely be a different
story. VMs typically have their biggest issues when dealing with
hardware connectivity and performance. For this reason, I have not
included any information on VM installations in this book, and will
assume that you will dedicate a partition to Linux.
2.2 Binaries vs Source Code
I will use the Ubuntu Linux distribution in this book. Honestly, it is
just easier for me to support one Linux distribution rather than write
installation instructions for multiple Linux distributions. By the time
you read this, the instructions may have changed, so see
www.fieldxp.com for updates.
The instructions here are for Ubuntu 14.04.4. Your mileage may
vary with other Ubuntu versions. One of the reasons I picked version
14.04 is because it is a Long Term Support (LTS) Ubuntu version.
These instructions should also work with Ubuntu 16.04 (also an LTS
version).
Some software comes pre-installed with a Linux distribution. These
program are sometimes called “binaries.” Additional software can be
installed via the Ubuntu Software Center or Synaptic Package
Manager. Many people prefer to install software using apt-get on the
command line. The apt-get command is not covered here.
Yet there may be times when software must be installed from
“source.” This means obtaining the source code for a software
application, and compiling the application from the source code.
“Source code” is the lines of computer code a software developer
writes in a particular computer language such as C, C++, Java, etc.
“Compiling” is the act of taking the source code and creating a
program (also known as a binary).
2.3 Why Compile from Source Code?
There are different reasons why one may want to compile a
program from source instead of using the binary available from the
Ubuntu Software Center or Synaptic Package Manager:
Availability: The program may not be available via the Synaptic
Package Manager. Some companies and software developers only
make their program available via source code.
Latest version: The latest version of the software may not be the
one accessible by the Synaptic Package Manager. If you want the
latest version then you have to compile it manually.
Features: Some software features must be enabled when the
software is compiled. A binary may have certain features disabled.
If the binary that someone is using lacks a feature (and the
feature exists), then the software will have to be compiled with the
feature enabled.
Optimization: Compiling a program allows the user to obtain
better performance by targeting the machine (e.g. Intel or AMD
processor) that will be running the program.
We will be using a program called PyBOMBS to install the SDR
tools from source. This will enable us to run a later version of these
tools than what may be available otherwise.
2.4 Steps for Installing from Source Code
While the exact steps may vary, in general one must:
1: Download (or obtain) the source code
2: Unpack the source code
3: Configure the source code
4: Build (or compile) the program binary
5: Install the program binary
6: (Optional) Uninstall the program
Fortunately, using the PyBOMBS program, much of the above will
be automated. The following sections 2.5 through 2.7 are provided
here as a support in case you need to install from source some
software in the future. If you don’t have an urgent need to install
some software from source, you might want to skip over this
material and go directly to section 2.8.
2.5 Obtain and Uncompress the Source Code
However the software is obtained (from a web site, CD, email
attachment, etc.), it will most likely come as a compressed tarball.
A tarball is a file containing one or more files. If there are
directories present, then the hierarchy of directories and files is
preserved. An archive is not a compressed file, but rather an orderly
collection of files.
- The “.tar” extension denotes a tarball.
The tarball is then compressed in order to reduce the size of the
file. The “.gz” or “.bz” or “.bz2” extension denotes a compressed file.
- Files with the “.gz” extension are compressed with the GZip
algorithm
- Files with the “.bz” extension are compressed with the BZip or
BZip2 algorithm.
- Files with the “.bz2” extension are compressed with the BZip2
algorithm.
Example: After obtaining the file example.tar.gz, one must first
uncompress the file.
gunzip example.tar.gz
This will expand the compressed tarball and a file named
“example.tar” will be created.
2.6 Extract (un-tar) and Configure the Source Code
To unpack the tarball:
tar -xvf example.tar
- The “x” option extracts the contents of a tar file
- The “v” option verbosely lists the files inside the tar file
- The “f” option is used when specifying a file name
There will now be a directory named “example” in the current
directory. Change into this directory by:
cd example
The source code is present in the “example” directory. It must now
be configured before compiling. Multiple things will happen with
configuring. The configure program will check the computer for
items such as memory, CPU type, what tools for compiling are
present, etc.
To start the configuration program, type:
./configure
- The “./” tells Linux to run the program even if it is not in the
path.
- The path specifies a set of directories which the operating
system will search for when the user issues a command.
2.7 Compiling and Installing the Software
The information gathered from the configure program will then be
used to generate something called a makefile.
The makefile will be used by the Make program to create the
program (binary) from the source code.
To create the program, type:
make
The make program will consult the makefile that specifies the
order that the different source code files are to be compiled.
Alternatively, one may use the command:
make clean
- Running make clean can get rid of files that are not needed
after compiling (and save disk space).
The time it takes to run the make command will depend on a
number of factors such as the size and complexity of the program
being compiled, the CPU and speed of the computer, etc.
- In the Linux world, the make program usually uses the gcc
compiler to compile the software.
To now install the compiled program, type:
make install
To uninstall the program, make sure the following command is
executed from the directory where the make command was run:
make uninstall
2.8 Installing gnuradio on Linux
So you listened to my warnings and decided to go with Linux.
Great! This means, however, that you’ll need a computer with Linux
installed on it, specifically Ubuntu version 14.04.04 or Ubuntu
version 16.04 LTS. If you don’t have this operating system installed
and are unsure of how to do so, please find a guide online to walk
you through the process. It’s also a good idea to apply any Ubuntu
system updates and to reboot before following the instructions in
this chapter.
As you set up your Linux partitions, ensure that your computer has
at least 50 GB of space available for the operating system, gnuradio,
and the data files with which we’ll be working. 100 GB or more
would be better.
Once you have an Ubuntu installed, the general flow we’re going
to follow is this:
- First, we will install an application called git, which is a very
common tool used to fetch files from a software repository (often
online).
- Second, we will install some dependencies (software upon
which other software depends).
- Next, we will download something called pip. This is a program
that helps us install other programs that are written in the Python
programming language.
- After that, we will use the pip tool to download and install an
application called pyBOMBS. This is a special software manager
that is used to install gnuradio as well as other SDR related
software utilities (for instance, software that enables HackRF
functionality from inside gnuradio).
- Lastly, we will handle the environment variables required by
gnuradio. These are just settings that Linux needs to run
gnuradio properly.
Don’t worry if a few of the steps I just mentioned are a bit
confusing. I’ll walk you through each of the steps below, giving you
the specific commands to type.
First, a word of warning. Some gnuradio install guides will direct
you to run the following simple command WHICH YOU DO NOT
WANT TO TYPE. But this is a command which you may see:
sudo apt-get install gnuradio
This will indeed install gnuradio, but it will not be a very recent
version. The steps we’ll go through below will get the latest version
of gnuradio available, and this will make a difference. Several of the
exercises in this book series will not work with the older version of
gnuradio.
I have also provided a rough time estimate for how long each
command will take. This estimate assumes a mid-range 2015
workstation and a 10 Mbit/second Internet connection (your mileage
may vary).
Let us assume that we’re starting in the home directory. To make
sure, go ahead and type the following in a terminal window:
cd
(Time required: instantaneous)
Time to make sure Ubuntu Linux is up-to-date:
sudo apt-get update
(Time required: could take a few minutes)
First we’ll install git, using apt-get. You’ll need to enter your
password before the command will complete.
sudo apt-get install git
(Time required: less than a minute)
Now it is time to install some dependencies, software that the SDR
tools will depend on in order to install and/or run:
sudo apt-get install libyaml-dev
sudo apt-get install libssl-dev
sudo apt-get install python-dev
(Time required: less than a minute)
Next, we’ll create a directory in which to place gnuradio and other
software utilities. If you don’t want to call it “sdr” feel free to give it
another name or location, just be careful to use that other name
throughout the guide in place of the “sdr” name.
mkdir sdr
cd sdr
(Time required: instantaneous)
Now we’ll use install a tool that will be used to manage Python
packages:
sudo apt-get install python-pip
(Time required: less than 1 minute)
The next step is to update the python-pip software we just
installed:
sudo easy_install pip
(Time required: less than 1 minute)
Now we use the pip tool to install PyBOMBS:
sudo pip install PyBOMBS
(Time required: less than 1 minute)
The following two commands will add “recipes” for PyBOMBS.
Different pieces of software will be installed by PyBOMBS via the two
recipes: gr-recipes and gr-etcetera. (Note that both commands
below begin with “pybombs” and end with the git file. On some
ebook formats, these commands will sprawl across multiple lines,
but you will need to type them on a single line in your terminal.)
pybombs recipes add gr-recipes git+https://github.com/gnuradio/gr-
recipes.git

pybombs recipes add gr-etcetera git+https://github.com/gnuradio/gr-


etcetera.git
(Time required: about 1 minute)
To list the current installed recipes:
pybombs recipes list
(Time required: about 1 minute)
Next we will designate the previously created “sdr” directory as
the target for software installed by PyBOMBS:
pybombs prefix init ~/sdr -a myprefix
(Time required: instantaneous)
Finally, we will use PyBOMBS to install gnuradio and gr-osmosdr
(this provides gnuradio with an interface to the HackRF hardware):
pybombs install gnuradio gr-osmosdr
(Time required: hard to say, maybe 40 to 70 minutes)
With Linux, we can use the source command on a file to execute a
list of commands in that file (rather than typing each command one
at a time). The install process we just completed will generate a
number of environment variables that need to be set for gnuradio to
work. Fortunately, all of these variables have been automatically
added to a single file that you can simply source with the following
command:
source ~/sdr/setup_env.sh
(Time required: instantaneous)
Running this source command will be enough to get gnuradio
running for now, but it will need to be run again every time you
reboot your machine. To run this command automatically at boot
time, edit the file called “.bashrc” in your home directory and add
the source command shown above to the end of the file.
At this point, we should have a working installation of gnuradio.
Go ahead and try to run its graphical interface by typing:
gnuradio-companion
(Time required: instantaneous)
If successful, you should see a window similar to this appear:

Both gnuradio and PyBOMBS undergo changes over time. This


software work is undertaken by talented programmers in the open
source community. Despite their best efforts, there may be hiccups
during the installation process. The installation instructions given
here may not work in the future. See the www.fieldxp.com website
for more up-to-date instructions.
Almost done, now let’s close the gnuradio window and go back to
our terminal window. We need to install some additional graphical
support software in gnuradio. This will enable more advanced
displays so we can better see what’s happening on the screen. The
following will use pip to install OpenGL support for Python.
sudo pip install PyOpenGL PyOpenGL_accelerate
We may need to type in a few “Y” characters to make this go.
Finally, we will enable our new graphical functionality in gnuradio
by creating a file using gedit (or your favorite text editor) in the
following location:
gedit ~/.gnuradio/config.conf
This file needs to contain the following contents, so we’ll type (or
paste) it in.
[wxgui]
style=gl
fft_rate=30
waterfall_rate=30
scope_rate=30
number_rate=5
const_rate=5
const_size=2048
Now we should have everything we need to get started, including
gnuradio and all of the hardware drivers and utilities needed by the
HackRF unit (the SDR hardware we mentioned in the Preface).
The following is for those who do have a HackRF SDR unit. We’ve
done a sanity check already on gnuradio, but we can also do a
simple test of the HackRF utilities and drivers (think of a driver as
the software that the operating system uses to manage hardware).
First, we need to plug in the HackRF device to a USB port on our
computer. Then we run the following command:
hackrf_info
(Time required: instantaneous)
If things are working, you should see a message telling you that a
HackRF board was found, along with information about the board.
That message will look something like this:
Found HackRF board.
Board ID Number: 2 (HackRF One)
Firmware Version: <a series of interesting characters>
Part ID Number: <more interesting characters>
Serial Number: <even more interesting characters>
If the hackrf_info command produces an error message, then:
cd ~/sdr/src/hackrf/host/build
cmake ../ -DINSTALL_UDEV_RULES=ON
make
sudo make install
sudo ldconfig
Now unplug the HackRF unit, plug it in again, and try the hackrf_info
command.
2.9 Validating your gnuradio Installation
Regardless of which operating system you used to install gnuradio,
you should create the following project just to make sure you have
things working OK. This is not a thorough or exhaustive test, just a
sanity check to make sure the big pieces are in place and functioning
correctly.
I’ll guide you through a couple of steps that may not make a lot of
sense at first, but don’t worry about that yet. It will become
progressively more clear as I peel back the layers of the SDR onion.
Please note that screenshots in the book may not match up exactly
with your gnuradio-companion display (due to, for instance, different
versions of gnuradio).
1) open gnuradio-companion
- For Linux, you will simply type gnuradio-companion in a terminal
window
- When you’re done, you should see something like this
2) Type Control-F to bring up a search bar on the top right side of
the screen
3) Type signal into the window (you don’t have to hit the return
key). You’ll see an option under Waveform Generators called Signal
Source. Double click it and it will appear in the diagram.
4) Erase the existing text in the search window and type audio.
You’ll see an option called Audio Sink. Double click this and it too will
appear in the diagram.
5) Double click the signal source block and another window will
come up. The contents won’t make a lot of sense, but that’s OK. We
only need to change two things. Enter 0.1 for the Amplitude and
change the Output Type from Complex to Float. Then click OK.
6) Now click the orange tab on the signal source block and then
click again on the orange tab on the audio sink block. You should
see a connection appear between the two blocks.
7) Click the “Execute” icon on the toolbar. Gnuradio will ask you to
save the project at this point. Name the project verify.grc and click
the Save button..

8) After saving, gnuradio will take a second to generate and run


your project. After a few seconds, you should hear a moderately-
pitched tone. If so, then your gnuradio sanity check has passed!
Let’s move on to bigger and better things.
3 On-Off Keying
3.1 What is OOK?
Let’s start our foray into digital radios with perhaps the simplest
form of digital communication, On-Off-Keying (OOK). In a way, this
mode is most like the way traditional wired systems work.
When attempting to send a logic 1 in a wired system, the digital
hardware will output the maximum possible voltage, which is equal
to the voltage powering the system. When attempting to send a
logic 0, it will output the minimum possible voltage, typically by
grounding the output.
Now in the wireless world, an OOK system will signal a 1 by
transmitting a carrier with the maximum possible amplitude. It will
signal a 0 by transmitting no carrier at all. You can also think of this
as just an extreme form of amplitude modulation.
Instead of diving right into the project like we often did in the last
two volumes, we’ll follow a slightly different flow. The first step will
be capturing the RF data associated with our target digital signal.
Next, we’ll examine the signal, figure out how to demodulate it, and
recover the digital baseband. Then we’ll extract the data, the actual
digital bits, that the baseband contains. Finally, we will build a
transmitter and test it with our new receiver. All of this will take a
few chapters to get through.
Think carefully about this sequence of activities, it is similar to
what we’ll do when we find signals in the wild. We’ll get much more
deeply into the discovery and decomposition of mystery signals in a
later volume, but it’s good to start thinking about it now.
3.2 Building a Scanner
First, we’re going to build a flowgraph that we will use to find our
target signal and then inspect it. For the exercises in this chapter,
you can employ a File Source block using the raw RF data file
provided in the project files we downloaded earlier from
www.fieldxp.com. In the ch3 subdirectory, use the file called
scan_00_c313M_s8M.iq.
I also encourage you to find a cheap wireless device, such as a
wireless automobile keyfob or garage door opener, and use your
SDR to find and capture its control signal into a raw RF data file. I
recommend you build the scanner, even if you don’t have the cheap
wireless device, as it will be easy to do and will prove very useful in
the future.
Before we start the walkthrough for the scanner, take a moment
and think about how you would build this flowgraph. You have used
most of the blocks already and have enough gnuradio knowledge to
figure out how to build a scanner. Open up gnuradio-companion and
try to build something using the HackRF SDR. Then come back here
and see how you did.
OK, you’re back! Let’s create a new flowgraph, naming it
scanner.grc. We’ll start by changing the samp_rate to 8e6. You may
recall from the last book that the minimum sample rate for the
HackRF One is 8 MHz. It is possible to operate it at a slower rate but
only at the cost of poorer signal integrity. Next we’ll add a control
widget for the center frequency. This will allow us to change the
band we’re scanning without stopping and restarting the flowgraph.
Let’s add the following block and edit its properties:
QT GUI Entry 1
ID: center_freq
Type: Float
Default Value: 313e6
Next we add the source of our raw RF data.
osmocom Source
Ch0: Frequency (Hz): center_freq
Ch0: RF Gain (dB): 0
Note that we set the RF gain to 0 dB for the safety of our SDR
hardware. If we have trouble picking up our signal, we can always
increase it to 14 dB (which, as we learned in Volume 2, is the
maximum receiver gain for the HackRF One).
Now where is this raw RF data going? Two places: a QT GUI Sink
(so we can look at it live) and a File Sink (so we can save it and
demodulate it later). Add the following blocks:
QT GUI Sink
Center Frequency (Hz): center_freq
Show RF Freq: Yes
Connect input to osmocom Source block output
File Sink
File: <select path and file name on your system>
Connect input to osmocom Source block output
When it comes to giving file names, we recommend having the file
name reflect the center frequency and sample rate of the file. For
example “myfile_c100M_s8M.iq” would refer data captured at a
center frequency of 100 MHz using a sampling rate of 8 MHz. The
“.iq” is a useful suffix to denote the type of file.
That’s it. This is all it takes to build a scanner, although we’ll tack
on a few additional capabilities in future iterations. For now, let’s
disable the File Sink, hook up our HackRF One SDR and run the
flowgraph. You don’t have to disable the File Sink, but the size of the
captured file will add up quickly, so be careful about your free disk
space.
When we run the flowgraph, we’re essentially visualizing the
spectrum from 309 MHz to 317 MHz. Click run, and you’ll see
something like this:

If you have an automobile key fob, you should press one of the
buttons now. If you don’t have one, a garage door opener may also
work. In either case, you’ll likely see a signal spike momentarily, like
this.
If you’re dealing with a key fob associated with a vehicle made for
the European market, try changing center_freq to 432M. Garage
door openers utilize a wider range of frequencies, but you’ll probably
find something at either 300 MHz, 315 MHz, or 390 MHz.
After you’ve pressed the button a few times, you might notice
something odd. Although you’ll see a pulse on your Frequency Plot
most of the time you press the button, you may not always. This is
because the refresh rate of the QT GUI Sink is limited, and the signal
sometimes fits between display snapshots. If you switch to the
Waterfall tab, however, you’ll be able to see the signal more easily
over time. Note you can adjust the display color/contrast via the
slider bar under Frequency.
When you’re sure you’ve found the signal, close the flowgraph and
re-enable the File Sink. After running the flowgraph again, press the
button several times, then quickly close the flowgraph. The longer it
stays running, the bigger that raw data file gets. You’ll be into the
gigabytes in far less than a minute.
Now that we’ve got the file, think about what that means. This is
an incredibly powerful feature of SDRs. With a traditional radio, we
would need to be poised and ready when a transmission came into
the receiver. We would have to know (or guess) the correct
frequency and tune our radio before the transmission came into the
receiver. We would have to know (or guess) the correct modulation
scheme before the transmission came into the receiver. And unless
we had more than one radio, we could only receive one transmission
at a time.
With the ability to capture raw RF data, we can now do all of those
things offline, at our leisure. We can iterate over many different
tunings and modulation schemes as needed. The only thing we can’t
do to the captured data is change the antenna positioning and the
analog SDR gain.
3.3 Building an OOK Receiver
Thanks to the scanner, we have some raw RF data with which to
work. Now we need to tune for the signal and demodulate it. Because
this will be a digital signal, the demodulation will be a bit different
than what you’ve seen before. When we’re done with the
demodulation, we’ll send the digital baseband signal to a GUI Sink
and take a look at it. To keep us on the same page, we will use a raw
RF data file from the downloaded project files as we build a OOK
receiver. When you finish this chapter, I encourage you to repeat this
chapter with the RF data you obtained from your wireless automobile
keyfob/garage door opener.
We’ll call our new flowgraph ook_rx_simple.grc. As usual, we’ll start
by adding a number of variables and control widgets that our blocks
will use later. Don’t worry, I’ll explain each of these momentarily.
Before we move on, though, we change the samp_rate to 8e6,
matching the data in the raw RF file. Then we add each of the
following:
Variable 1
ID: working_samp_rate
Value: 400e3
Variable 2
ID: filter_cutoff
Value: 50e3
Variable 3
ID: filter_transition
Value: 1e3
QT GUI Entry 1
ID: center_freq
Type: Float
Default Value: 313e6
QT GUI Entry 2
ID: freq
Type: Float
Default Value: 310e6
QT GUI Entry 3
ID: threshold
Type: Float
Default Value: 1
Next we add the source of our raw RF data. Note that we set it to
repeat, so we can keep tweaking our flowgraph settings while the
signal keeps streaming into the flowgraph over and over.
File Source
Repeat: Yes
File: <path to raw RF data file called scan_00_c313M_s8M.iq from
the project files which you downloaded from www.fieldxp.com>
Our input is from a file, and our output will be to a GUI Sink. Since
neither of these is a physical device, we need a Throttle block to keep
the flowgraph from running faster than real time speeds.
Throttle
Sample Rate: samp_rate
Connect input to File Source block output
Next, we need to tune the signal. We’ll use the same block that we
used before in our analog flowgraphs, with many of the same
properties.
Frequency Xlating FIR Filter
Decimation: int(samp_rate/working_samp_rate)
Taps: firdes.low_pass(1, samp_rate, filter_cutoff, filter_transition)
Center Frequency: freq-center_freq
Connect input to Throttle block output
First, I’ll tell you that the signal we want to receive is located at 310
MHz. If you like, you can use a QT Frequency Sink block to verify this
for yourself. As in previous radios we tune to our signal by
downshifting the entire captured spectrum by the difference between
the center frequency and the tuning frequency. Then we low pass
filter the shifted signal with a cutoff of 50 kHz and a transition width
of 1 kHz. Finally, we decimate the outgoing data stream down to our
working_samp_rate of 400 kHz.
Now that the tuning is done, we move to demodulation. As you
might guess, this is where things get different. We need a way to
output a high, roughly constant value when the carrier is present and
a low, roughly constant value when the carrier is absent. The
Complex to Mag block will do this for us, but I’m not going to get into
the workings of the block just yet. When we discuss complex numbers
in the next chapter, it will become more clear.
Complex to Mag
Connect input to Frequency Xlating FIR Filter block output
What we have in our flowgraph so far is actually enough to produce
a crude digital signal. Let’s add a couple of GUI blocks and see what it
looks like. We’ll add one on each side of the Complex to Mag block so
we can clearly see the demodulation at work.
QT GUI Time Sink 1
Name: Input to Demodulator
Type: Complex
Sample Rate: working_samp_rate
Connect input to Frequency Xlating FIR Filter block output
QT GUI Time Sink 2
Name: Baseband Output
Type: Float
Sample Rate: working_samp_rate
Connect input to Complex to Mag block output
Running the flowgraph shows us occasional flashes of the
modulated and demodulated signals we might expect, though you
have to watch for several seconds to see them show up in the display.
There is one possible issue, though. You can see that the
demodulated signal doesn’t have the nice clean lines that a perfect
digital square wave would. It’s kind of rough.
We’ll fix that in a second. For now, though, take note that the
digital signal is mostly high when the carrier is on, and mostly low
when it is off.
3.4 Digital Baseband Waveforms
Next, we’re going to clean up that ugly digital signal. In the process
we’ll learn a bit about digital waveforms and how to work with them.
We started off this book talking about different modes of wireless
digital communication, but we didn’t really lay down a clear definition
for the difference between digital and analog communications. You
may already have a strong intuition for the difference, and the
Analog-to-Digital converter chapter of Volume 1 may have aided that.
Before we get back to our flowgraph, though, let’s talk a bit about
digital baseband signals.
First of all, I called them “digital baseband” signals. I say this
because the digital signals we’re going to be talking about are
confined to the baseband (a delightful topic from Volume 2). Because
we’re working with Software Defined Radios, where much of the
processing is done on a computer, large swathes of our work could be
considered digital. However, we’ll only be talking about the signals
going into our receivers and out of our transmitters.
Let’s forget about radio for a moment. In general, digital signals use
a stream of ones and zeros to communicate binary data. Think for a
moment about your computer keyboard. When you press the “u” key
while using your word processor, somehow the keyboard signals to
your computer that a ’u’ was just typed. How does it do that? There
are a number of different layers, but at its core, this ’u’ information is
sent by a digital waveform containing binary data.
Computers often associate the eight bits 01110101 with the letter
“u” (you can research a standard called “ASCII” if you want to know
more). When we unwrap all the layers of communication, we’ll likely
see something like this coming out of the keyboard:

See how the signal goes either high and low at evenly spaced
intervals? Maybe not yet, so let me draw some time markers.
You can see now that the level of the signal at each time marker
forms a single bit value, and when put together they form the binary
data we’re trying to send. This time marker is actually defined by
something called a clock. This clock is simply another digital signal,
repeating a symmetric pattern at a regular interval indefinitely. It can
be thought of as “ticking” when it transitions from low to high,
otherwise known as a rising edge.

When the clock ticks, output devices set their level to either high or
low, depending on whether they want to signal a one or a zero (they
actually do this a little bit before the clock edge, but let’s not dive too
deep here). At the tick, the input devices then sample the data and
interpret it either as a one or a zero depending on the level.
You can see how the rising edges of the clock signal occur in the
center of each time interval. Systems where you have both a
baseband signal as well as a clock are called “synchronous,” because
the clock synchronizes the data. What can get tricky is that the
receiver doesn’t always have access to the clock signal. This is the
case in “asynchronous” systems. Many wired systems don’t include an
extra wire to send the clock, they just send the baseband signal.
Likewise, wireless systems send a modulated version of the baseband
and don’t usually have a way to send the clock. So how does a device
make sense of the baseband without the clock? A process known as
clock recovery.
If I gave you a clock-less version of the digital baseband waveform
above, do you think you could guess where the clocking is supposed
to happen? Let’s take the shortest distance between two level
changes, which is 100 ms, and assume it’s the same as our clock
width.
Now if we start half of our clock width away from the first edge and
sample the signal at even 100ms intervals, we get something like this:

At this point, you probably have some quite reasonable objections.


For example, how do we know that this “shortest distance” is a clock
cycle? Couldn’t the data have included repeating bits to fool us?
Another random document with
no related content on Scribd:
"But oh! Remember, if there is no room for Christ in your heart, there will be no room
for you in Christ's heaven."

"My friend, He is knocking now; it may be His last knock. He is calling now; it may be
His last call."

"'Oh, let Me in.'" He cries, "'and I will make you happy; I am bringing you forgiveness,
and peace, and joy, and rest, and all that you need. Oh, let Me in before it is too late! I
have waited so patiently and so long, and still I wait. Will you not, even this night, undo
the door?'"

When the little service was over the people went back into their houses, and Angel and
her mother went on with their work. And as Angel wiped the cups and saucers, she
sang softly to herself the chorus of the hymn—

"Oh! My soul, for such a wonder,


Wilt thou not undo the door?"

"Yes, I will!" said her mother suddenly, bursting into tears; "I will undo the door; I will
keep Him waiting no longer."

CHAPTER V

ANGEL'S BIRTHDAY

IT was a bright, sunny morning, some weeks after that little service was held in
Pleasant Place.

The sunbeams were streaming in at Mrs. Blyth's window, for the cobwebs and spiders
had some time ago received notice to quit, and the dust had all been cleared away, and
found no chance of returning.

Mrs. Blyth was a different woman. Her troubles and trials remained, and she had just as
much to do, and just as many children to look after, but she herself was quite different.
She had opened the door of her heart, and the Lord Jesus had come in. And He had
brought sunshine with Him into that dark and ignorant heart. Life, instead of being a
burden and a weariness, was now full of interest to Mrs. Blyth, because she was trying
to do every little thing to please Jesus, who had done so much for her. Whether she was
washing the children, or cleaning the house, or turning the mangle, she tried to do it all
to please Him. She remembered that He was looking at her, and that He would be
pleased if she did it well. It was wonderful how that thought helped her, and how it
made the work easy and pleasant.
So, through the bright, clean window, the morning sunbeams were streaming on little
Angel's head. Her mother was standing by her side, watching her as she lay asleep, and
waiting for her to awake.

As soon as ever Angel opened her eyes, her mother said—

"Little Angel, do you know what to-day is?"

"No, mother," said Angel, rubbing her eyes, and sitting up in bed.

"It's your birthday, Angel; it is indeed!" said her mother. "I hunted it out in your
grandmother's old Bible. It's the day you were born, just seven years ago!"

"And am I really going to have a birthday, mother?" said Angel, in a very astonished
voice.

"Yes, a real good birthday," said her mother; "so get up and come downstairs, before
any of it is gone."

Angel was not long in putting on her clothes and coming down. She found the table put
quite ready for breakfast, with a clean tablecloth, and the mugs and plates set in order
for her and her little brothers and sisters; and in a little jar in the middle of the table
was a beautiful bunch of flowers. Real country flowers they were, evidently gathered
from some pleasant cottage garden far away. There were stocks and mignonette, and
southernwood, and sweetbrier, and a number of other flowers, the names of which
neither Angel nor her mother knew.

"Oh mother, mother," said little Angel, "what a beautiful nosegay!"

"It's for you, Angel," said her mother: "for your birthday. I got it at the early market.
My father always gave me a posy on my birthday."

"Oh, mother," said little Angel, "is it really for me?"

But that was not all, for by the side of Angel's plate she found a parcel. It was tied up in
brown paper, and there was a thick piece of string round it, fastened tightly in so many
knots that it took Angel a long time to open it. Her little hands quite shook with
excitement when at last she took off the cover and looked inside. It was a little book, in
a plain black binding.

"Oh, mother," said Angel, "what is it? Is it for my birthday?"

"Yes," said her mother; "look at the writing at the beginning. I'll read it to you."

It was very uneven writing, and very much blotted, for Mrs. Blyth was only a poor
scholar; but little Angel did not notice this—it seemed very wonderful to her to be able
to write at all.

Now, what was written in the little book was this:

"Given to little Angel by her dear mother; and she hopes she will promise to read it, and
will keep her promise better than I did."

"But I can't read, mother," said Angel.


"No; but you must learn," said her mother. "I mean that you shall go to school regular
now, Angel. Why, you're seven years old to-day!"

Poor little Angel's head was nearly turned; it was such a wonderful thing to have a
birthday.

But the wonders of the day were not over yet; for when, after breakfast, Angel asked
for the clothes to mangle, her mother said: "They're all done Angel; I'm just going to
take them home. I've done a lot these three nights when you was in bed, that we might
have a bit of a holiday to-day."

"A holiday, mother!" said Angel. "Oh, how nice! No mangling all day!"

"No mangling all day," repeated the mother, as if the thought were as pleasant to her as
to Angel.

But the wonders of the day were not yet over.

"Angel," said her mother, as they were washing the children, "did you ever see the
sea?"

"No, mother," said Angel; "but Tim has; he went last Easter Monday with his uncle."

"Well," said her mother, "if it doesn't rain, you shall see it to-day."

"Oh, mother!" was all that little Angel could say. And who do you think is going to take
you, child? "I don't know, mother."

"Why, Angel, your father is. He came in last night as soon as you'd gone to bed. He sat
down in that arm-chair by the fire, and he said, 'Dear me! how comfortable things is
just now at home! If they was always like this, I wouldn't stop out of an evening.'"

"So I said, 'If God helps me, John, they always shall be like this, and a deal better, too,
when the children gets a bit bigger.' And your father stopped at home and read his
newspaper, Angel, and then we had a bit of supper together. It was like when we was
first married, child; and as we ate our supper, Angel, I said, 'It's Angel's birthday to-
morrow, John.' And your father said, 'Is it? Why, to-morrow's Saturday. Let's all go to
the sea together;' and he took quite a handful of shillings out of his pocket. 'Here's
enough to pay,' he said. 'Have them all ready at dinner-time, and we'll go by the one-
o'clock train.'"

"Oh, mother," said little Angel, "it is so nice to have a birthday!"

True to his promise, John Blyth came home at dinner-time, with the shillings still in his
pocket. His mates had tried hard to persuade him to turn into the Blue Dragon on his
way home, but he told them he had an engagement, and had no time to stay.

What a happy afternoon that was!

Angel had never been in a train before, and her father took her on his knee, pointing
out to her the houses, and trees, and fields, and sheep, and cows, and horses, as they
went by. And then they arrived at the sea, and oh! What a great, wonderful sea it
seemed to Angel! She and her little brothers and sisters made houses in the sand, and
took off their shoes and stockings and waded in the water, and picked up quite a
basketful of all kinds of beautiful shells; whilst her father and mother sat, with the baby,
under the shadow of the cliffs and watched them.

And then they all came home together to tea, and her father never went out again that
night, but sat with them by the fire, and told Angel stories till it was time to go to bed.

"Oh, mother," said Angel again, a sleepy head on the pillow, "it is nice to have a
birthday!"

CHAPTER VI

THE GREAT BIRTHDAY

THE bells were ringing merrily from the tower of the old church close to Pleasant Place.

The street near the church was full of people bustling to and fro, going in and out of the
different shops, and hurrying along as if none of them had any time to lose. The shops
were unusually gay and tempting, for it was Christmas Eve. Even Pleasant Place looked
a little less dull than usual. There were sprigs of holly in some of the windows, and most
of the houses were a little cleaner and brighter than usual.

Angel and her mother had been very busy all day. They had just finished their
mangling, and had put all the clothes out of the way for Christmas Day, when they
heard a knock at the door, and Angel went to open it.

"It's a basket, mother," she said. "It can't be for us."

The man who had brought the basket laughed.

"It's for an Angel!" he said. "Have you got any of that article in here? Here's the
direction I was to bring it to—'Little Angel, No. 9, Pleasant Place.'"

"Then, please, it's for me," said Angel.

"For you!" said the man. "Well, to be sure! So you are the angel, are you? All right,
here's your basket!" And he was gone before they could ask more.

The basket was opened with some difficulty, for it was tightly tied up, and then Angel
and her mother put out the contents on the table amidst many exclamations.

There was first a plum-pudding, then a number of oranges and apples, then a large
cake, and then a pretty Christmas card, with a picture of a robin hopping about in the
snow, and these words printed on it, "A Happy Christmas to you all."

"Where can they all have come from?" said little Angel, as one good thing after another
came out of the basket. At the very bottom of the basket they found a tiny note.
"This will tell us about it," said Mrs. Blyth. "Why, it's directed to you, Angel!"

So Angel's mother sat down, stirred the fire, spelt it carefully out, and read it aloud by
the firelight.

"MY DEAR LITTLE ANGEL,"


"I send you a few little things for Christmas
Day. I hope you will have a very happy day. Do not
forget whose Birthday it is. Your friend,"
"MABEL DOUGLAS."

"Whose birthday is it, mother?" asked little Angel.

"The Lord Jesus Christ's," said her mother reverently. "Did I never tell you that, little
Angel? It's the day we think about Him being born a little baby at Bethlehem."

"SO YOU ARE THE ANGEL, ARE YOU? HERE'S YOUR BASKET."

Angel was sitting on her stool in front of the fire thinking, and it was some time before
she spoke again. Then she said suddenly, "What are you going to give Him, mother?"

"Give who, Angel?"

"What are you going to give the Lord Jesus for His birthday?"
"Oh, I don't know," said her mother. "I don't see how we can give Him anything."

"No," said little Angel sadly; "I've only got one penny,—that wouldn't buy anything good
enough. I would have liked to give Him something on His birthday; He did such a lot for
us."

"We can try to please Him, Angel," said her mother, "and do everything that we think
He would like."

"Yes," said little Angel, "we must try all day long."

That was a very happy Christmas Day for Angel and for her mother.

"This is the Lord Jesus' birthday," was Angel's first thought when she awoke in the
morning; and all through the day she was asking herself this question, "What would
Jesus like?" And whatever she thought He would like that she tried to do.

Angel's father was at home to dinner, and was very kind to her all day. He had not been
seen inside a public-house since Angel's birthday. It was a very good little Christmas
dinner. As they were eating it, Mr. Blyth said:

"Emily, have you seen those bills on the wall at the top of the court?"

Angel's mother said, "No; I have not been out to-day."

"There's to be a meeting to-night in that little schoolroom just a bit of way down the
street. That new young minister's going to speak; and it says on the bills it will all be
over in half an hour. I've a good mind to go and hear what he's got to say. Will you
come with me?"

"Yes, that I will," said Mrs. Blyth, with tears in her eyes. She had not been inside a
place of worship with her husband since the first year they were married.

"Can't Angel come too?" said her father, as he looked at her earnest little face.

"Not very well," said Mrs. Blyth; "we can't all go. Some one must stop with baby and
the children."

When Angel's large plum-pudding was put on the table, a sudden thought seized her.
"Mother," she whispered, "don't you think Jesus would like poor old Mrs. Sawyer to have
a bit of it?"

"Yes," said Mrs. Blyth, "I'll cut her a slice, and one for Annie too, poor girl. Will you take
them in?"

So Angel went next door with her two slices of plum-pudding. She found Mrs. Sawyer
and her niece Annie just beginning their dinner. There was nothing on the table but
some tea, and a loaf of bread with a few currants in it, so Angel felt very glad she had
brought the pudding. She was sure Jesus would be pleased they should have it; and she
thought it would make Him glad on His birthday to see how Mrs. Sawyer and Annie
smiled when they saw what she had brought them.

"Are you going to this meeting to-night?" said Annie, as Angel turned to go.

"No, I'm not going," said Angel; "but father and mother are. I must mind the children."
"I'll tell you what," said Annie; "if you'll bring them in here, I'll mind them. I can't leave
aunt, and they'll be a bit of company for her."

And so it came to pass that Pleasant Place beheld the wonderful sight of Mr. and Mrs.
Blyth and Angel all going together to the little meeting in the schoolroom.

A good many Pleasant Place people were there; and they looked round in astonishment
as Mr. Blyth came in, for they thought him about the most unlikely man in the whole
court to be there. And his wife and little Angel, as they sat beside him, prayed very
earnestly that he might get a blessing.

Mr. Douglas's text was a very strange one for Christmas Day—at least, so many of the
people thought when he gave it out. It had only four words, so that even little Angel
could remember it quite well—

"GIVE ME THINE HEART."

"Suppose," said the minister, "it was my birthday, and every one in my house was
keeping it. They all had a holiday and went out into the country, and there was a very
good dinner, which they all very much enjoyed, and altogether it was a very pleasant
day to them indeed."

"But suppose that I, whose birthday it was, was quite left out of it. No one gave me a
single present; no one even spoke to me; no one took the slightest notice of me. In
fact, all day long I was quite forgotten; I never once came into their thoughts."

"Nay, more. Not only did they do nothing whatever to give me pleasure, but they
seemed all day long to take a delight in doing the very things which they knew grieved
me and pained me, and were distressing to me."

"Surely, my friends, that would be a strange way of keeping my birthday; surely I


should feel very hurt by such conduct; surely it would be a perfect sham to pretend to
be keeping my birthday, and yet not take the slightest notice of me, except to annoy
and wound me! My friends," said the minister, "this afternoon I took a walk. In the
course of my walk I saw a number of people who pretended to be keeping a birthday.
And yet what were a great many of them doing? They were eating and drinking and
enjoying themselves, and having a merry time of it."

"But I noticed that the One whose birthday it was, was quite forgotten: they had not
given Him one single present all day long they had never once spoken to Him; all day
long He had never been in their thoughts; all day long He had been completely and
entirely passed by and forgotten."

"Nor was this all. I saw some who seemed to be taking a pleasure in doing the very
things He does not like, the very things which offend and grieve Him—drinking and
quarrelling, and taking His holy name in vain."

"And yet all these, my friends, pretended to be keeping the Lord Jesus Christ's
birthday!"

"But, I trust, by seeing you here to-night, that you have not been amongst their
number. I would therefore only put to you this one question—"
"The Lord Jesus Christ's birthday! Have you made Him a present to-day?"

"A present!" you say. "What can I give Him? He is the King of kings and Lord of lords.
What have I that is fit for a present to a king?"

"Give Him what He asks for, my friends. He says to you to-night, 'Give Me thine heart.'"

"That is the birthday present He is looking for. Will you hold it back?"

"Oh, think of what we are commemorating to-day. Think how He left His glory, and
came to be a poor, helpless babe for you; think, my friends, of all His wonderful love to
you. And then I would ask you, Can you refuse Him what He asks? Can you say—"

"Lord, I cannot give Thee my heart. I will give it to the world, to pleasure, to sin, to
Satan, but not to Thee,—no, not to Thee. I have no birthday present for Thee to-night?"

"Oh, will you not rather say—"

"'Lord, here is my heart; I bring it to Thee; take it for Thine own.


Cleanse it in Thy blood; make it fit to be Thine'"?

"Will you not this night lay at your King's feet the only birthday present you can give
Him—the only one He asks for—your heart?"

"Mother," said little Angel, as they walked home, "we can give Him a present, after all."

It was her father who answered her.

"Yes, Angel," he said, in a husky voice; "and we mustn't let Christmas Day pass before
we have done it."

And that night amongst the angels in heaven there was joy—joy over one sinner who
repented of the evil of his way, and laid at his Lord's feet a birthday present, even his
heart.

There was joy amongst the angels in heaven; and a little Angel on earth shared in their
joy.
"PLEASE, MR. SOLEMN, WHEN YOU DIE,
WHO'LL HAVE TO DIG YOUR GRAVE?"

LITTLE DOT

CHAPTER I

OLD SOLOMON'S VISITOR

IT was a bright morning in spring, and the cemetery on the outskirts of the town looked
more peaceful, if possible, than it usually did. The dew was still on the grass, for it was
not yet nine o'clock. The violets and snowdrops on little children's graves were peeping
above the soil, and speaking of the resurrection. The robins were singing their sweetest
songs on the top of mossy gravestones—happy in the stillness of the place. And the
sunbeams were busy everywhere, sunning the flowers, lighting up the dewdrops, and
making everything glad and pleasant. Some of them even found their way into the deep
grave in which Solomon Whitaker, the old grave-digger, was working, and they made it
a little less dismal, and not quite so dark.
Not that old Whitaker thought it either dismal or dark. He had been a grave-digger
nearly all his life, so he looked upon grave-digging as his vocation, and thought it, on
the whole, more pleasant employment than that of most of his neighbours.

It was very quiet in the cemetery at all times, but especially in the early morning; and
the old man was not a little startled by hearing a very small voice speaking to him from
the top of the grave.

"What are you doing down there, old man?" said the little voice.

The grave-digger looked up quickly, and there, far above him, and peeping cautiously
into the grave, was a child in a clean white pinafore, and with a quantity of dark brown
hair hanging over her shoulders.

"Whoever in the world are you?" was his first question.

His voice sounded very awful, coming as it did out of the deep grave, and the child ran
away, and disappeared as suddenly as she had come.

Solomon looked up several times afterwards as he threw up fresh spadefuls of earth,


but for some time he saw no more of his little visitor. But she was not far away; she
was hiding behind a high tombstone, and in a few minutes she took courage, and went
again to the top of the grave. This time she did not speak, but stood with her finger in
her mouth, looking shyly down upon him, as her long brown hair blew wildly about in
the breeze.

Solomon thought he had never seen such a pretty little thing. He had had a little girl
once, and though she had been dead more than thirty years, he had not quite forgotten
her.

"What do they call you, my little dear?" said he, as gently as his husky old voice would
let him say it.

"Dot," said the child, nodding her head at him from the top of the grave.

"That's a very funny name," said Solomon. "I can't think on that I ever heard it afore."

"Dot isn't my real name; they call me Ruth in my father's big Bible on our parlour
table."

"That's got nothing to do with Dot as I can see," said the grave-digger musingly.

"No," she said, shaking her long brown hair out of her eyes; "it's 'cause I'm such a little
dot of a thing that they call me Dot."

"Oh, that's it, is it?" said Solomon; and then he went into a deep meditation on names,
and called to mind some strange ones which he read on the old churchyard
gravestones.

When Solomon was in one of his "reverdies," as his old wife used to call them when she
was alive, he seldom took much notice of what was going on around him, and he had
almost forgotten the little girl, when she said suddenly, in a half-frightened voice—

"I wonder what they call you, old man?"


"Solomon," said the grave-digger; "Mr. Solomon Whitaker—that's my name."

"Then, please, Mr. Solemn, what are you doing down there?"

"I'm digging a grave," said Solomon.

"What's it for, please, Mr. Solemn?" asked the child.

"Why, to bury folks in, of course," said the old man.

Little Dot retreated several steps when she heard this, as if she were afraid Mr. Solomon
might want to bury her. When he looked up again there was only a corner of her white
pinafore in sight. But as he went on quietly with his work, and took no notice of her, Dot
thought she might venture near again, for she wanted to ask Mr. Solomon another
question.

"Please," she began, "who are you going to put in that there hole?"

"It's a man as fell down dead last week. He was a hard-working fellow, that he was,"
said the grave-digger; for he always liked to give people a good word when digging
their graves.

Dot now seemed satisfied; and, on her side, told the old man that she had come to live
in one of the small cottages near the cemetery gates, and that they used to be "ever so
far off" in the country.

Then she ran away to another part of the cemetery, and old Solomon shaded his eyes
with his hand to watch her out of sight.

CHAPTER II

DOT'S DAISIES

DOT'S mother had lived all her life in a remote part of Yorkshire, far away from church
or chapel or any kind of school. But her husband had been born and brought up in a
town, and country life did not suit him. And so, when Dot was about five years old, he
returned to his native place, and took one of the cottages close to the cemetery, in
order that his little girl might still have some green grass on which to run about, and
might still see a few spring flowers.

The cemetery was some way out of the town; and Dot's mother, having had but little
education herself, did not think it at all necessary that Dot, at her tender age, should go
to school, and therefore the little girl was allowed to spend most of her time in the
cemetery, with which she was very well pleased. She liked to run round the
gravestones, and climb over the grassy mounds, and watch the robins hopping from
tree to tree.
But Dot's favourite place was by old Solomon's side. She went about with him from one
part of the cemetery to another, and he liked to feel her tiny hand in his. She took a
great interest, too, in the graves he was digging. She watched him shaping them neatly
and making them tidy, as he called it, until she began, as she fancied, to understand
grave-digging nearly as well as he did. But she sometimes puzzled the old man by her
questions, for Dot always wanted to know everything about what she saw.

"Mr. Solemn," she said one day, "shall you make me a little grave when I die?"

"Yes," he said, "I suppose I shall, little woman."

Dot thought this over for a long time.

"I don't want to go into a grave," she said; "it doesn't look nice."

"No," said the grave-digger, "you needn't be frightened; you won't have to go just yet.
Why, you're ever such a little mite of a thing!"

"Please, Mr. Solemn, when you die, who'll have to dig your grave, please?"

"I don't know," said Solomon uneasily; "they'll have to get a new digger, I suppose."

"Maybe you'd better dig one ready when you've a bit of time, Mr. Solemn."

But though Solomon was very fond of digging other people's graves—for he was so
much used to it that it had become quite a pleasure to him—he had no wish to dig his
own, nor did he like thinking about it, though Dot seemed as if she would not let him
forget it.

Another day, when he was working in a distant part of the cemetery, she asked him—

"Whereabouts will they bury you, Mr. Solemn?"

And when they were standing over a newly made grave, and Solomon was admiring his
work, she said—

"I hope they will make your grave neat, Mr. Solemn."

But though these questions and remarks made old Whitaker very uneasy—for he had a
sort of uncomfortable feeling in his heart when he thought of the day when his grave-
digging would come to an end—still, for all that, he liked little Dot, and he would have
missed the child much if anything had kept her from his side. She took such an interest
in his graves, too, and watched them growing deeper and deeper with as much pleasure
as he did himself. And, whether we be rich or poor, high or low, interest in our work
generally wins our hearts. And by and by Dot found herself a way, as she thought, of
helping old Solomon to make his graves look nice.

He was working one day at the bottom of a grave, and Dot was sitting on the grass at a
little distance. He thought she was busy with her doll, for she had not been talking to
him for a long time, and he gave a jump as he suddenly felt something patting on his
head, and heard Dot's merry little laugh at the top of the grave. She had filled her
pinafore with daisies, and thrown them upon him in the deep grave.
"Whatever in the world is that for?" said the old man, good-naturedly, as he shook the
flowers off his head.

"It's to make it pretty," said Dot. "It'll make it white and soft, you know, Mr. Solemn."

Solomon submitted very patiently; and from that time the child always gathered daisies
to scatter at the bottom of Solomon's graves, till he began to look upon it as a
necessary finish to his work. He often thought Dot was like a daisy herself, so fresh and
bright she was. He wondered at himself when he reckoned how much he loved her. For
his own little girl had been dead so many years; and it was so long now since he had
dug his old wife's grave, that Solomon had almost forgotten how to love. He had had no
one since to care for him, and he had cared for no one.

But little Dot had crept into his old heart unawares.

CHAPTER III

THE LITTLE GRAVE

OLD Solomon was digging a grave one day in a very quiet corner of the cemetery. Dot
was with him, as usual, prattling away in her pretty childish way.

"It's a tidy grave, is this," remarked the old man, as he smoothed the sides with his
spade; "nice and dry too; it'll do me credit."

"It's a very little one," said Dot.

"Yes, it's like to be little when it's for a little girl; you wouldn't want a very big grave,
Dot."

"No," said Dot; "but you would want a good big one, wouldn't you, Mr. Solemn?"

The mention of his own grave always made Solomon go into one of his "reverdies." But
he was recalled by Dot's asking quickly—

"Mr. Solemn, is she a very little girl?"

"Yes," said the old man; "maybe about your size, Dot. Her pa came about the grave. I
was in the office when he called, 'and,' said he, 'I want a nice quiet little corner, for it is
for my little girl.'"

"Did he look sorry?" said Dot.

"Yes," he said; "folks mostly do look sorry when they come about graves."
Dot had never watched the digging of a grave with so much interest as she did that of
this little girl. She never left Solomon's side, not even to play with her doll. She was
very quiet, too, as she stood with her large eyes wide open, watching all his
movements. He wondered what had come over her, and he looked up several times
rather anxiously as he threw up the spadefuls of earth.

"Mr. Solemn," she said, when he had finished, "when will they put the little girl in?"

"To-morrow morning," said the old man, "somewhere about eleven."

Dot nodded her head, and made up her mind she would be in this corner of the
cemetery at eleven o'clock.

When Solomon came back from his dinner, and went to take a last look at the little
grave, he found the bottom of it covered with white daisies which Dot had thrown in.

"She has made it pretty, bless her!" he murmured.

Dot crept behind the bushes near the chapel the next day, to watch the little girl's
funeral arrive. She saw the small coffin taken from the hearse, and carried on in front.
Then she watched the people get out of the carriages, and a lady and gentleman, whom
she felt sure were the little girl's father and mother, walked on first. The lady had her
handkerchief to her eyes, and Dot could see that she was crying. After her walked two
little girls, and they were crying also.

There were a few other people at the funeral, but Dot did not care to look at them; she
wanted to see what became of the little girl's coffin, which had just been carried into
the chapel. She waited patiently till they brought it out, and then she followed the
mournful procession at a little distance, till they reached the corner of the cemetery
where Solomon had dug the grave.

Solomon was there, standing by the grave, when the bearers came up with the coffin.
Dot could see him quite well, and she could see the minister standing at the end of the
grave, and all the people in a circle round it. She did not like to go very near, but she
could hear the minister reading something in a very solemn voice, and then the coffin
was let down into the grave. The little girl's mamma cried very much, and Dot cried too,
she felt so sorry for her.

When the service was over, they all looked into the grave, and then they walked away.
Dot ran up as soon as they were gone, and, taking hold of Solomon's hand, she peeped
into the grave. The little coffin was at the bottom, and some of Dot's daisies were lying
round it.

"Is the little girl inside there?" said Dot in an awestruck voice.

"Yes," said Solomon, "she's in there, poor thing. I'll have to fill it up now."

"Isn't it very dark?" said Dot.

"Isn't what dark?"

"In there," said Dot. "Isn't it very dark and cold for the poor little girl?"
"Oh, I don't know that," said Solomon. "I don't suppose folks feels cold when they are
dead; anyhow, we must cover her up warm."

But poor Dot's heart was very full; and, sitting on the grass beside the little girl's grave,
she began to cry and sob as if her heart would break.

"Don't cry, Dot," said the old man; "maybe the little girl knows nothing about it—maybe
she's asleep like."

But Dot's tears only flowed the faster. For she felt sure if the little girl were asleep, and
knew nothing about it, as old Solomon said, she would be waking up some day, and
then how dreadful it would be for her.

"Come, Dot," said Solomon at last, "I must fill it up."

Then Dot jumped up hastily. "Please, Mr. Solemn, wait one minute," she cried, as she
disappeared amongst the bushes.

"Whatever is she up to now?" said the old grave-digger.

She soon came back with her pinafore full of daisies. She had been gathering them all
the morning, and had hid them in a shady place under the trees. Then, with a little sob,
she threw them into the deep grave, and watched them fall on the little coffin. After this
she watched Solomon finish his work, and did not go home till the little girl's grave was
made, as old Solomon said, "all right and comfortable."

CHAPTER IV

LILIAN AND HER WORDS

DOT took a very great interest in "her little girl's grave," as she called it. She was up
early the next morning; and as soon as her mother had washed her, and given her her
breakfast, she ran to the quiet corner in the cemetery to look at the new-made grave. It
looked very bare, Dot thought, and she ran away to gather a number of daisies to
spread upon the top of it. She covered it as well as she could with them, and she patted
the sides of the grave with her little hands, to make it more smooth and tidy. Dot
wondered if the little girl knew what she was doing, and if it made her any happier to
know there were daisies above her.

She thought she would ask Solomon; so when she had finished she went in search of
him. He was not far away, and she begged him to come and look at what she had done
to her little girl's grave. He took hold of Dot's hand, and she led him to the place.

"See, Mr. Solemn," she said, "haven't I made my little girl pretty?"

"Aye," he answered; "you have found a many daisies, Dot."


"But, Mr. Solemn," asked Dot anxiously, "do you think she knows?"

"Why, Dot, I don't know—maybe she does," he said, for he did not like to disappoint
her.

"Mr. Solemn, shall I put you some daisies at the top of your grave?" said Dot, as they
walked away.

Solomon made no answer. Dot had reminded him so often of his own grave, that he had
sometimes begun to think about it, and to wonder how long it would be before it would
have to be made. He had a vague idea that when he was buried, he would not come to
an end.

He had heard of heaven and of hell; and though he had never thought much about
either of them, he had a kind of feeling that some day he must go to one or other. Hell,
he had heard, was for bad people, and heaven for good ones; and though Solomon tried
to persuade himself that he belonged to the latter class, he could not quite come to that
opinion. There was something in his heart which told him all was not right with him, and
made the subject an unpleasant one. He wished Dot would let it drop, and not talk to
him any more about it; and then he went into a reverie about Dot, and Dot's daisies,
and all her pretty ways.

It was the afternoon of the same day, and Dot was sitting beside her little girl's grave,
trying to make the daisies look more pretty by putting some leaves among them, when
she heard footsteps crossing the broad gravel path. She jumped up, and peeped behind
the trees to see who was coming. It was the lady and gentleman whom she had seen at
the funeral, and they were coming to look at their little grave. Dot felt very shy, but she
could not run away without meeting them, so she hid behind a hawthorn bush at the
other side.

The little girl's papa and mamma came close to the grave, and Dot was so near that, as
they knelt down beside it, she could hear a great deal of what they were saying. The
lady was crying very much, and for some time she did not speak. But the gentleman
said—

"I wonder who has put those flowers here, my dear; how very pretty they are!"

"Yes," said the lady, through her tears; "and the grave was full of them yesterday."

"How pleased our little girl would have been!" said he. "She was so fond of daisies! Who
can have done it?"

Little Dot heard all this from her hiding-place, and she felt very pleased that she had
made her little girl's grave so pretty.

The lady cried a great deal as she sat by the grave; but just before they left, Dot heard
the gentleman say—

"Don't cry, dearest; remember what our little Lilian said the night before she died."

"Yes," said the lady, "I will not forget."

And she dried her eyes, and Dot thought she tried to smile as she looked up at the blue
sky. Then she took a bunch of white violets which she had brought with her, and put
them in the middle of the grave, but she did not move any of Dot's daisies, at which she
looked very lovingly and tenderly.

As soon as they were gone, Dot came out from behind the hawthorn bush. She went up
to her little girl's grave, and kneeling on the grass beside it she smelt the white violets
and stroked them with her tiny hand. They made it look so much nicer, she thought; but
she felt very glad that the lady had liked her daisies. She would gather some fresh ones
to-morrow.

Dot walked home very slowly. She had so much to think over. She knew her little girl's
name now, and that she was fond of daisies. She would not forget that. Dot felt very
sorry for the poor lady; she wished she could tell her so. And then she began to wonder
what it was that her little girl had said the night before she died. It must be something
nice, Dot thought, to make the lady wipe her eyes and try to smile. Perhaps the little
girl had said she did not mind being put into the dark hole. Dot thought it could hardly
be that, for she felt sure she would mind it very much indeed. Dot was sure she would
be very frightened if she had to die, and old Solomon had to dig a grave for her. No, it
could not be that which Lilian had said. Perhaps Solomon was right, and the little girl
was asleep. If so, Dot hoped it would be a long, long time before she woke up again.

Solomon had left his work, or Dot would have told him about what she had seen. But it
was tea-time now, and she must go home. Her mother was standing at the door looking
out for her, and she called to the child to be quick and come in to tea.

Dot found her father at home, and they began their meal. But little Dot was so quiet,
and sat so still, that her father asked her what was the matter. Then she thought she
would ask him what she wanted to know, for he was very kind to her, and generally
tried to answer her questions.

So Dot told him about her little girl's grave, and what the lady and gentleman had
talked about, and she asked what he thought the little girl had said, which had made
her mother stop crying.

But Dot's father could not tell her. And when Dot said she was sure she would not like to
be put in a hole like that, her father only laughed, and told her not to trouble her little
head about it: she was too young to think of such things.

"But my little girl was only just about as big as me," said Dot, "'cause Mr. Solemn told
me so."

That was an argument which her father could not answer, so he told Dot to be quick
over her supper, and get to bed. And when she was asleep, he said to his wife that he
did not think the cemetery was a good place for his little girl to play in—it made her
gloomy. But Dot's mother said it was better than the street, and Dot was too light-
hearted to be dull long.

And whilst they were talking little Dot was dreaming of Lilian, and of what she had said
the night before she died.
CHAPTER V

DOT'S BUSY THOUGHTS

A DAY or two after, as Dot was putting fresh daisies on the little grave, she felt a hand
on her shoulder, and looking up she saw her little girl's mamma. She had come up very
quietly, and Dot was so intent on what she was doing that she had not heard her. It was
too late to run away; but the lady's face was so kind and loving that the child could not
be afraid. She took hold of Dot's little hand, and sat down beside her, and then she said
very gently—

"Is this the little girl who gathered the daisies?"

"Yes," said Dot shyly, "it was me."

The lady seemed very pleased, and she asked Dot what her name was, and where she
lived. Then she said—

"Dot, what was it made you bring these pretty flowers here?"

"Please," said the child, "it was 'cause Mr. Solemn said she was ever such a little girl—
maybe about as big as me."

"Who is Mr. Solemn?" asked the lady.


"IS THIS THE LITTLE GIRL WHO GATHERED THE DAISIES?"

"It's an old man—him as digs the graves; he made my little girl's grave," said Dot,
under her breath, "and he filled it up and all."

The tears came into the lady's eyes, and she stooped down and kissed the child.

Dot was beginning to feel quite at home with the little girl's mamma, and she stroked
the lady's soft glove with her tiny hand.

They sat quite still for some time. Dot never moved, and the lady had almost forgotten
her—she was thinking of her own little girl. The tears began to run down her cheeks,
though she tried to keep them back, and some of them fell upon Dot as she sat at her
feet.

"I was thinking of my little girl," said the lady, as Dot looked sorrowfully up to her face.

"Please," said Dot, "I wonder what your little girl said to you the night before she died?"
She thought perhaps it might comfort the lady to think of it, as it had done so the other
day.

The lady looked very surprised when Dot said this, as she had had no idea that the little
girl was near when she was talking to her husband.

"How did you know, Dot?" she asked.

"Please, I couldn't help it," said little Dot; "I was putting the daisies."

"Yes?" said the lady, and she waited for the child to go on.

"And I ran in there," said Dot, nodding at the hawthorn bush. "I heard you—and,
please, don't be angry."

"I am not angry," said the lady.

Dot looked in her face, and saw she was gazing at her with a very sweet smile.

"Then, please," said little Dot, "I would like very much to know what the little girl said."

"I will tell you, Dot," said the lady. "Come and sit on my knee."

There was a flat tombstone close by, on which they sat whilst the girl's mamma talked
to Dot. She found it very hard to speak about her child, it was so short a time since she
had died. But she tried her very best, for the sake of the little girl who had covered the
grave with daisies.

"Lilian was only ill a very short time," said the lady; "a week before she died she was
running about and playing—just as you have been doing to-day, Dot. But she took a bad
cold, and soon the doctor told me my little girl must die."

"Oh," said Dot, with a little sob, "I am so sorry for the poor little girl!"

"Lilian wasn't afraid to die, Dot," said the lady.


"Wasn't she?" said Dot. "I should be frightened ever so much—but maybe she'd never
seen Mr. Solemn bury anybody; maybe she didn't know she had to go into that dark
hole."

"Listen, Dot," said the lady, "and I will tell you what my little girl said the night before
she died."

"'Mamma,' she said, 'don't let Violet and Ethel think that I'm down deep in the
cemetery; but take them out, and show them the blue sky and all the white clouds, and
tell them, Little sister Lilian's up there with Jesus.' Violet and Ethel are my other little
girls, Dot."

"Yes," said Dot, in a whisper; "I saw them at the funeral."

"That is what my little girl said, which made me stop crying the other day."

Dot looked very puzzled. There was a great deal that she wanted to think over and to
ask Solomon about.

The lady was obliged to go home, for it was getting late. She kissed the child before she
went, and said she hoped Dot would see her little girl one day, above the blue sky.

Dot could not make out what the lady meant, nor what her little girl had meant the
night before she died. She wanted very much to hear more about her, and she hoped
the lady would soon come again.

"Mr. Solemn," said Dot the next day, as she was in her usual place on the top of one of
Solomon's graves, "didn't you say that my little girl was in that long box?"

"Yes," said Solomon—"yes, Dot, I said so, I believe."

"But my little girl's mamma says she isn't in there, Mr. Solemn, and my little girl said so
the night before she died."

"Where is she, then?" said Solomon.

"She's somewhere up there," said Dot, pointing with her finger to the blue sky.

"Oh, in heaven," said Solomon. "Yes, Dot, I suppose she is in heaven."

"How did she get there?" said Dot. "I want to know all about it, Mr. Solemn."

"Oh, I don't know," said the old man. "Good folks always go to heaven."

"Shall you go to heaven, Mr. Solemn, when you die?"

"I hope I shall, Dot, I'm sure," said the old man. "But there, run away a little; I want to
tidy round a bit."

Now, Solomon had very often "tidied round," as he called it, without sending little Dot
away; but he did not want her to ask him any more questions, and he hoped she would
forget it before she came back.

But Dot had not forgotten. She had not even been playing; she had been sitting on an
old tombstone, thinking about what Solomon had said. And as soon as he had finished

You might also like