User:Birkinshawc
From DRC
**** PAGE UNDER CONSTRUTION ***** **** PICS SOON! *****
Contents |
Introduction
My setup consists of a sub and two small speakers mounted on stands, all home-made for around £400 in parts using Peerless drivers. The amplifers are all made by Samson and vary from 575 Watts for the sub to 50 Watts/channel for the HF. I am using an Echo Gina 3G sound card to feed the amps directly. I used to have a centre speaker but don't use it anymore, and have told xine/mplayer that I have a 2 channel setup.
All my speaker boxes were deliberately designed too small and would have required Linkwitz Transform circuits if I had not used DRC to equalise the frequency response and modify the system Q. Instead of all this I just setup BruteFIR as a digital 3-way xover and then used DRC to correct the response of the room and speakers. The result is amazing and shows that it really is possible to just build speaker boxes the size you wish, install the drivers, and then correct it all digitally (within reason!).
This account is an overview of the whole process.
Software used
Octave : Used to generate xover filters.
DRC : Used to generate room correction filters.
JACK : Software which sits between the hardware and BruteFIR. Software players such as MPlayer, Xine, alsaplayer can playback through BruteFIR via JACK if they are compiled with JACK support.
Brutefir : Runs all the filtering in realtime.
Alsaplayer : Audio player with optional JACK output plugin, required for my modified DRC measure script - Measure Jack.
Generating xover filters
I used Octave to generate 3 filters for my xovers, each 1024 taps long (2^10). I modified a script by Robert Scheer on the diyaudio.com forums to cater for 3 way systems, see below:
# # Robert Scheer 10/6/2004 # Chris Birkinshaw 06/05/05 # # Beginning of user parameters # n=10; # exponent for filter size fxo1=100; # sub crossover frequency in Hz fxo=3000; # mid/high crossover frequency in Hz fs=44100; # sample rate in Hz # # End of user parameters # # k=2^n; # order of filter fn1=2*fxo1/fs; # normalized subsonic cutoff frequency fnxo=2*fxo/fs; # normalized xo frequency i=linspace(1,k,k); # k-tap filter array f_lo=linspace(0,200,512); # for plot of low end of freq response f_hi=linspace(0,20000,512);# for plot of entire freq response hir=fir1(k,fnxo,'high','scale'); # high-pass impulse response lir=fir1(k,[fn1,fnxo],'pass','scale'); # band-pass ir sub=fir1(k,fn1,'low','scale'); # low-pass ir hirtxt=hir(i); # my klugey way of taking k elements lirtxt=lir(i); # from the k-element impulse responses subtxt=sub(i); save -ascii filters/mid_high.txt hirtxt save -ascii filters/mid_low.txt lirtxt save -ascii filters/sub_low.txt subtxt
You will need to delete the comments from the top of each of the three generated text files before using these filters in Brutefir.
My Brutefir config for these filters is included below, and will give a fully working 3-way 2.1 system. Note that DRC filters are defined but disabled. I will cover measuring the system and generating DRC filters later.
BruteFIR config - Xover only, no DRC
You will notice that I attenuate the L and R inputs by 7dB - this is because the summed sub output was overloading and clipping. The amount of attenuation will depened on your xover point and the sensitivity of your drivers/amps.
I setup the levels on my amps so that the midrange channels were on max and the sub and tweeter amps attenuated until the sound was pleasing to my ear. You could do this a lot better by doing a sweep through the system but I was lazy... ;-)
Measuring the system
I measured the system using my own modification of the measure script included with DRC which adds JACK support for playback, and a Behringer ECM8000 mic. This is used in conjunction with a special BruteFIR config which routes BruteFIR input channel 1 via the left channel xovers but routes BruteFIR input channel 2 directly to BruteFIR output channel 2 with no filtering. This full range output is physically looped back into the right channel of the soundcard line in to provide the reference channel for the sweep measurement.
BruteFIR measuring config (once again DRC coefficients are defined but disabled)
Input to measurejack script was as follows:
measurejack 24 44100 5 21000 45 5 plughw brutefir:input-0,brutefir:input-1 impulse.pcm
DRC filter generation
DRC filters were generated as per the DRC readme and implemented by the BruteFIR config file below:
I'd like to take this opportunity to praise Denis Sbragion for writing the new DRC 2.5.1. The old 2.4.x version simply couldn't handle my totally untreated room with wooden floors and no curtains and sounded terrible, but the new version is absolutely outstanding!
Extra Bits
Use this in your .lircrc as follows:
begin
button = volup
prog = irexec
repeat = 0
config = /usr/scripts/volume.sh up
end
begin
button = voldown
prog = irexec
repeat = 0
config = /usr/scripts/volume.sh down
end
.lircrc is the configuration file for the Linux Infrared Remote Control daemon. A IR transmitter is described here and a receiver here (folow the links English, then Applications or Hardware).
