Utah State University |
---|
Department of Electrical and Computer Engineering |
ECE 3640 - Discrete-time Signals & Systems |
F. T. Ulaby and A. E. Yagle, "Signals and Systems: Theory and Applications"
P. Prandoni and M. Vetterli, "Signal Processing for Communications"
Andreas Antoniou, "Digital Filters: Analysis, Design, and Signal Processing Applications" (available through USU's license to McGraw Hill Access Engineering)
We have an excellent textbook for this class. However, the authors present the topics in the wrong order. We will cover the textbook chapters in the order given below.
Mathematical preliminaries (should be review, see links below)
Discrete-time signals in the time domain (extension of continuous-time signals ideas) [Holton 1]
Discrete-time systems in the time domain (convolution, impulse response, filtering) [Holton 2]
Discrete-time Fourier transform (DTFT) [Holton 3]
Sampling and reconstruction [Holton 6]
Discrete Fourier transform (DFT) [Holton 10]
Signal analysis [Holton 14]
Z-transform (ZT) [Holton 4]
System analysis and design [Holton 5, 7, 8] (FIR filter design video lecture)
Lecture video page may be accessed here
Discrete-time signals in the time domain
Video: Discrete-Time Signals: Definition and Examples [22 min. @ 1.5x]
Video: Discrete-Time Signals: Operations and Common Signals [24 min. @ 1.5x]
Video: Discrete-Time Signals: Classification and Decompositions [12 min. @ 1.5x]
Mathematical preliminaries
Introduction to discrete-time signals and systems (old stuff)
Notes on discrete-time systems in the time domain Slides Video
Notes on impulse response for discrete-time LTI systems Slides
Notes on the mechanics of convolution Slides, Picture, Spreadsheet
Convolution as matrix-vector product
Transient outputs, valid outputs
Tableau method
Cascades of LTI systems Slides
LTI system topics
LTI Difference Equations Slides
Notes on the DTFT (old stuff)
DTFT of
Notes on the
Convolution
Matlab script (illustrates startup and ending transients and valid convolution outputs)
DTFT
DFT
Adjustable BPF
Audio out (500 to 2000 Hz pass band)
Sampling
FIR filter design
IEEE Signal Processing Society YouTube Channel
IEEE Signal Processing Society
Signal processing and machine learning
What are audio effects? Sound basics with Stella - Episode 1
Equalization explained. Sound basics with Stella - Episode 2
C Programming (WikiBooks)
A Little C Primer (WikiBooks)
(http://www.cprogramming.com/) (click on C tutorial in sidebar)
www.tutorialspoint.com/cprogramming (lots of links in the sidebar and a search box in the top right)
www.tutorialspoint.com/c_standard_library (all the standard C libraries)
The C Programming Language, K&R (book available through USU Library)
Complete 4 hour video course on C (video available through USU Library)
www.cplusplus.com (great site for C++, but you can search for elements of C, e.g. fread, fwrite, etc.)
Fundamentals of Signals and Systems (2 ed) by Kamen and Heck
Matlab tutorial (Many tutorials can be found on the Web. Here is one example.)
// You may need to include the full file path to this .h file
int main(void)
{
fftw_complex *in, *out;
fftw_plan p;
int N = 1024;
in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);
out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);
// Fill the in array with signal values
p = fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_ESTIMATE);
fftw_execute(p); /* repeat as needed */
fftw_destroy_plan(p);
fftw_free(in); fftw_free(out);
return 1;
}
KISS FFT (Here is a sample program kfft_test.c)
x
// This file is named: kfft_test.c
// Build using command line: gcc -o kfft_test kfft_test.c kiss_fft.c
// Run the program using command line: ./kfft_test
// Output:
// |X[0]|^2 = 0.00000
// |X[1]|^2 = 4.00000
// |X[2]|^2 = 0.00000
// |X[3]|^2 = 4.00000
// x[0]= 1.00000+j 0.00000, y[0]= 1.00000+j 0.00000
// x[1]= 0.00000+j 0.00000, y[1]= 0.00000+j 0.00000
// x[2]= -1.00000+j 0.00000, y[2]= -1.00000+j 0.00000
// x[3]= 0.00000+j 0.00000, y[3]= 0.00000+j 0.00000
int main(void) {
int k;
// Set up buffers for FFT
int nfft = 4;
kiss_fft_cfg fft = kiss_fft_alloc(nfft,0,NULL,NULL);
kiss_fft_cfg ifft = kiss_fft_alloc(nfft,1,NULL,NULL);
kiss_fft_cpx *x = KISS_FFT_MALLOC(nfft * sizeof(kiss_fft_cpx));
kiss_fft_cpx *X = KISS_FFT_MALLOC(nfft * sizeof(kiss_fft_cpx));
kiss_fft_cpx *y = KISS_FFT_MALLOC(nfft * sizeof(kiss_fft_cpx));
kiss_fft_cpx *Y = KISS_FFT_MALLOC(nfft * sizeof(kiss_fft_cpx));
// Fill up the real and imaginary parts of the input signal
x[0].r = 1.0; x[0].i = 0.0;
x[1].r = 0.0; x[1].i = 0.0;
x[2].r = -1.0; x[2].i = 0.0;
x[3].r = 0.0; x[3].i = 0.0;
// Compute the FFT
kiss_fft(fft,x,X);
// Copy X to Y
for(k=0; k<nfft; k++) {
Y[k].r = X[k].r;
Y[k].i = X[k].i;
printf("|X[%d]|^2 = %10.5f\n",k,X[k].r*X[k].r+X[k].i*X[k].i);
}
// Compute the inverse FFT
kiss_fft(ifft,Y,y);
for(k=0; k<nfft; k++) {
y[k].r /= nfft;
y[k].i /= nfft;
}
// Print out stuff
for(k=0; k<nfft; k++) {
printf("x[%d]=%10.5f+j%10.5f, y[%d]=%10.5f+j%10.5f\n", k,x[k].r,x[k].i,k,y[k].r,y[k].i);
}
// Deallocate memory
free( fft);
free(ifft);
kiss_fft_cleanup();
return 1;
}
Formulas for transforms: CTFS, CTFT, Laplace transform, DTFT, DFT,
Mathematical principles for deriving transform properties, symmetries and pairs
Geometric sum/series formulas:
Sine construction formula: