[sdiy] Multi-output comb filter?
cheater00 cheater00
cheater00 at gmail.com
Tue May 22 12:00:29 CEST 2018
So what I thought might be feasible would be to eg get a single peak at 1
Hz, create a 1 Hz comb filter, then subtract a 2 Hz comb from it so you're
left with peaks at 1, 3, 5, 7, etc Hz, then subtract a 3 Hz comb, so you're
left with 1, 5, -6, 7, 9, 11, -12, etc Hz, then subtract a 5 Hz comb etc.
If you look at the first 249 such filters (that's what I could quickly
calculate), you will get these coefficients:
+--0-+-00+-0-++0-0-0++
-00+00---0+++0-++0---0
0+-000+0-0+0++-0-+00+-
-0+--0-+00+--00+-0+++0
-0+0+++0-000---0-+-0--
+0--+00++00++000-0+--0
++00---0+++0++00-0-00-
+0-++0+0-0-+-00-00--00
++-0--+0+-+00--0-+-0-0
-0+++0++00++-0+++0+++0
+--00+-0---0-0+0+--0-0
000-+0
Meaning: 1 * comb at 1 Hz, -1 * comb at 2 Hz, -1 * comb at 3 Hz, 0 * comb
at 4 Hz, -1 * comb at 5 Hz, 1 * comb at 6 Hz, etc.
I assume this can be found for each nth peak, and a lot of the data will be
shared. Note you still need (nyquist/f) delays with 1 bucket, 2 buckets,
..., nyquist buckets. That's a good 468 megabytes at a 44.1 kHz sampling
frequency. I wonder if this too can be shared somehow.
I don't really see a pattern to the coefficients - i used a program to find
them - does anyone else see any rule?
The program can be found here:
https://lpaste.net/6557071818560110592
You have to use the deepseq package.
Change endHz to 250 and run firstPeakOnly from the repl. I'm not sure if
the last coeff will be the same as with 22050, as I haven't calculated it
up to that number, and I don't really have time to optimize this any more.
On Tue, 22 May 2018 07:37 , <rsdio at audiobanshee.com> wrote:
> On May 21, 2018, at 10:04 PM, Corey K <coreyker at gmail.com> wrote:
> > Option 2: write out the Z-transform for your comb filter. There will be
> > one pole per peak, and these will be spaced at equal angles around a
> > circle in the complex place. Add a zero to perfectly cancel the pole
> > corresponding to the peak you want removed. This will in turn
> > correspond to an FIR filter that you can run before or after your comb
> > filter.
>
> Hereâs an exercise that might prove interesting:
>
> Write out the Z-transform for an ideal comb filter. Then convert this to
> an FIR filter without any modification.
>
> My question is this: Is the math perfect enough that youâd end up with a
> single delay tap? I mean, thatâs what a comb filter is, so I wonder whether
> the Z-transform to FIR would actually guide you to the simplest
> implementation. Granted, the FIR would probably be equivalent to a string
> of individual Z-1 delays, but theyâre equivalent to a single, long delay so
> long as nothing taps the intermediate samples.
>
> I have a suspicion that things wouldnât quite work out so perfectly, and
> thereâs be lots of taps, each with their own weight, and it wouldnât come
> out looking like the simple single-delay-plus-mixer circuit.
>
> Has anyone gone through the exercise to see how it turns out?
>
> Brian
>
>
> _______________________________________________
> Synth-diy mailing list
> Synth-diy at synth-diy.org
> http://synth-diy.org/mailman/listinfo/synth-diy
>
-------------- next part --------------
So what I thought might be feasible would be to eg get a single peak at
1 Hz, create a 1 Hz comb filter, then subtract a 2 Hz comb from it so
you're left with peaks at 1, 3, 5, 7, etc Hz, then subtract a 3 Hz
comb, so you're left with 1, 5, -6, 7, 9, 11, -12, etc Hz, then
subtract a 5 Hz comb etc. If you look at the first 249 such filters
(that's what I could quickly calculate), you will get these
coefficients:
+--0-+-00+-0-++0-0-0++
-00+00---0+++0-++0---0
0+-000+0-0+0++-0-+00+-
-0+--0-+00+--00+-0+++0
-0+0+++0-000---0-+-0--
+0--+00++00++000-0+--0
++00---0+++0++00-0-00-
+0-++0+0-0-+-00-00--00
++-0--+0+-+00--0-+-0-0
-0+++0++00++-0+++0+++0
+--00+-0---0-0+0+--0-0
000-+0
Meaning: 1 * comb at 1 Hz, -1 * comb at 2 Hz, -1 * comb at 3 Hz, 0 *
comb at 4 Hz, -1 * comb at 5 Hz, 1 * comb at 6 Hz, etc.
I assume this can be found for each nth peak, and a lot of the data
will be shared. Note you still need (nyquist/f) delays with 1 bucket, 2
buckets, ..., nyquist buckets. That's a good 468 megabytes at a 44.1
kHz sampling frequency. I wonder if this too can be shared somehow.
I don't really see a pattern to the coefficients - i used a program to
find them - does anyone else see any rule?
The program can be found here:
[1]https://lpaste.net/6557071818560110592
You have to use the deepseq package.
Change endHz to 250 and run firstPeakOnly from the repl. I'm not sure
if the last coeff will be the same as with 22050, as I haven't
calculated it up to that number, and I don't really have time to
optimize this any more.
On Tue, 22 May 2018 07:37 , <[2]rsdio at audiobanshee.com> wrote:
On May 21, 2018, at 10:04 PM, Corey K <[3]coreyker at gmail.com> wrote:
>Â Â Option 2: write out the Z-transform for your comb filter.
There will be
>Â Â one pole per peak, and these will be spaced at equal angles
around a
>Â Â circle in the complex place. Add a zero to perfectly cancel
the pole
>Â Â corresponding to the peak you want removed. This will in turn
>Â Â correspond to an FIR filter that you can run before or after
your comb
>Â Â filter.
Hereâs an exercise that might prove interesting:
Write out the Z-transform for an ideal comb filter. Then convert
this to an FIR filter without any modification.
My question is this: Is the math perfect enough that youâd end up
with a single delay tap? I mean, thatâs what a comb filter is, so I
wonder whether the Z-transform to FIR would actually guide you to
the simplest implementation. Granted, the FIR would probably be
equivalent to a string of individual Z-1 delays, but theyâre
equivalent to a single, long delay so long as nothing taps the
intermediate samples.
I have a suspicion that things wouldnât quite work out so perfectly,
and thereâs be lots of taps, each with their own weight, and it
wouldnât come out looking like the simple single-delay-plus-mixer
circuit.
Has anyone gone through the exercise to see how it turns out?
Brian
_______________________________________________
Synth-diy mailing list
[4]Synth-diy at synth-diy.org
[5]http://synth-diy.org/mailman/listinfo/synth-diy
References
1. https://lpaste.net/6557071818560110592
2. mailto:rsdio at audiobanshee.com
3. mailto:coreyker at gmail.com
4. mailto:Synth-diy at synth-diy.org
5. http://synth-diy.org/mailman/listinfo/synth-diy
More information about the Synth-diy
mailing list