Blood Alcohol Impulse Response

I was in Costco the other day and I noticed the BACTrack C6 on sale for about $27. I’ve been wanting a breathalyzer for a while, so I quickly did some cell phone research and determined that this is a GREAT deal:

  1. The MSRP is $70, originally $90
  2. That’s only a bit more than what Amazon sells it for – $55 when I checked. 
  3. This is a fuel cell breathalyzer – more accurate than semiconductor sensors. Fuel cells are what “police-grade” units use, whereas $30 breathalyzers are always semiconductor sensors. I don’t think any fuel cell sensors have ever been so cheap, retail. This is not, to be clear, a “police grade” unit – those are in the $100-150 range on the cheap end. But one can infer that $30 is a great deal, and the sensor is well above this class.
  4. The C6 is bluetooth-enabled, like a few of BACTrack’s fuel cell units in the $100 range.

In fact, Amazon is now, at time of writing, sold out of their own stock, and the C6 is only available from third party sellers. That’s new since yesterday. I’m not sure if this means BACTrack is trying to get rid of C6 inventory but it seems plausible.

So anyway, of course I bought one. For science.


Personally, I’m always interested in knowing more about my body. I’m also very interested in knowing more about the breathalyzer traffic light I built a few years ago – always a party hit, but the yellow-red transition seems a little suspect.

One universal truth of breath-based BAC measurements is that you absolutely MUST wait some delay time since your last sip before taking a reading. This is for a few reasons – alcohol you just consumed won’t have absorbed into your blood yet, and alcohol remaining in your mouth and throat will give a synthetically high reading. The delay is typically stated as 20 minutes

Over the course of our holiday party last night, respect for this idea seemed to be in short supply, and confidence in the results commensurately lacking. So this evening, I decided to run a quick experiment, measuring the impulse response, so to speak, of consuming a single shot.

The Experiment

One thing you shouldn’t do is blast a breathalyzer sensor with a fresh breath of booze. Besides that the reading will be uninformative, you also run the risk of overwhelming the sensor, possibly damaging it, and possibly causing a hysteresis problem that causes inaccuracy in subsequent closely-timed readings. 

For this reason, I decided I’d take a baseline of 0.000% BAC, then take a 2oz shot of whiskey, then take a breathalyzer reading every 5m after that until I hit zero. 5m after the shot should be way too close for an accurate reading, but far enough to avoid overloading the sensor.

The Results

Impulse response of one shot of 40%ABV whiskey. Initially spikes to .086 for the first reading, then falls to a linear decay beginning 15m after the start and ending 1h20m after the initial shot (BAC=0%)
BAC Impulse Response of One Shot of Whiskey

From this plot, it’s pretty immediately clear why one should wait 20m to take a reading. The first reading at t=5m was all the way up at .086% ABV – just over the legal limit. at t=10m, this had dropped to .026 – close, but still too high, for sure. At t=15m, which marked the C6-recommended 15m wait time, I blew .014.

Given my body weight, the back of the envelope calculation is that I should metabolize one 2oz shot of 40%ABV in about an hour, and that it should take me 4 to hit the legal limit of .08% BAC. .014 is below the .02 that math would suggest for one shot, but if you take into account 15m worth of metabolism, that’s pretty spot on. It’s also the case that I blew 0.000% consistently starting at t=1:20 – a little longer than the expected 1h metabolism, but still just about right. 

I plotted this chart in Excel, which allows for trend lines but not much control over them without rolling your own regression calculation. You can force an intercept, but only at x=0. I could have rebased the time on t=0 as the sober point, but it turns out excel also handles negative time deltas poorly by default. Instead, I ask you to simply imagine the trend line bumped a few degrees clockwise so it hits my sober point. If you do that, t0=.02% BAC seems pretty reasonable. 


All I really did here was confirm a bunch of plots you can find online, but the data also suggests a few novel things too. For one, the breathalyzer output does, in fact, seem pretty accurate, at least above readings of 0.01. Below 0.01, there was that one reading which seems unrealistically high given that I started blowing consistent 0.00s just moments later. But it’s also believable that sub-0.01. is getting down into the noise, and accuracy is less critical there anyway. For two, I learned that I do, in fact, metabolize one shot in about an hour. Perhaps it makes sense for me to adjust my mental calculations up a few minutes to be conservative. But it’s also the case that BACTrack deliberately biases their consumer units to read a little high, to be conservative for users assessing ability to drive. So maybe I was, actually, sober in 1 hour.

In any event, it’s cool to confirm that my body, the sensor, and the physics of alcohol consumption, all appear to behave as expected.


Obviously, I could have just taken notes on timing and values with a pencil, and manually entered that into Excel. As it happens, BACTrack has an app, which I’ve unwisely volunteered my anonymized data to for the sake of logging this all for me. 

The biggest issue is getting that data OUT, as there’s no export function. What there IS is an option to share BAC data with HealthKit. HealthKit allows for export of data wholesale, but it exports to a less-than-helpful XML file. Rather than try to parse that with Python or something, I went looking around the internet and found Mark Koester’s blog on similar topics. This lead me to the app QS Access. This iOS app helpfully lets you pick a subset of data to export as .csv, which obviously excel likes.

Enable BAC and click the (i) next to it
Click “Tabulate all samples”
Use the “share” menu to export. Airdrop to mac.

Hope you’ve enjoyed this episode of “data you already knew about”!


  1. Ed S
    December 10, 2018

    It’d be interesting if you’d re-do with two shots, or half a shot, and see what your body’s linearity is like.

  2. December 10, 2018

    I think the same – I’ll probably try that this weekend. Maybe earlier but probably not. One concern I have is that the initial spike will be so high as to cause those hysteresis issues with the sensor, but then maybe the initial spike has less to do with initial alcohol volume and more to do with initial alcohol concentration. I suppose that itself would be interesting to know!

  3. Ed S
    December 10, 2018

    I think it would still be a valid experiment even if you wait the 20mins before the first test.

  4. December 10, 2018

    I agree, but less novel, maybe. Assuming nothing goes haywire, all we’d expect to see is the same negative slope of metabolism, shifted upwards by 2x the Y-intercept.
    The novelty I’m interested in is the peak value of the spike. But as I think about it, I wouldn’t expect it to be any higher. The value of that spike will be the sum of alcohol in actual exhalation gas, plus whatever boils off the membranes that just got saturated by the sip. Since exhalation concentration will be ~=0 for those first few minutes as it absorbs into clean blood, the entire value of the pulse will be from membrane boil-off. That should be a function of concentration, not volume. That is, with no contribution from actual drunkenness, the initial pulse should be about the same for n-shots taken at t-0, should be a little higher for shots of a higher ABV, and should be a little lower for shots of a lower ABV.

    So I guess I’ve got a few experiments for part 2:
    1) Impulse response of two shots of 40% ABV. Hypothesis: same peak, settling down to a linear decay shifted up to 2x the Y-intercept.
    2) Impulse response of one shot of 80% ABV. Hypothesis: 2x peak, settling down to a linear decay shifted up to 2x the Y intercept. Same curve as (1), but with a 2x peak.
    2) Impulse response of one shot of 20% ABV. Hypothesis: .5x peak, settling doen to a linear decay shifted down to .5x the Y intercept.

    Guess I’ll have to drink a few nights this week…

  5. Leigh Whittemore
    January 10, 2019

    Guess I’ll have to drink a few nights this week…

    Guess, from the postlessness here, that you didn’t? Only Santa knows, and he’s already made his visit… at least for THIS year!

Leave a Reply

Your email address will not be published. Required fields are marked *