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