Preface
1. Introduction and objectives
2. Receiver design for discrete-time observations: first layer
3. Receiver design for the continuous-time AWGN channel: second layer
4. Signal design trade-offs
5. Symbol-by-symbol on a pulse train: second layer revisited
6. Convolutional coding and Viterbi decoding: first layer revisited
7. Passband communication via up/down conversion: third layer
Bibliography