Close

part 9: more setup, more programming

A project log for DSP 01: hi-fi audio signal processor

a digital signal processor with integrated multi-channel amplifier for high-fidelity speakers.

tshen2tshen2 02/06/2015 at 07:050 Comments

i built the DSP 01 as a platform for my audio projects. so now let's use it for something.

here's a speaker which i designed & built almost four years ago. i didn't know what i was doing back then, but the pair came out alright regardless.

it's a 3-way closed-box design, built to minimize distance between tweeter and (dual) midrange drivers. with a midrange-tweeter crossover at 2kHz, the off-axis performance is quite nice. the woofer crosses over at 300Hz, with a maximally flat (Q=0.71) roll-off below 57Hz.

on the left is the terrible analog signal processor which i built for them. it can go away now.

[goodbye!]

it's like getting a Bentley to replace a rusty bike.

so let's begin!


DSP basic setup

the newest version of DSP 01 uses a 16kB EEPROM with a 64-Byte page size. the EEPROM settings are tweaked accordingly:

my new chassis has four knobs, so i have pins MP2, MP3, MP8 & MP9 all connected to the auxiliary 8-bit ADC. MP1 is an 'output GPIO' to control the clip-detect LED. MP0, MP4 & MP5 are configured to receive I2S audio from the CS8422. the other settings are about the same as last time:

so here's a crude first-try at building a signal flow for these speakers.

there's now four 'ticks' on the Input block because we have four input channels. Inputs 0 & 1 are our analog inputs, whereas inputs 2 & 3 are our SPDIF inputs.

i'm still using the same clip-detection method as before.

the Mix block allows the mix control knob to adjust the relative mix of analog & digital inputs .

there's only two frequency filter blocks here - they are Crossover_300_2k and LinkwitzTransform.


Crossover_300_2k is (unsurprisingly) the crossover between the tweeter, midrange and woofer drivers. it looks like this:

[woofers are attenuated by 7.1dB to compensate for the higher output voltage of the AK4430 DAC. polarity is inverted because the woofers are wired backwards internally.]


LinkwitzTransform implements a Linkwitz Transform on the woofer. it is essentially a biquad filter which cancels out the 57Hz roll-off of the woofers, and moves it down to 35Hz. as Sigmastudio doesn't have a 'Linkwitz Transform' filter block, i implemented it as a custom IIR filter. it looks like this:

those coefficients are calculated with the awesome biquad calculation spreadsheet from the MiniDSP website. bear in mind - the spreadsheet & Sigmastudio use different definitions of coefficients a1 and a2. multiply the spreadsheet's a1 and a2 values by -1 before plugging them into Sigmastudio. the end result is a precise bass-boost in the frequency response of the DSP:

[DSP frequency response with first-try signal chain: woofer (red), midranges (green) and tweeter (blue)]

now let's measure them speakers!


measuring & equalizing speakers in a room

i'm all prepped with HolmImpulse, hearing protection and a calibrated ECM8000.

step one is to scrutinize the tweeter/midrange crossover at 2kHz. this is measured 18" away, on the tweeter's vertical axis, at horizontal angles of 0, 45 and 90 degrees.

[eeeeeeeeeeEEEEEEEEEEEE]

[frequency response of left speaker, 18" distance, on tweeter's vertical axis. 1/20 octave smoothing. horizontal angles (in degrees) of 0 (red), +45 (green) and +90 (blue).]

as expected, the 2kHz crossover works alright. off-axis dips at 2kHz are fairly well-controlled due to the tight spacing between tweeter and midrange drivers.

now to examine the 300Hz midrange/woofer crossover. this is measured 2 feet away, between midranges and woofer, at horizontal angles of 0, 45 and 90 degrees.

[eeeeeeeeeeEEEEEEEEEEEE]

[frequency response of right speaker, 18' distance, between midrange/woofer vertical axis. 1/20 octave smoothing. horizontal angles (in degrees) of 0 (red), -45 (green) and -90 (blue).]

the 300Hz crossover itself is fine. however, we're close enough to the wall to see some lively room modes.

what about measuring from the listening position?

let's measure the response of each speaker at four different positions on the couch.

[the microphone thinks it's people!]

[frequency response of left speaker, 1/20 octave smoothing, in four listening positions: 1 (red), 2 (green), 3 (blue) & 4 (tan).]

[frequency response of right speaker, 1/20 octave smoothing, in four listening positions: 1 (red), 2 (green), 3 (blue) & 4 (tan).]

well, that's a mess. i shouldn't be surprised - that's what rooms sound like. a thorough self-education in room acoustics might be in order. but what can i do for now?

what i can do is gently equalize the speakers to bring about a 'general improvement' in all of those listening positions. after much trial and error, i came up with this:

..where all the filter blocks between LinkwitzTransform and Crossover_300_2k represent my manual attempts at room equalization. the net effect of those filters is as follows:

[room equalization response: left speaker (red) and right speaker (green).]

and after all that, here's what my listening-position frequency response curves look like now:

[corrected frequency response of left speaker, 1/20 octave smoothing, in four listening positions: 1 (red), 2 (green), 3 (blue) & 4 (tan).]

[corrected frequency response of right speaker, 1/20 octave smoothing, in four listening positions: 1 (red), 2 (green), 3 (blue) & 4 (tan).]

bear in mind that seating positions 2 & 3 are the 'premium spots' on the couch. in those seats, the frequency response is sort of decent.

manually equalizing the room feels ridiculous. i don't think it is a good task for a human. deciding exactly where and how to adjust the frequency response curve seems like an optimization job for a computer, and i'll probably turn that into a future project.

the last step in this project is to put in a switch which lets me enable & disable the room equalization.

now i can turn on the room equalization by rotating the adjust 1 knob to the right.

[..kind of like that]

that's all for now!

next update: listening impressions.

Tshen2 2015

Discussions