diyAudio

diyAudio (https://www.diyaudio.com/forums/index.php)
-   Digital Line Level (https://www.diyaudio.com/forums/digital-line-level/)
-   -   DSP for the Raspberry Pi (https://www.diyaudio.com/forums/digital-line-level/245228-dsp-raspberry-pi.html)

usul27 3rd November 2013 01:59 PM

DSP for the Raspberry Pi
 
After the success with my Raspberry Pi DAC it is time to go to the next level: a DSP that can be programmed directly from the Raspberry Pi.
First prototype is working, however I still have some issues with the analog input.
https://i1.wp.com/www.crazy-audio.co...p-soldered.jpg

The DSP can be used as a sound card (stereo in/out) for the Raspberry Pi, but also as a standalone DSP. Programming is done directly from the Raspberry Pi. Unfortunately there is no free compiler for this DAC available. Therefore you have to use SigmaStudio. From there, the compiled program will be exported, transfered to the Raspberry and then written to the DSP. This is only needed when using a completely different program. Parameters for the running program can be updated on the fly. E.g. you can change filter frequencies of a crossover from command line.

The whole software is still in a very early stage, but the basic functionality is already working.

The DAC can be powered directly from the Raspberry Pi 5V supply, it consumes only 100mA.

maxw 4th November 2013 09:31 AM

Wow, looks nice! What ADC/DAC IC have you used? What resolution and sampling rate?

scopeboy 4th November 2013 09:41 AM

Cool! :)

usul27 4th November 2013 10:17 AM

This DSP uses the onchip ADCs/DACs of the ADAU1701. These are not the best DACs/ADCs on the market, but they perform reasonable well.
Sampling rate depends on the configuration. The DSP can work up to 192kHz, however in that case, there is less processing possible per sample. Therefore for complpex programs the sample rate might by limited to 48kHz.

usul27 4th November 2013 06:20 PM

I still had some problems with the analog input which works now (just forget to solder a resistor on the other side). That means I can focus on the software development.
Is anybody interested to join the team? The software will be open source.

usul27 11th November 2013 04:12 PM

Looks good. Today I could finish the basic filter software.
I filters will can be configured by an XML file. Based on this file, the parameters for the filters will be calculated. Only BiQuads are implemented now, I will more on other filters in a later stage.

Here is an example (not the full file), which creates a Butterworth high- and lowpass:
<biquad name="bq11" input="input1" type="highpass1" frequency="200" q="0.7" />
<biquad name="bq12" input="bq11" type="highpass1" frequency="200" q="0.7" />
<biquad name="bq13" input="bq12" type="lowpass1" frequency="2000" q="0.7" />
<biquad name="bq14" input="bq13" type="lowpass1" frequency="2000" q="0.7" />


https://i0.wp.com/www.crazy-audio.co...rst_filter.png

I will work on the web interface in the next days. The web interface will can run on the Raspberry Pi allow direct filter changes over the web interface.

Bigun 11th November 2013 04:16 PM

Looks very interesting - above my head for sure.

usul27 11th November 2013 04:18 PM

The web interface will be easy to use :-)

chaparK 11th November 2013 05:09 PM

2 Attachment(s)
Congratulations for your hard work! Your project looks very promising.

A quick note, although I'm not sure I understand the example below.

Quote:

Originally Posted by usul27 (https://www.diyaudio.com/forums/digital-line-level/245228-dsp-raspberry-pi-post3699596.html#post3699596)
Here is an example (not the full file), which creates a Butterworth high- and lowpass:
<biquad name="bq11" input="input1" type="highpass1" frequency="200" q="0.7" />
<biquad name="bq12" input="bq11" type="highpass1" frequency="200" q="0.7" />
<biquad name="bq13" input="bq12" type="lowpass1" frequency="2000" q="0.7" />
<biquad name="bq14" input="bq13" type="lowpass1" frequency="2000" q="0.7" />

If you cascade 2 butterworth second-order sections, then you get a 4th order Linkwitz-Riley with cut-off point at -6 dB (as opposed to a 4th order butterworth with cut-off at -3 dB).

The difference between these filters is illustrated below, with same cut-off frequencies as yours (200 Hz and 2000 Hz). Butterworth is orange, LR is blue.

Attachment 381727

For some reason, your frequency response plot doesn't look like any of the 4th order Butterworth or LR, which is what you would normally achieve with 2 cascaded 2nd order sections.

Below is the illustration of a Butterworth and a LR 2nd order (same cut-off frequencies). Your plot looks very much like the orange curve (which is again LR but 2nd order i.e. 12 dB/oct).

Attachment 381728

Normally you would need only one pair of biquads to implement these filters (one biquad for the low-pass and one biquad for the high-pass). But your example shows 4 biquads.

I can see 2 explanations:
- Your plot is not related to the XML example
- Or your biquads implement only 1st order sections, which is a waste of resources.

Wish you the best with your project!

Nick

usul27 11th November 2013 05:31 PM

Hi,

you're right. I mixed up Butterworth und Linkwitz-Riley. The Filter is a 2nd order Linkwitz-Riley, consisting of 2 first-order Butterworth filters (that's why it is named "lowpass1").
And you're also right, that a biquad filter for a first order filter is a waste of ressources. However, at the moment I have more than enough resources available. The SigmaDSP is really nice for this kind of applications, because it handles a BiQuad in 6 clock cycles. A first order filter would save 2 clock cycles. But using BiQuads even for first order filtering (with B2=A2=0) makes the implementation easier at the moment.

Daniel


All times are GMT. The time now is 11:59 AM.


Search Engine Optimisation provided by DragonByte SEO (Pro) - vBulletin Mods & Addons Copyright © 2020 DragonByte Technologies Ltd.
Resources saved on this page: MySQL 17.65%
vBulletin Optimisation provided by vB Optimise (Pro) - vBulletin Mods & Addons Copyright © 2020 DragonByte Technologies Ltd.
Copyright ©1999-2020 diyAudio

Wiki