|
|
And so, I have spent an entire day constructing a filter bank.
Actually constructing a bank of filters that split a signal into several
signals is pretty easy. Getting it so that adding those signals together
actually yields the original signal has taken me *an entire day* to day
right.
For the longest time, the wave kept coming out somewhat out-of-phase
with the original. Eventually I figured out that that's because I need
to shift the input signal in relation to the filter kernel (thus making
it technically non-causal).
And then the signal still doesn't "quite" match the original, especially
at low frequencies. A added another channel for very low frequencies,
and now the signals match in shape, but not quite in amplitude.
Another hour spent fiddling with scaling factors, and I discover that if
the 1x and 2x channels are set to half the amplitude of all the other
channels, I get a crisp, perfect signal match. Yay, me!! :-D
...Further testing reveals that while the filter bank does split the
signal into different parts, and adding them back together exactly
reproduces the original signal, each channel actually contains a fairly
wide collection of frequencies. For example, the 64x channel still
contains entirely too many high frequencies.
Damnit! >_<
I hypothesize that this is due to spectural leakage caused by the
rectangular window over the filter kernels. Maybe with a Blackman window
or something I can get channels that actually contain only certain
frequencies.
Hmm, and how much do you want to bet that as soon as I change the
details of my filter bank, the signal reconstruction will stop working
again?
I can't help feeling that somebody somewhere has already figured all
this stuff out, and if I could just get my hands on that information,
all of this stuff would suddenly seem a whole lot easier... :-(
Post a reply to this message
|
|