Interesting study about fixed point vs. floating point in filter design
-
- KVRAF
- Topic Starter
- 1609 posts since 13 Oct, 2003 from Oulu, Finland
Not sure if people have already read this interesting study about integer vs floating point values in filter design.
http://www.jamminpower.com/PDF/48-bit%20Audio.pdf
If nothing else, it's "good to know" for DSP developers
http://www.jamminpower.com/PDF/48-bit%20Audio.pdf
If nothing else, it's "good to know" for DSP developers
-
- KVRAF
- 1607 posts since 12 Apr, 2002
I think it's generally agreed than once in a while (esp. at low filter cutoffs and osc frequencies) one needs to use 64-bit float rather than 32-bit float. Also direct forms are known to particularly suffer from quantization issues, so the need for a better precision tends to occur pretty soon there. Anyway, how often one would use a direct form filter in today's music DSP?
-
- KVRAF
- Topic Starter
- 1609 posts since 13 Oct, 2003 from Oulu, Finland
For me the more interesting point was that you can do IIR filters with fairly small bit depth. I've no idea though if it's possible to do good quality fast filters with (for example) 64bit fixed points... Especially if there's some non-linearities involved.
Then again, if I remember correctly, someone made a good sounding SID filter emulation for one of the most famous C64 emulators. I think it used fixed points for the filter math. I could be wrong though.
Then again, if I remember correctly, someone made a good sounding SID filter emulation for one of the most famous C64 emulators. I think it used fixed points for the filter math. I could be wrong though.
- KVRist
- 347 posts since 20 Apr, 2005 from Moscow, Russian Federation
... to do good quality fast filters with (for example) 64bit fixed points ...
Btw., was 64-bit integer add/mul ever faster than 64-bit floating-point add/mul in GP CPUs in modern times? (w/o even counting the extra shift one would need for fixed point mul via integer mul).
The paper was cool for its time (1999) and its area though: 32-bit floating-point DSPs vs. 32-48-64 fixed point DSPs, especially counting the latter were times cheaper. But for modern day "CPU-only-developers" it is of little interest I'm afraid.
Btw., was 64-bit integer add/mul ever faster than 64-bit floating-point add/mul in GP CPUs in modern times? (w/o even counting the extra shift one would need for fixed point mul via integer mul).
The paper was cool for its time (1999) and its area though: 32-bit floating-point DSPs vs. 32-48-64 fixed point DSPs, especially counting the latter were times cheaper. But for modern day "CPU-only-developers" it is of little interest I'm afraid.
- KVRAF
- 7896 posts since 12 Feb, 2006 from Helsinki, Finland
ALU is potentially still faster on modern x86 (unless you do SIMD processing), but not by a huge margin.
The real question is whether it's worth the trouble and in most cases it definitely is not.
edit: also emphasis on "potentially" because it really depends... and it's far easier to get performance out of the floating point unit
-
- KVRAF
- Topic Starter
- 1609 posts since 13 Oct, 2003 from Oulu, Finland
Full disclosure: I'm not (usually) working on Intel platforms, but different embedded processors/microcontrollers.
That's why I'm interested in this topic to see which parts still apply to various alternative CPU architectures. You'd be surprised how many hardware synth developers are working with fixed points every day, since the CPU/DSP they're using doesn't have floating points in it. I'm talking about major players in the hardware electronic instrument industry.
I haven't personally tried doing DSP stuff using fixed points so it would be an interesting experiment to see what kind of problems arise. For me it's always been floating points for the audio stuff. One question that's been on my table lately is: when is 32 bits enough and when 64 bits is really needed for the IIR/ZDF filter algorithms? This question pops up regularly when I try to figure out if I want to use SIMD to do couple of 32 bit floats in parallel or opt to using 64 bit floats and get the thing done with higher precision but slower speed.
That's why I'm interested in this topic to see which parts still apply to various alternative CPU architectures. You'd be surprised how many hardware synth developers are working with fixed points every day, since the CPU/DSP they're using doesn't have floating points in it. I'm talking about major players in the hardware electronic instrument industry.
I haven't personally tried doing DSP stuff using fixed points so it would be an interesting experiment to see what kind of problems arise. For me it's always been floating points for the audio stuff. One question that's been on my table lately is: when is 32 bits enough and when 64 bits is really needed for the IIR/ZDF filter algorithms? This question pops up regularly when I try to figure out if I want to use SIMD to do couple of 32 bit floats in parallel or opt to using 64 bit floats and get the thing done with higher precision but slower speed.