Detailed Topic Index

Monday, June 7, 2021

FatMaxxer - a new app for real time DFA a1

Updated 6/10/21 and 6/20/21, 7/4/21, 1/10/22, 10/23

See also - ECG strip display with Fatmaxxer

Pitfalls in DFA a1 - Polar belt position  

 New - Update Review in Frontiers in Physiology 5/22

See this about ramp protocol - Ramp slope and HRV a1 thresholds - does it matter?  

The last year has seen much change in the field of dynamic HRV during exercise for aerobic threshold determination and intensity regulation.  Between published studies exploring the theory, validation and use in varying populations, the importance of monitoring DFA a1 in real time appears to be of value.  Up to this point we have had one app to do so, HRV logger by Marco Altini.  This was constructed as an add on to an already mature iOS app and was not designed specifically to track a1 during "on road" exercise.  However, another developer has released an Android app called FatMaxxer that was specifically created to calculate DFA a1 every "x" seconds (with 2 min windows) and display this along with HR.  You must use a Polar H10 and android device (no iOS).  The artifact correction method is similar to the HRV logger with either workout mode (5%), a 25% threshold method or an auto mode that adjusts for heart rate.

Download the "app-debug.apk" from the link

Settings recommendations:

  • Artifact threshold of 5% during exercise (25% at rest) - the reason being that both  choices will correct missed beats but only the 5% will correct the dreaded APC (premature beat) which is not uncommon during exertion. 
  • There is now an auto mode feature that I would recommend - it adjusts the 5 or 25% according to HR which makes life much easier (no need to reset the limits for rest or exercise)  


  • Recalculation window of 5 to 20 seconds.  The above examples were done with a 5s recalculation on a Samsung S21.  For older phones, 10-20s should be fine.
  • For runners the sound function is ideal.  The app will voice notify over wired or wireless headphones with your HR and a1 - perfect for running, skiing and when you can't look at your phone. 
  • Although no Garmin data field for now - my recommendation is use the voice alerts as a workaround.
  • Notification on so your OS does not force close the app.
  • Screen on if cycling.
  • Except for audio setting, you will need a restart for settings to change  
  • The app now has an auto bluetooth pairing function.  Choose the menu item "search for Polar devices".  Your last or preferred device will also show on the menu.
  • Menu - Rename current logs - if you want to save the .csv with DFA a1/HR or RR file, this is very useful - you can custom name the session before, or during before quitting the app.
  • Menu - Export - you can export the logs (RR or "features" which contains the DFA a1 and HR details.  Having the custom name makes this much easier, since the time coding name can be confusing, especially with many logs.
  • Menu - Delete all logs - after weeks or months, you can delete the logs you don't need. 
  • At the bottom of the settings there is developer mode.  If this is on, the app will not begin recording data on start (until you purposefully connect to the HRM).  This is useful if you want to "replay" an old session.  
  • Replay RR log - a very cool function that imports previous sessions RR data back in redoing the graphs.  You will get a dialog box asking which file to import.  
  • Signal voltage - circled in red - see the end of post for details

Here is a replay of a previously done session:


  • Green = DFA a1 (Purple is the old detending method - see below)
  • Red = HR
  • Yellow = .75 DFA a1 threshold

The axis on the left represents HR and DFA x 100 (so a .75 is 75 on the scale).  The right axis is the Artifact in percent.  The digital display contains artifacts (2 of 280 beats), elapsed time, HR and a nice big DFA a1 in the middle.  RMSSD is also in the digital display.  Files are saved as both RR intervals and timestamped DFA a1, HR, artifacts.

Since we are basing training thresholds on the value of DFA a1, precision is of utmost importance.  Other HRV indexes (SD1, SDNN) rely on looking for a nadir during an exercise ramp for AeT determination.  With a1, we use a value - that's both a blessing and a curse.  The blessing is that we don't need a ramp to failure and could probably estimate from a mixed exercise session.  The curse of course is that we are relying on accuracy of the HRM in getting the RR timing correct and the computation methods of the software.  The process of obtaining the a1 is complex.  The HRV software needs to first "detrend" the data.  This has nothing to do with "detrended fluctuation analysis", AKA "DFA".  The detrending of RR data is done to remove "stationaries".  These are slow changes in beat pattern from other causes.  If they are not removed properly, the DFA a1 will appear more "ordered" than it should be and a bias upward will be seen at very low values (for example a true a1 of .4 may appear as a .6 or higher).  This has been the bugaboo of some of the other software approaches including the initial python related packages.  For instance, Runalyze was somewhat inaccurate before they enhanced their approach to using the "smoothness priors" approach of Kubios.  HRV logger does not use the "smoothness priors" of Kubios fame method either.  The issue is worse for recordings with more stationaries of course - so YMMV.  We saw very good accuracy with HRV logger in the Frontiers study, but in my personal use, it is not there.  After a fair amount of work, Fatmaxxer has been significantly upgraded to use the Kubios method of "smoothness priors".  Despite the calculation load, the speed is not affected even with a re-computation of every 5 seconds.
Lets now take a look at the difference in methods including effects of "detrending".
This was an attempt on my part to see how a1 tracked 15w below then above MLSS:
Comparison of detrending versions:
Old method:

 New method:

Later on that session, an interval just below the AeT (fatigued)
Old method:

New method:

The a1 value matching is far superior with the new detrending method!

I also ran a Bland Altman analysis of the 2 hour session.  There were artifacts and the time matching may be a few seconds off but this gives us a general idea on "agreement".  The graph shows the relative difference at each pair matching.  As an example, let's say at 60 minutes the Kubios value of a1 was .50, if the matching Fatmaxxer value was 20% higher, it would have been .60 - a large difference.

Old version:
New version:
  • Bottom line - old version was 17% higher on average, new version was 4% higher.

Another example
Here is a ramp done from awhile back during the "heat" tests.  
Just showing the new version of detrending:
  • Excellent agreement again.

A final example - a 110% VO2 max power interval outdoors in the heat:
Old method:

New method:

With the Bland Altman graph of the entire 3 hour session:

  • The mean difference was only 2%.
  • Interval segment matching was superb.
Another interesting look at the detrending difference of the original version (purple) vs the new one (green) with an import of an old RR series

  •  The difference becomes more obvious as the a1 drops (and HR rises).
Another cross comparison - Runalyze vs Fatmaxxer vs Kubios
This was a 30 minute constant power cycle at my AeT power (according to lactate and HRVT)

  • Superb visual agreement between all methods.
  • Fatmaxxer may be a bit closer to Kubios (but this is just one observation)
Here was a "rest day" session of 90 minutes done at 50w below my HRVT power.  As noted toward the second half, there were some dips in the a1.  Using the detailed real time display of Fatmaxxer, I was able to reduce power further to keep the a1 up.  Why is this important?  We have evidence that DFA a1 can be a marker of fatigue - and since this was a rest day, avoiding further fatiguing exercise is important. 

A quick word about the concept of "fatmax" and the aerobic threshold (a full post will be done soon).  This is a concept describing the exercise intensity where the greatest absolute (not relative) amount of fat is being oxidized (burned).  As seen by the diagram below, fat is the predominate fuel at low intensity and decreases as it work load rises.  

However, since total calorie burn is increasing at higher intensity, the absolute amount of fat used increases even though the relative portion drops - up to a point.  That point is the Fatmax.  There is also a Fatmin - the counter point - the least fat burned (in grams).
A recent look at the relationship between Fatmax and the AeT indeed shows that they are well related:

 Interestingly, the Fatmin (or Carbmax!) occurs at the AnT/MLSS/RCP
A couple of comments on these curves:
There was not perfect correlation between Fatmax and the AeT - it's very good, but some may have their Fatmax at intensities other than the AeT (usually below).
Exercise at the MLSS/AnT will consume very large amounts of carbs and oxidize relatively small amounts of fat. 
It would appear that long bouts of intensity at below the AeT would be the optimal strategy for fat burning - long sessions are possible from the training intensity distribution standpoint and fat burn is both relatively and absolutely high.  Although you may get a bit better burn at the AeT, it may impact your training distribution and cause excess fatigue.


  • We have a new choice for real time a1 monitoring that has several major advantages over the HRV Logger.  In fairness the HRV logger was not designed for this use case in mind.
  • Fatmaxxer will recalculate every 5 or more seconds, display both HR, a1 and artifact, along with a moving graph.  This is close to a pocket version of Kubios premium for a smartphone (for a1).
  • Adjustable artifact thresholds.
  • Audio alerts with your a1 and HR are options which may appeal to runners.
  • Accuracy is now nearly indistinguishable from Kubios. This is an impressive accomplishment in a relatively short time.
  • The caveats of artifact limitation (don't trust above 5%) apply.
  • Yes, maximal fat burning occurs near the AeT.  Max carb burning at the AnT.
Part two - ECG strip display with Fatmaxxer

Addendum 1/2022:

The developer of Fatmaxxer has graciously added a feature to help us decide on optimum signal strength without the need to graph out the ECG.  The peak R voltage is now displayed (see below in red circle) beat to beat.  This is accurate as long as noise is not present.  My recommendation would be to try various belt positions at rest, wait several seconds for the signal to stabilize, then note the voltage.  If you are seeing artifacts detected, that could be a sign of more noise or signal distortion (so wait for no artifacts).  

Find the best voltage and then monitor it as you exercise.  It should not change very much.  If you are interested, a visual approach is still the best IMO, but this gives us a quick, accurate option.  

What are good voltages?

In my experience try to aim for above 1000 uV.  If you are seeing <500, chances are that the HRV and even HR may not be captured properly.

Addendum 10/23 - New findings:



Heart rate variability during dynamic exercise



  1. I tried to install the app on 2 different phones and it crashes every time after 2-3 seconds and the app just closes itself :(

  2. A couple of comments - use the latest version of the app - bugs are being fixed on a daily basis. Second, are you using a Polar H10? The app doesn't work for the older H7.

  3. Hi Bruce, currently mid first use of the app, I have a H9 and it works just fine so not limited to a H10

  4. I like the fatmaxxer and also used the garmin dfa alpha1 widget at the same time (with a polar h10), but seeing different live numbers of dfa alpha1 on the two apps!? Is this normal?

  5. I would guess that the Garmin widget uses different computation methods. Fatmaxxer has been tested and is quite accurate.

  6. FatMaxxer also sends out alpha1 notifications which my Garmin watch beeps and displays.

  7. I just started using Fatmaxxer in connection with a half marathon that I'm signed up for in a few months. I've used it twice now, once on an elliptical, and once on my treadmill. The readings on the elliptical were terrible. In 35 or so minutes I had close to over 400 rejected. Unfortunately, at that time I was using the google play store version of the app, and I had difficulty with the export feature.

    I downloaded the github version for my treadmill run (only 2 miles - 25 or so minutes, the run was done all at or around a .75 DFA a1, which for me is 130-135 bpm), and it was substantially better. I went for long stretches with zero of very few artifacts. However, as I approached the 2 mile mark, my artifact count started to escalate rapidly. My heart rate was slightly above the 135 (I think I peaked around 138), but I couldn't seem to get the artifacts under control, even by bringing my heart rate down. The total rejected was 131, which was much better than it was on the elliptical, but I'm trying to understand what can cause a huge spike in artifact like that.

    1. Artifacts can be related to many things (low battery of the HRM, bad contact, impact/noise) but I would be concerned about arrhythmia. See my post on Fatmaxxer and ECG strip visualization on how to use that very useful feature. I would be happy to look at the ECG file for you.

    2. Sorry, didn't send the response below as a reply...

  8. Hi Bruce. Thank you for the quick response. I took a look at it, but I'm not sure I have enough knowledge to fully make sense of what I was looking at. I followed the steps you laid out in the second article, but, again, not sure I would know an arrhythmia if it was staring me in the face. I'd be happy to share the ECG file with you. What is the best way to share it?

    1. Just send me a dropbox link to the ftmxr....ecg file

    2. Thanks Bruce. The link is below.

  9. Rich, I looked at the ECG file. There aren't excessive APC/VPC activity to account for that high artifact level (that's good). What I do see though is some sections with very low signal strength (I'm going to add it to the Fatmaxxer artifact post). If the battery is reading at 100% in Fatmaxxer, I would rotate the entire belt to the left as I've discussed in a recent post. Low signal strength (low voltage) will make it difficult for the H10 module to detect a beat above the noise threshold (so you see missed beats). Try that and let me know what happens.

    1. The H10 is brand new, and as best I can recall, the battery meter looked like it was full in Fatmaxxer. I'll double check it on there when I get home, and cross check it with the Polar Beats app. Assuming the battery looks good, I'll look for the article that discusses rotating the belt to the left and give that a try.

      As a side note, I found it interesting that both the Fatmaxxer app and HRV Logger seem to have much harder time with artifacts the couple of times that I've used the elliptical as opposed to the treadmill. I chalked it up to something about the difference in the motion of elliptical vs. running.

      I really appreciate your guidance on all this.

    2. Here is the position post -
      Also, try to use some hand cream under the sensor pads for a better electrical signal.

  10. Hey Bruce.

    I'm keen to try your Fatmaxxer app, but I need to buy an Android phone to run it. Can I confirm the spec's I need, please. Android 5 as a minimum? How about RAM?

    Thanks. Jon

  11. To be honest, I don't know the minimum requirements. Although you can ask Ian Peake the developer, probably any android device less than 4-5 years old should do it. Android 5 might be too old.

    1. Thanks... do you have a contact email for them?

  12. use @IanDPeake on twitter, just send him a message or a tweet question

  13. Hi Bruce, thanks for all your work. What value do you have for the A1 inter-calculation period (sec).
    It's default is 20 but do I understand you're using 120 (2 min).



    1. The 2 minutes refers to the window of calculation (collection of RRs), the inter-calculation is how often the app recomputes that 2 min window. 5-20 sec (depending on your device) is recommended. Newish androids can easily do 5s.

  14. Ah thanks for clarifying.
    I'll set it to 5s