BOOK
Digital Signal Processing First, Global Edition
James H. McClellan | Ronald Schafer | Mark Yoder
(2016)
Additional Information
Book Details
Abstract
For introductory courses (freshman and sophomore courses) in Digital Signal Processing and Signals and Systems. Text may be used before the student has taken a course in circuits.
DSP First and its accompanying digital assets are the result of more than 20 years of work that originated from, and was guided by, the premise that signal processing is the best starting point for the study of electrical and computer engineering. The "DSP First" approach introduces the use of mathematics as the language for thinking about engineering problems, lays the groundwork for subsequent courses, and gives students hands-on experiences with MATLAB.
The Second Edition features three new chapters on the Fourier Series, Discrete-Time Fourier Transform, and the The Discrete Fourier Transform as well as updated labs, visual demos, an update to the existing chapters, and hundreds of new homework problems and solutions.
Table of Contents
Section Title | Page | Action | Price |
---|---|---|---|
Cover | Cover | ||
Title Page | 1 | ||
Copyright Page | 2 | ||
Contents | 3 | ||
PREFACE | 15 | ||
1 Introduction | 21 | ||
1-1 Mathematical Representation of Signals | 22 | ||
1-2 Mathematical Representation of Systems | 25 | ||
1-3 Systems as Building Blocks | 27 | ||
1-4 The Next Step | 28 | ||
2 Sinusoids | 29 | ||
2-1 Tuning-Fork Experiment | 30 | ||
2-2 Review of Sine and Cosine Functions | 32 | ||
2-3 Sinusoidal Signals | 34 | ||
2-3.1 Relation of Frequency to Period | 35 | ||
2-3.2 Phase and Time Shift | 37 | ||
2-4 Sampling and Plotting Sinusoids | 39 | ||
2-5 Complex Exponentials and Phasors | 41 | ||
2-5.1 Review of Complex Numbers | 42 | ||
2-5.2 Complex Exponential Signals | 43 | ||
2-5.3 The Rotating Phasor Interpretation | 45 | ||
2-5.4 Inverse Euler Formulas | 47 | ||
2-6 Phasor Addition | 48 | ||
2-6.1 Addition of Complex Numbers | 49 | ||
2-6.2 Phasor Addition Rule | 49 | ||
2-6.3 Phasor Addition Rule: Example | 51 | ||
2-6.4 MATLAB Demo of Phasors | 53 | ||
2-6.5 Summary of the Phasor Addition Rule | 53 | ||
2-7 Physics of the Tuning Fork | 54 | ||
2-7.1 Equations from Laws of Physics | 54 | ||
2-7.2 General Solution to the Differential Equation | 57 | ||
2-7.3 Listening to Tones | 58 | ||
2-8 Time Signals: More Than Formulas | 58 | ||
2-9 Summary and Links | 59 | ||
2-10 Problems | 60 | ||
3 Spectrum Representation | 69 | ||
3-1 The Spectrum of a Sum of Sinusoids | 70 | ||
3-1.1 Notation Change | 72 | ||
3-1.2 Graphical Plot of the Spectrum | 72 | ||
3-1.3 Analysis versus Synthesis | 73 | ||
3-2 Sinusoidal Amplitude Modulation | 74 | ||
3-2.1 Multiplication of Sinusoids | 74 | ||
3-2.2 Beat Note Waveform | 75 | ||
3-2.3 Amplitude Modulation | 78 | ||
3-2.4 AM Spectrum | 79 | ||
3-2.5 The Concept of Bandwidth | 80 | ||
3-3 Operations on the Spectrum | 81 | ||
3-3.1 Scaling or Adding a Constant | 81 | ||
3-3.2 Adding Signals | 82 | ||
3-3.3 Time-Shifting x(t) Multiplies a by a[sub(k)] Complex Exponential | 84 | ||
3-3.4 Differentiating x(t) Multiplies a[sub(k)] by (j2& | 84 | ||
3-3.5 Frequency Shifting | 85 | ||
3-4 Periodic Waveforms | 87 | ||
3-4.1 Synthetic Vowel | 88 | ||
3-4.2 Sine-Cubed Signal | 91 | ||
3-4.3 Example of a Non-Periodic Signal | 92 | ||
3-5 Fourier Series | 94 | ||
3-5.1 Fourier Series: Analysis | 95 | ||
3-5.2 Analysis of a Full-Wave Rectified Sine Wave | 95 | ||
3-5.3 Spectrum of the FWRS Fourier Series | 98 | ||
3-5.3.1 DC Value of Fourier Series | 98 | ||
3-5.3.2 Finite Synthesis of a Full-Wave Rectified Sine | 99 | ||
3-6 Time–Frequency Spectrum | 101 | ||
3-6.1 Stepped Frequency | 103 | ||
3-6.2 Spectrogram Analysis | 103 | ||
3-7 Frequency Modulation: Chirp Signals | 105 | ||
3-7.1 Chirp or Linearly Swept Frequency | 105 | ||
3-7.2 A Closer Look at Instantaneous Frequency | 107 | ||
3-8 Summary and Links | 109 | ||
3-9 Problems | 110 | ||
4 Sampling and Aliasing | 122 | ||
4-1 Sampling | 123 | ||
4-1.1 Sampling Sinusoidal Signals | 125 | ||
4-1.2 The Concept of Aliases | 127 | ||
4-1.3 Sampling and Aliasing | 129 | ||
4-1.4 Spectrum of a Discrete-Time Signal | 129 | ||
4-1.5 The Sampling Theorem | 130 | ||
4-1.6 Ideal Reconstruction | 131 | ||
4-2 Spectrum View of Sampling and Reconstruction | 133 | ||
4-2.1 Spectrum of a Discrete-Time Signal Obtained by Sampling | 133 | ||
4-2.2 Over-Sampling | 134 | ||
4-2.3 Aliasing Due to Under-Sampling | 135 | ||
4-2.4 Folding Due to Under-Sampling | 136 | ||
4-2.5 Maximum Reconstructed Frequency | 138 | ||
4-2.6 Sampling and Reconstruction GUI | 140 | ||
4-3 Discrete-to-Continuous Conversion | 141 | ||
4-3.1 Interpolation with Pulses | 141 | ||
4-3.2 Zero-Order Hold Interpolation | 142 | ||
4-3.3 Linear Interpolation | 143 | ||
4-3.4 Cubic-Spline Interpolation | 144 | ||
4-3.5 Over-Sampling Aids Interpolation | 145 | ||
4-3.6 Ideal Bandlimited Interpolation | 147 | ||
4-4 The Sampling Theorem | 148 | ||
4-5 Strobe Demonstration | 149 | ||
4-5.1 Spectrum Interpretation | 153 | ||
4-6 Summary and Links | 155 | ||
4-7 Problems | 155 | ||
5 FIR Filters | 167 | ||
5-1 Discrete-Time Systems | 168 | ||
5-2 The Running-Average Filter | 169 | ||
5-3 The General FIR Filter | 173 | ||
5-3.1 An Illustration of FIR Filtering | 176 | ||
5-4 The Unit Impulse Response and Convolution | 178 | ||
5-4.1 Unit Impulse Sequence | 178 | ||
5-4.2 Unit Impulse Response Sequence | 179 | ||
5-4.2.1 The Unit-Delay System | 181 | ||
5-4.3 FIR Filters and Convolution | 181 | ||
5-4.3.1 Computing the Output of a Convolution | 182 | ||
5-4.3.2 The Length of a Convolution | 183 | ||
5-4.3.3 Convolution in MATLAB | 184 | ||
5-4.3.4 Polynomial Multiplication in MATLAB | 184 | ||
5-4.3.5 Filtering the Unit-Step Signal | 185 | ||
5-4.3.6 Commutative Property of Convolution | 186 | ||
5-4.3.7 MATLAB GUI for Convolution | 187 | ||
5-5 Implementation of FIR Filters | 189 | ||
5-5.1 Building Blocks | 189 | ||
5-5.1.1 Multiplier | 189 | ||
5-5.1.2 Adder | 190 | ||
5-5.1.3 Unit Delay | 190 | ||
5-5.2 Block Diagrams | 190 | ||
5-5.2.1 Other Block Diagrams | 192 | ||
5-5.2.2 Internal Hardware Details | 194 | ||
5-6 Linear Time-Invariant (LTI) Systems | 194 | ||
5-6.1 Time Invariance | 195 | ||
5-6.2 Linearity | 196 | ||
5-6.3 The FIR Case | 197 | ||
5-7 Convolution and LTI Systems | 198 | ||
5-7.1 Derivation of the Convolution Sum | 199 | ||
5-7.2 Some Properties of LTI Systems | 200 | ||
5-8 Cascaded LTI Systems | 202 | ||
5-9 Example of FIR Filtering | 204 | ||
5-10 Summary and Links | 207 | ||
5-11 Problems | 207 | ||
6 Frequency Response of FIR Filters | 214 | ||
6-1 Sinusoidal Response of FIR Systems | 215 | ||
6-2 Superposition and the Frequency Response | 218 | ||
6-3 Steady-State and Transient Response | 221 | ||
6-4 Properties of the Frequency Response | 223 | ||
6-4.1 Relation to Impulse Response and Difference Equation | 223 | ||
6-4.2 Periodicity of H(e[sup(j& | 225 | ||
6-4.3 Conjugate Symmetry | 225 | ||
6-5 Graphical Representation of the Frequency Response | 226 | ||
6-5.1 Delay System | 226 | ||
6-5.2 First-Difference System | 227 | ||
6-5.3 A Simple Lowpass Filter | 229 | ||
6-6 Cascaded LTI Systems | 232 | ||
6-7 Running-Sum Filtering | 234 | ||
6-7.1 Plotting the Frequency Response | 235 | ||
6-7.2 Cascade of Magnitude and Phase | 239 | ||
6-7.3 Frequency Response of Running Averager | 240 | ||
6-7.4 Experiment: Smoothing an Image | 240 | ||
6-8 Filtering Sampled Continuous-Time Signals | 244 | ||
6-8.1 Example: A Lowpass Averager for Continuous-Time Signals | 245 | ||
6-8.2 Interpretation of Delay | 246 | ||
6-9 Summary and Links | 249 | ||
6-10 Problems | 250 | ||
7 Discrete-Time Fourier Transform | 259 | ||
7-1 DTFT: Fourier Transform for Discrete-Time Signals | 260 | ||
7-1.1 Forward DTFT | 261 | ||
7-1.2 DTFT of a Shifted Impulse Sequence | 261 | ||
7-1.3 Linearity of the DTFT | 262 | ||
7-1.4 Uniqueness of the DTFT | 263 | ||
7-1.5 DTFT of a Pulse | 263 | ||
7-1.6 DTFT of a Right-Sided Exponential Sequence | 264 | ||
7-1.7 Existence of the DTFT | 265 | ||
7-1.8 The Inverse DTFT | 266 | ||
7-1.9 Bandlimited DTFT | 267 | ||
7-1.10 Inverse DTFT for the Right-Sided Exponential | 270 | ||
7-1.11 The DTFT Spectrum | 270 | ||
7-2 Properties of the DTFT | 271 | ||
7-2.1 Linearity Property | 272 | ||
7-2.2 Time-Delay Property | 272 | ||
7-2.3 Frequency-Shift Property | 273 | ||
7-2.3.1 DTFT of a Finite-Length Complex Exponential | 273 | ||
7-2.3.2 DTFT of a Finite-Length Real Cosine Signal | 275 | ||
7-2.4 Convolution and the DTFT | 275 | ||
7-2.4.1 Filtering is Convolution | 277 | ||
7-2.5 Energy Spectrum and the Autocorrelation Function | 277 | ||
7-2.5.1 Autocorrelation Function | 278 | ||
7-3 Ideal Filters | 279 | ||
7-3.1 Ideal Lowpass Filter | 280 | ||
7-3.2 Ideal Highpass Filter | 282 | ||
7-3.3 Ideal Bandpass Filter | 283 | ||
7-4 Practical FIR Filters | 284 | ||
7-4.1 Windowing | 284 | ||
7-4.2 Filter Design | 285 | ||
7-4.2.1 Window the Ideal Impulse Response | 286 | ||
7-4.2.2 Frequency Response of Practical Filters | 286 | ||
7-4.2.3 Passband Defined for the Frequency Response | 288 | ||
7-4.2.4 Stopband Defined for the Frequency Response | 289 | ||
7-4.2.5 Transition Zone of the LPF | 290 | ||
7-4.2.6 Summary of Filter Specifications | 291 | ||
7-4.3 GUI for Filter Design | 291 | ||
7-5 Table of Fourier Transform Properties and Pairs | 292 | ||
7-6 Summary and Links | 293 | ||
7-7 Problems | 294 | ||
8 Discrete Fourier Transform | 301 | ||
8-1 Discrete Fourier Transform (DFT) | 302 | ||
8-1.1 The Inverse DFT | 304 | ||
8-1.2 DFT Pairs from the DTFT | 306 | ||
8-1.2.1 DFT of Shifted Impulse | 306 | ||
8-1.2.2 DFT of Complex Exponential | 307 | ||
8-1.3 Computing the DFT | 308 | ||
8-1.4 Matrix Form of the DFT and IDFT | 309 | ||
8-2 Properties of the DFT | 310 | ||
8-2.1 DFT Periodicity for X[k] | 311 | ||
8-2.2 Negative Frequencies and the DFT | 311 | ||
8-2.3 Conjugate Symmetry of the DFT | 312 | ||
8-2.3.1 Ambiguity at X[N/2] | 313 | ||
8-2.4 Frequency-Domain Sampling and Interpolation | 314 | ||
8-2.5 DFT of a Real Cosine Signal | 316 | ||
8-3 Inherent Time-Domain Periodicity of x[n] in the DFT | 318 | ||
8-3.1 DFT Periodicity for x[n] | 319 | ||
8-3.2 The Time Delay Property for the DFT | 321 | ||
8-3.2.1 Zero Padding | 323 | ||
8-3.3 The Convolution Property for the DFT | 324 | ||
8-4 Table of Discrete Fourier Transform Properties and Pairs | 326 | ||
8-5 Spectrum Analysis of Discrete Periodic Signals | 327 | ||
8-5.1 Periodic Discrete-Time Signal: Discrete Fourier Series | 328 | ||
8-5.2 Sampling Bandlimited Periodic Signals | 331 | ||
8-5.3 Spectrum Analysis of Periodic Signals | 334 | ||
8-6 Windows | 337 | ||
8-6.1 DTFT of Windows | 339 | ||
8-7 The Spectrogram | 342 | ||
8-7.1 An Illustrative Example | 343 | ||
8-7.2 Time-Dependent DFT | 345 | ||
8-7.3 The Spectrogram Display | 348 | ||
8-7.4 Interpretation of the Spectrogram | 348 | ||
8-7.4.1 Frequency Resolution | 350 | ||
8-7.5 Spectrograms in MATLAB | 353 | ||
8-8 The Fast Fourier Transform (FFT) | 354 | ||
8-8.1 Derivation of the FFT | 354 | ||
8-8.1.1 FFT Operation Count | 357 | ||
8-9 Summary and Links | 358 | ||
8-10 Problems | 358 | ||
9 z-Transforms | 367 | ||
9-1 Definition of the z-Transform | 368 | ||
9-2 Basic z-Transform Properties | 371 | ||
9-2.1 Linearity Property of the z-Transform | 371 | ||
9-2.2 Time-Delay Property of the z-Transform | 371 | ||
9-2.3 A General z-Transform Formula | 372 | ||
9-3 The z-Transform and Linear Systems | 373 | ||
9-3.1 Unit-Delay System | 374 | ||
9-3.2 The z[sup(-1)] Notation in Block Diagrams | 374 | ||
9-3.3 The z-Transform of an FIR Filter | 375 | ||
9-3.4 z-Transform of the Impulse Response | 375 | ||
9-3.5 Roots of a z-Transform Polynomial | 376 | ||
9-4 Convolution and the z-Transform | 378 | ||
9-4.1 Cascading Systems | 381 | ||
9-4.2 Factoring z-Polynomials | 383 | ||
9-4.3 Deconvolution | 384 | ||
9-5 Relationship Between the z-Domain and the Domain | 384 | ||
9-5.1 The z-Plane and the Unit Circle | 386 | ||
9-5.2 The z-Transform and the DFT | 387 | ||
9-6 The Zeros and Poles of H(z) | 389 | ||
9-6.1 Pole-Zero Plot | 390 | ||
9-6.2 Significance of the Zeros of H(z) | 391 | ||
9-6.3 Nulling Filters | 392 | ||
9-6.4 Graphical Relation Between z and & | 393 | ||
9-6.5 Three-Domain Movies | 396 | ||
9-7 Simple Filters | 397 | ||
9-7.1 Generalize the L-Point Running-Sum Filter | 397 | ||
9-7.2 A Complex Bandpass Filter | 399 | ||
9-7.3 A Bandpass Filter with Real Coefficients | 399 | ||
9-8 Practical Bandpass Filter Design | 401 | ||
9-9 Properties of Linear-Phase Filters | 404 | ||
9-9.1 The Linear-Phase Condition | 404 | ||
9-9.2 Locations of the Zeros of FIR Linear- Phase Systems | 405 | ||
9-10 Summary and Links | 406 | ||
9-11 Problems | 407 | ||
10 IIR Filters | 414 | ||
10-1 The General IIR Difference Equation | 415 | ||
10-2 Time-Domain Response | 416 | ||
10-2.1 Linearity and Time Invariance of IIR Filters | 418 | ||
10-2.2 Impulse Response of a First-Order IIR System | 419 | ||
10-2.3 Response to Finite-Length Inputs | 421 | ||
10-2.4 Step Response of a First-Order Recursive System | 422 | ||
10-3 System Function of an IIR Filter | 425 | ||
10-3.1 The General First-Order Case | 425 | ||
10-3.2 H(z) from the Impulse Response | 427 | ||
10-4 The System Function and Block Diagram Structures | 428 | ||
10-4.1 Direct Form I Structure | 428 | ||
10-4.2 Direct Form II Structure | 429 | ||
10-4.3 The Transposed Form Structure | 431 | ||
10-5 Poles and Zeros | 432 | ||
10-5.1 Roots in MATLAB | 434 | ||
10-5.2 Poles or Zeros at z = 0 or & | 434 | ||
10-5.3 Output Response from Pole Location | 435 | ||
10-6 Stability of IIR Systems | 436 | ||
10-6.1 The Region of Convergence and Stability | 438 | ||
10-7 Frequency Response of an IIR Filter | 440 | ||
10-7.1 Frequency Response Using MATLAB | 441 | ||
10-7.2 Three-Dimensional Plot of a System Function | 443 | ||
10-8 Three Domains | 444 | ||
10-9 The Inverse z-Transform and Applications | 446 | ||
10-9.1 Revisiting the Step Response of a First-Order System | 446 | ||
10-9.2 A General Procedure for Inverse z-Transformation | 449 | ||
10-10 Steady-State Response and Stability | 451 | ||
10-11 Second-Order Filters | 455 | ||
10-11.1 z-Transform of Second-Order Filters | 455 | ||
10-11.2 Structures for Second-Order IIR Systems | 456 | ||
10-11.3 Poles and Zeros | 458 | ||
10-11.4 Impulse Response of a Second-Order IIR System | 460 | ||
10-11.4.1 Distinct Real Poles | 461 | ||
10-11.5 Complex Poles | 462 | ||
10-12 Frequency Response of Second-Order IIR Filter | 466 | ||
10-12.1 Frequency Response via MATLAB | 467 | ||
10-12.2 3-dB Bandwidth | 468 | ||
10-12.3 Three-Dimensional Plot of a System Function | 470 | ||
10-12.4 Pole-Zero Placing with the PeZ GUI | 472 | ||
10-13 Example of an IIR Lowpass Filter | 474 | ||
10-14 Summary and Links | 476 | ||
10-15 Problems | 477 | ||
A: Complex Numbers | 489 | ||
A-1 Introduction | 490 | ||
A-2 Notation for Complex Numbers | 491 | ||
A-2.1 Rectangular Form | 491 | ||
A-2.2 Polar Form | 492 | ||
A-2.3 Conversion: Rectangular and Polar | 492 | ||
A-2.4 Difficulty in Second or Third Quadrant | 494 | ||
A-3 Euler’s Formula | 495 | ||
A-3.1 Inverse Euler Formulas | 496 | ||
A-4 Algebraic Rules for Complex Numbers | 496 | ||
A-4.1 Complex Number Exercises | 498 | ||
A-5 Geometric Views of Complex Operations | 500 | ||
A-5.1 Geometric View of Addition | 500 | ||
A-5.2 Geometric View of Subtraction | 501 | ||
A-5.3 Geometric View of Multiplication | 502 | ||
A-5.4 Geometric View of Division | 502 | ||
A-5.5 Geometric View of the Inverse, z[sup(-1)] | 503 | ||
A-5.6 Geometric View of the Conjugate, z[sup(*)] | 503 | ||
A-6 Powers and Roots | 504 | ||
A-6.1 Roots of Unity | 505 | ||
A-6.1.1 Procedure for Finding Multiple Roots | 506 | ||
A-7 Summary and Links | 508 | ||
A-8 Problems | 508 | ||
B: Programming in MATLAB | 511 | ||
B-1 MATLAB Help | 512 | ||
B-2 Matrix Operations and Variables | 512 | ||
B-2.1 The Colon Operator | 513 | ||
B-2.2 Matrix and Array Operations | 514 | ||
B-2.2.1 A Review of Matrix Multiplication | 514 | ||
B-2.2.2 Pointwise Array Operations | 515 | ||
B-3 Plots and Graphics | 516 | ||
B-3.1 Figure Windows | 516 | ||
B-3.2 Multiple Plots | 517 | ||
B-3.3 Printing and Saving Graphics | 517 | ||
B-4 Programming Constructs | 517 | ||
B-4.1 MATLAB Built-In Functions | 518 | ||
B-4.2 Program Flow | 518 | ||
B-5 MATLAB Scripts | 518 | ||
B-6 Writing a MATLAB Function | 519 | ||
B-6.1 Creating a Clip Function | 519 | ||
B-6.2 Debugging a MATLAB M-file | 521 | ||
B-7 Programming Tips | 522 | ||
B-7.1 Avoiding Loops | 522 | ||
B-7.2 Repeating Rows or Columns | 523 | ||
B-7.3 Vectorizing Logical Operations | 524 | ||
B-7.4 Creating an Impulse | 525 | ||
B-7.5 The Find Function | 525 | ||
B-7.6 Seek to Vectorize | 526 | ||
B-7.7 Programming Style | 526 | ||
C: Fourier Series | 527 | ||
C-1 Fourier Series Derivation | 528 | ||
C-1.1 Fourier Integral Derivation | 528 | ||
C-2 Examples of Fourier Analysis | 531 | ||
C-2.1 The Pulse Wave | 534 | ||
C-2.1.1 Spectrum of a Pulse Wave | 536 | ||
C-2.1.2 Finite Synthesis of a Pulse Wave | 537 | ||
C-2.2 Triangular Wave | 538 | ||
C-2.2.1 Spectrum of a Triangular Wave | 540 | ||
C-2.2.2 Finite Synthesis of a Triangular Wave | 540 | ||
C-2.3 Half-Wave Rectified Sine | 541 | ||
C-2.3.1 Finite Synthesis of a Half-Wave Rectified Sine | 543 | ||
C-3 Operations on Fourier Series | 544 | ||
C-3.1 Scaling or Adding a Constant | 544 | ||
C-3.2 Adding Signals | 545 | ||
C-3.3 Time-Scaling Property | 546 | ||
C-3.4 Time-Shifting Property | 547 | ||
C-3.5 Differentiation Property | 548 | ||
C-3.6 Frequency-Shifting Property and Multiplying by a Sinusoid | 549 | ||
C-4 Average Power, Convergence, and Optimality | 551 | ||
C-4.1 Derivation of Parseval’s Theorem | 554 | ||
C-4.2 Convergence of Fourier Synthesis | 554 | ||
C-4.3 Minimum Mean-Square Approximation | 556 | ||
C-5 The Spectrum in Pulsed-Doppler Radar Waveform Design | 558 | ||
C-5.1 Measuring Range | 558 | ||
C-5.2 Measuring Velocity from Doppler Shift | 559 | ||
C-5.3 Pulsed-Doppler Radar Waveform | 561 | ||
C-5.4 Measuring the Doppler Shift | 562 | ||
C-6 Problems | 563 | ||
D: Laboratory Projects | 571 | ||
Index | 574 | ||
A | 574 | ||
B | 574 | ||
C | 575 | ||
D | 575 | ||
E | 576 | ||
F | 576 | ||
G | 577 | ||
H | 578 | ||
I | 578 | ||
L | 578 | ||
M | 578 | ||
N | 579 | ||
O | 579 | ||
P | 579 | ||
R | 579 | ||
S | 580 | ||
T | 581 | ||
U | 582 | ||
V | 582 | ||
W | 582 | ||
Z | 582 |