3ll3d00d Posted September 12, 2014 Share Posted September 12, 2014 I started a thread on this over at avf then thought I'm more likely to get comments here To recap... I currently have a single 15" sealed sub, soon to be upgrading to a dual UXL-18 sub and I would like to be able to do a before/after comparison to see just how much it's added. My signal chain is HTPC -> firewire -> RME Fireface 800 -> Marantz AV7005 -> SpeakerPower SP-6000 -> sub mic is a CSL calibrated EMM-6 to 5Hz The RME is spec'ed to -0.1dB at 1Hz on the analogue output & the marantz is down a couple of dB at ~5Hz IIRC. The mic input is often high passed though. I doubt I'll be troubling the scorers at 5Hz but still.... A post on avs suggests how to use an FFT filter to offset the rolloff but I couldn't find any confirmation that this actually works so I tried it out & was pleased to see it does work perfectly. I'm a jriver user btw so have been using the mojave/desertdome's approach to extracting a mono wav using jriver to feed into speclab. I'll post back once I get a chance to measure the rolloff & update that FFT filter. In the meantime, any suggestions/comments would be appreciated (given that speclab is not the most obvious app to use in the world!). Link to comment Share on other sites More sharing options...
3ll3d00d Posted September 14, 2014 Author Share Posted September 14, 2014 I've worked through creating a filter to account for my measurement signal chain so thought I'd share that approach here. The basic approach for filtering in speclab comes from http://www.avsforum.com/forum/113-subwoofers-bass-transducers/1374817-how-spectrum-lab-mic-vs-digital.html however creating the filter itself is slightly more involved than that. It relies on http://www.holmacoustics.com/holmimpulse.php as this is the only freeware I've found that has the signal manipulation tools you need to do this without loads of script hacking to get the data in the right format. Note that this approach is yet to be tested in anger but I thought I'd write it down first. Create the frequency-amplitude response measurement for your signal chain Setup your soundcard etc with a loopback connection in place over whatever you want to correct for (e.g. soundcard output to input) Start HolmImpulse "Device & Signal" tab - Choose your input/output devices - Set sample rate to 48kHz - Set Logarithmic sine sweep as measurement method with start frequency = 1Hz - Set signal length to 2^17 - Make sure mic calibration is not active "Data Analysis" tab - Set measurement data length FFT M = 15 - Check Normalise to 0 "Measurement" tab Click measure in Slot A Check the response looks like what you expect for signal chain rolloff (see example) Give the measurement a sensible name to reflect what you measured Click import in Slot B Choose your mic cal file (NB: Holm has a tendancy to freeze and require killing if you give it a text file it doesn't understand) It should import and look recognisably like your mic cal file Go to the Manipulation menu and select "Product (C = A * B)" It should create a new measurement that obviously looks like a combination of the previous 2 measurements Click export - enter a filename - Frequency tab: custom format, full frequency range, uncheck export phase, FFT-Frequencies for frequency increments - Text options tab: uncheck information header, comma separator, dot decimal separator Click export frequency response Open the file in a text editor, it should be a 2 column csv with 16384 rows (if it has more or less rows then you might need to fiddle with the signal length to get it to match, I'm not 100% sure why it's not always honouring the FFT length for the export) Create a basic speclab filter file Open speclab Open the filter control window Set type = lowpass, FFT = 32768, Center = 24000, BW/Slope/Freq = 0 Set Graph scale in Opt 2 to -20/+20 Go to export tab, export to a file Open the filter in a text editor, you should see something like ; Parameters for an FFT filter - saved by Spectrum Lab ; Original filename: "C:\public\gdrive\roomeq\speclab\basic_filter.FRS" filter_type=1 options=64 resp_length=16385 fc_hz=24000.000000 bw_hz=0.000000 sw_hz=0.000000 fshift_hz=0.000000 inv_from_hz=0.000000 inv_to_hz=0.000000 array= 1,0,1 1,0,0.937469 1,0,0.874939 . . end The array should have 16385 lines (i.e. the value in the resp_length field) NB: not sure what the last two values in each array entry are (seems to vary with filter type) NB: the array is a textual description of the filter response where the 1st column is the filter strength in a linear scale (1 = 0dB) and each row represents a frequency step of 24000/16385 = 1.464844 Hz and the 1st row corresponds to the filter strength at 0Hz NB: you can use different values for resp_length if required, this corresponds to the value in the "FFT Size (points)" dropdown and will be (FFT Size (points) / 2) + 1 (i.e. 16385, 32769 and so on) NB: you may need to edit the filter file to set filter_type=0 (this represents the custom type) Linearise your measured response The simplest way to do this is to use awk, you can get this via cygwin ( look at http://stackoverflow.com/questions/21927944/how-to-run-an-awk-commands-in-windows for details. Assuming the data exported from holmimpulse is hi_export.csv you would use $ awk -F"," 'BEGIN {OFS=","} {print 10 ** (( $2 * -1) / 20 ),"0,0"}' hi_export.csv > hi_export_linear.csv This means take field 2 of your csv (the amplitude measured in holm), invert it (because we want a filter that offsets your rolloff), linearise it by doing 10^(val/20) and then dump it out as a csv with 0 in the final 2 (mystery!) fields Alternatively do it in excel as described in http://www.avsforum.com/forum/113-subwoofers-bass-transducers/1374817-how-spectrum-lab-mic-vs-digital.html#post21249814 Create the final filter file All that is left is to take the output from the last step and dump it into array field in the filter file (i.e. copy and paste the hi_export_linear.csv contents inbetween array= and end in your filter file). Now go to the filter screen - graph: zoom in so you can see the 0-160Hz range - opt 2 tab: set the graph limits to the min/max strength of your filter - import/export: choose your final filter file and click load - return to the graph screen and it should show a shape that looks like your signal chain rolloff (hover the mouse over the line and manually verify that various points look correct, e.g. 5/10/15/20Hz) If the shape looks good then double check your array has the right number of entries, if everything is ok then the end statement should be on row 16398 in the file. IF THIS IS NOT CORRECT THEN THE FILTER WILL LOAD NORMALLY BUT SPECLAB WILL SILENTLY REJECT IT WHEN YOU APPLY IT!! NB: you probably want to manually limit the frequency to which you filter, to avoid massively overboosting the low end; e.g. if I measure to 1Hz with my portable mic interface then it thinks I need +70dB at 1Hz which might well be true but is obviously dumb, my mic cal goes to 5Hz so that might be a sensible place to stop. Remember that each row represents about 1.46Hz so stopping at ~5Hz means copying row to rows 1-4 in the array. Activate the filter in speclab This is as per the avs post goto components/show components Left click on the L1 button next to spectrum analyser and choose L4=Left Filter return to the filter screen make sure the buttons show started and bypass (click them if not) return to the components screen the filter should now be blue If everything has gone smoothly, then the filter should be applied when you measure.... IF THE FILTER LINE REVERTS TO A STRAIGHT LINE AT 0 when you apply it then this means your filter is invalid in some way Link to comment Share on other sites More sharing options...
3ll3d00d Posted September 14, 2014 Author Share Posted September 14, 2014 I doublechecked and I realised that my array, in the filter to speclab, was 1 row short hence speclab was rejected it. I added a few lines with a big boost to debug (i.e. swapped 4-5 lines with a 10x boost around 100Hz) and you can see the results in the pic attached Link to comment Share on other sites More sharing options...
Bossobass Dave Posted September 14, 2014 Share Posted September 14, 2014 I've always had a problem with calibration files. The recent spate of graphs with large content at 1 Hz being described as noise on the soundtrack is suspect to me, for example. That sort of spike in noise shows a production chain with zero roll off and a noise floor that doesn't quite compute without more info (for me, anyway). In any case, it always helps me to start with a loopback measurement of your signal chain frequency response magnitude. That's what tells me what the roll off is and allows me to compare that to the 'correction' curve to see if it makes any sense. I'd surely love to see a loopback measurement of the Marantz. I've seen a couple of them and they were vastly different, which I doubt is the case in reality, so I chalk it up to cal files being used vs not being used with no labeling of the graphs when posted. I'd also love to see the roll off of the SP amp. This is simple to do. You just do a loopback using the speaker terminals and just make sure the levels on the amp are low enough to be feeding the sort of voltage the rest of your line level components are feeding the sound card or interface. Link to comment Share on other sites More sharing options...
3ll3d00d Posted September 14, 2014 Author Share Posted September 14, 2014 there's a measurement of the AV7005 here - http://www.avsforum.com/forum/113-subwoofers-bass-transducers/1477487-if-you-needed-_4_hz-room-but-could-pick-room-how-would-you-2.html#post24815319 The green line is the AV7005 with a cal file applied to cancel out everything else in that chain. It doesn't seem to add much rolloff itself. I've changed setup since then (put the RME FireFace in) so will repeat that measurement this week. I'll see if I can do the speakerpower as well (without frying anything!). The curve shown in the earlier post is of a different interface that I use with my laptop (an ART USB Dual Pre) btw. Link to comment Share on other sites More sharing options...
3ll3d00d Posted September 14, 2014 Author Share Posted September 14, 2014 The next thing I need to do is actually get my mic (Dayton emm6) working with it. I have tried on 2 different machines with 2 different interfaces and all I seem to get is some sort of periodic noise. This is with no filter attached, just a plain vanilla setup in speclab. The mic definitely works as I can fire up an RTA and see a realistic trace of whatever sound I am using to test the mic. Any ideas? Link to comment Share on other sites More sharing options...
3ll3d00d Posted September 15, 2014 Author Share Posted September 15, 2014 The next thing I need to do is actually get my mic (Dayton emm6) working with it. I have tried on 2 different machines with 2 different interfaces and all I seem to get is some sort of periodic noise. This is with no filter attached, just a plain vanilla setup in speclab. The mic definitely works as I can fire up an RTA and see a realistic trace of whatever sound I am using to test the mic. Any ideas? just to close this one... seems like the problem was a bit depth mismatch between speclab settings and the soundcard settings. Link to comment Share on other sites More sharing options...
3ll3d00d Posted September 16, 2014 Author Share Posted September 16, 2014 I'd surely love to see a loopback measurement of the Marantz. I've seen a couple of them and they were vastly different, which I doubt is the case in reality, so I chalk it up to cal files being used vs not being used with no labeling of the graphs when posted. I'd also love to see the roll off of the SP amp. This is simple to do. You just do a loopback using the speaker terminals and just make sure the levels on the amp are low enough to be feeding the sort of voltage the rest of your line level components are feeding the sound card or interface. I repeated my loopback measurements in preparation for trying some mic captures in my room. Yellow is the RME FireFace 800 alone, blue is the RME FireFace 800 + AV7005 (7.1 analogue input, pure direct). At 5Hz, the pairing is 2dB down with the rolloff roughly split between the 2 (maybe 1.2dB to the FF and 0.8dB to the Marantz). At 10Hz, this becomes about 0.5dB. I then tried to repeat for a RME - Speakerpower loopback and instantly sent the SP into protection mode. I was quite careful with connections and the signal level going through it but clearly did something wrong, no idea but don't fancy risking that again! Link to comment Share on other sites More sharing options...
3ll3d00d Posted September 17, 2014 Author Share Posted September 17, 2014 First attempt at a mic capture in room, speclab seems to want a *really* low level on the mic pre amp gain. I turned it most of the way down (which means the max input level allowed on the interface will be rather high indeed) yet speclab still seems to suggest it's verging on clipping. It's not entirely clear which knobs need tweaking, answers on a postcard please! Link to comment Share on other sites More sharing options...
3ll3d00d Posted September 20, 2014 Author Share Posted September 20, 2014 The problems above turned out to be bad settings (bits/sample). I now have it working correctly (I think) so some pics.... First, my in room steady state response at normal sweep levels for reference the overall levels over the whole FoTP barrel roll clip (above 4mins long, taken from one of those avs demo discs). Top is the disc, bottom is in room. and a gif comparing the in room vs on track for the barrel roll itself (the vertical line at the bottom is the roll). Link to comment Share on other sites More sharing options...
3ll3d00d Posted May 13, 2015 Author Share Posted May 13, 2015 you can also use this method to create a mic cal file only by importing that into Holm and then exporting it again I find that if you do this, it will always export it to 32768 data points and hence you can either use an appropriately sized filter in speclab (resp_length = 32769) or you can cut it down in awk by filtering like so $ awk -F"," 'BEGIN {OFS=","} NR % 2 == 0 {print 10 ** (( $2 * -1) / 20 ),"0,0"}' hi_export.csv > hi_export_linear.csv the NR%2==0 bit means to only output every 2nd record (i.e. if record number divided by 2 has a remainder of 0 then output the record) (I also tweaked post 2 with some minor changes, speclab is quite picky about how you feed data to it so it can take a bit of to and fro to get this to work) Link to comment Share on other sites More sharing options...
3ll3d00d Posted July 29, 2015 Author Share Posted July 29, 2015 I used a different laptop to generate a filter yesterday and hence noticed a few extra things about the above process that you need to be aware of otherwise you'll get bad data out. The key point is making sure that Holm and speclab are configured with the same sample rate - in holm this is set on the "device and signal" tab - the resulting fft bin width can be found on the next tab, in this example I have a 48kHz sample rate and 65536 bins resulting in a resolution of 0.73Hz (48000/65536 ~= 0.73) This value tells you the resolution in the data you export from Holm, each data point (row) represents the value at (row number - 1) * 0.73 Hz This fft size is the resp_length value in the filter file and resp_length must be set to (holm fft length / 2) + 1 so in the example shown we must set resp_length to 32769 like so ; Parameters for an FFT filter - saved by Spectrum Lab ; Original filename: "C:\Users\Matt\Documents\flat_filter.FRS" filter_type=0 options=0 resp_length=32769 Once you load this into speclab then there are a few places in the filter control window that will verify everything is in agreement Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.