Here's an idea. You could write a computer program which implements the "overlap and save" method of linear convolution. The "overlap and save" method allows you to do digital filtering with an finite impulse response (FIR) filter (you can make the impulse response of the filter yourself*). It's more efficient than straight, linear convolution because it uses Fast Fourier Transforms (FFTs).
You can define the impulse response of the filter yourself*, suppose it has
M samples. You'll then want to zero-pad that out to
N samples, where
N is a power of 2. Typically you'll want
N to be several times larger than
M.
*(You can even apply Hamming or Hanning windowing to the filter, if you've covered that in your coursework, and if you want to get fancy).
Then you take
N samples of the input signal you want to filter. Take the Discrete Fourier Transform (DFT, using the FFT algorithm) of that and multiply it times the DFT of your zero-padded impulse response [Edit: btw, you only need to take the DFT of your zero-padded impulse response once -- you'll use the same results of that over and over again]. Then take the inverse DFT to get a chunk of filtered output.
Since the DFT uses circular convolution -- not linear convolution -- you'll then need to throw away the first
M-1 samples of the output. But that still leaves you with
N -
M + 1 good samples for that block.
When taking the next block of input samples, rather than increment by
N, you'll need to increment your starting index by only
N -
M + 1 (although you'll still be taking
N samples total), since you'll be anticipating throwing away some of those samples (
M - 1 of them) of the output.
In the end, you just concatenate these
N -
M + 1 blocks of output to obtain your final output signal.
http://en.wikipedia.org/wiki/Overlap%E2%80%93save_method
There's a nearly equivalent method called "overlap and add" if you'd prefer.
Anyway, just an idea.
