Any good source of DSP Alogrithms for experimentation?

mikefield

Member
2019-10-28 8:53 pm
I've built myself a little project for experimenting with line-level audio:
- 4 x Stereo Line in
- 4 x Stereo Line out
- ADCs, FGPA and DACs in the middle.

So now I have working hardware, I'm looking for something to do with it..

Is there a site that details common DSP filters & effects?

(I've slightly improved frequency response since then... added a bodge part or two :eek:)
 

Attachments

  • my_board.jpg
    my_board.jpg
    297.9 KB · Views: 138
  • my_freq.png
    my_freq.png
    168.8 KB · Views: 142

mikefield

Member
2019-10-28 8:53 pm
Depends. How much do you know about DSP and programming FPGAs to start with?

Hi Markw4!

For FPGAs I would say I know more than most but am always learning. I can hit the device speed limits for FIR filters (> 400M MAC per seconds per DSP block in Artix-7), and have achieved complex projects like an Open Source 4k DisplayPort that did not use FPGA vendor IP. I tend to avoid vendor IP so I get a fuller understanding, but also because this is a hobby not a day job.

For signal processing I know mostly time-domain stuff - FIR, IIR filters, Hilbert transform... I can do Frequency domain stuff, but tend to do that in software rather than in an FPGA. I am pretty much familiar with "The Scientist and Engineer's Guide to Digital Signal Processing", with a few side trips to different topics for special projects.

I've also done a bit of RF signal processing, and written my own GPS receiver, from the 16.368MHz stream of one-bit samples to computing the receivers location, so I know a bit of orbital mechanics if that at all helps :)

Although I've done offline processing of WAV files in software, this is my first serious attempt at real-time audio DSP in the signal path, so I have heaps to learn and experiment with.

I also have a lot to learn about performing a quality PCB layout, e.g. the finer points of component selection for better results, but I want to pursue things measurable with test gear, rather than subjective listening tests, as my ears are old and some what worn out. Frequency response, noise floor, IMD, THD, non-linearity... that stuff.

I also want to keep my hobby costs down, so "$2 for five" 100mmx100mm two-layer PCBs and commodity components that can be acquired through Ali Express are the norm for me. For me there is something nice about making silk purses out of sow's ears.
 
I'm wondering what you want to learn, given that you are already familiar with discrete-time filter design, discrete Fourier transforms, configuring FPGAs and receiver baseband signal processing.

By the way, are you familiar with dithering? Remarkably, many digital signal processing people seem never to have heard of it.
 
Last edited:

mikefield

Member
2019-10-28 8:53 pm
I'm wondering what you want to learn, given that you are already familiar with discrete-time filter design, discrete Fourier transforms, configuring FPGAs and receiver baseband signal processing.
I am pretty sure that audio and audio effects DSP has a whole lot of nuances to it that I am completely oblivious to. In theory it seems simple, but in practice I am sure it is anything but simple. An hands-on appreciation of digital audio design seems to be of interest to me at the moment.

By the way, are you familiar with dithering? Remarkably, many digital signal processing people seem never to have heard of it.

I don't dither, I have a high noise floor :D

But at the moment I do face a little issue I need to think about. The ADC has a 5k+5k voltage divider on the input, and I have no gain on the way to the DAC, so the output is halved relative to the input signal.

The easy-but-most-likely-wrong-solution is to just multiply the samples by 2. However, if I do that then all the LSBs are all zero. Is the right solution to add a bit of pseudo random noise to populate the LSB with noise?

Should it just be 1s and 0s? or should it be 1s, 0s and -1s to prevent introducing any DC bias? Does it matter at all?

I don't know - I'm looking for a resource that can give guidance on such issues.
 

xx3stksm

Member
Paid Member
2017-06-05 10:33 am
Hokkaido(north area)
But at the moment I do face a little issue I need to think about. The ADC has a 5k+5k voltage divider on the input, and I have no gain on the way to the DAC, so the output is halved relative to the input signal.

I don't think you need to consider the LSB because you have FPGA between ADC and DAC, where some calculations with 23-bit input(the voltage divider decreases 1 bit) by 24-bit coefficient(at least) result in effective 46-bit resolution. As long as you have some FIR or IIR, you have enough resolution for 24bit DAC. Artix-7 has enough power to do convolution.
 
As well as effects you might want to consider speaker response measurements, where you generate test signal, compare/correlate to microphone signal(s). For instance here's a paper covering some of this http://www.fouraudio.com/data/MF/aes-swp-english.pdf


After characterizing a speakers freq response you can then create a filter to flatten it.


And active cross-overs provide scope for some simple but useful techniques.
 
I am pretty sure that audio and audio effects DSP has a whole lot of nuances to it that I am completely oblivious to. In theory it seems simple, but in practice I am sure it is anything but simple. An hands-on appreciation of digital audio design seems to be of interest to me at the moment.

Dithering, intersample overshoots and the relation between passband ripple and pre-echoes could be such nuances:

Dithering: increases total quantization error power (by 4.77 dB on average for 2 LSB peak-to-peak triangular probability density function dither), but makes it sound much less annoying when it is audible at all

Intersample overshoots: makes most digital signal processing chips that work fine with 0 dBFS sine waves clip when playing peak sample normalized music, see Intersample Overs in CD Recordings - Benchmark Media Systems

Passband ripple and pre-echoes: linear-phase filters with passband ripples can have quite substantial pre-echoes if the ripples are not very small. According to R. Lagadec and T. G. Stockham, "Dispersive models for A-to-D and D-to-A conversion systems", Audio Engineering Society preprint 2097, presented at the 75th convention, March 1984:

Ripple +0.5061 dB / -0.5374 dB, pre- and post-echo -30.46 dB
Ripple +0.09999 dB / -0.1012 dB, pre- and post-echo -44.75 dB
Ripple +0.006998 dB / -0.007004 dB, pre- and post-echo -67.89 dB
Ripple +0.00001737 dB / -0.00001737 dB, pre- and post-echo -120 dB
 

U130421

Disabled Account
2015-12-16 2:00 pm
Permit me to suggest a project of two way filter that I developed 25 years ago by synthesizer software similar to nowadays Reactor . If you create a 2nd order filter a low pass and a high pass , the band pass function goes missing . If you subtract the signal from the low pass to have complimentary high pass , you get first order cut . The Idea I developed ,is to have a Bessel 8th order low pass . As the Bessel function produces a constant delay , than by delaying the input signal by the same value and subtracting from the low pass , it results a perfect complimentary 2nd order cut very resembling to Butterworth . I listened the sound of this filter as the software could provide the two outputs on the two channels , the result was truly spectacular.