From 987ffbb00f7f98ddbebf6e15c244b8c6d5d7d41f Mon Sep 17 00:00:00 2001 From: Iampete1 Date: Sun, 31 Jul 2022 17:58:48 +0100 Subject: [PATCH] Tools: FilterTool: add support for log scale frequency and RPM scale --- .../web-firmware/Tools/FilterTool/filters.js | 27 ++++++++++--- .../web-firmware/Tools/FilterTool/index.html | 40 ++++++++++++++++--- 2 files changed, 55 insertions(+), 12 deletions(-) diff --git a/Tools/autotest/web-firmware/Tools/FilterTool/filters.js b/Tools/autotest/web-firmware/Tools/FilterTool/filters.js index 58e6d7dce3..ba69df8f65 100644 --- a/Tools/autotest/web-firmware/Tools/FilterTool/filters.js +++ b/Tools/autotest/web-firmware/Tools/FilterTool/filters.js @@ -424,9 +424,10 @@ function calculate_filter() { if (use_dB) { // show power in decibels aten = 20 * Math.log10(aten); - } else { - // attenuation is opposite of ratio - aten = 1.0 - aten; + } + var freq_value = freq; + if (use_RPM) { + freq_value *= 60; } var phase_diff = phase - last_phase; if (phase_diff > 180) { @@ -436,8 +437,8 @@ function calculate_filter() { phase_wrap += 360.0; phase += 360.0; } - attenuation.push({x:freq, y:aten}); - phase_lag.push({x:freq, y:-phase}); + attenuation.push({x:freq_value, y:aten}); + phase_lag.push({x:freq_value, y:-phase}); min_atten = Math.min(min_atten, aten); max_atten = Math.max(max_atten, aten); @@ -449,14 +450,28 @@ function calculate_filter() { min_phase_lag = Math.min(Math.max(-get_form("MaxPhaseLag"), min_phase_lag), 0); max_phase_lag = Math.ceil((max_phase_lag+10)/10)*10; max_phase_lag = Math.min(get_form("MaxPhaseLag"), max_phase_lag); + + if (use_RPM) { + freq_max *= 60.0; + } + + var freq_log = document.getElementById("freq_ScaleLog").checked; + if ((freq_log_scale != null) && (freq_log_scale != freq_log)) { + // Scale changed, no easy way to update, delete chart and re-draw + chart.clear(); + chart.destroy(); + chart = null; + } + freq_log_scale = freq_log; + if (chart) { chart.data.datasets[0].data = attenuation; chart.data.datasets[1].data = phase_lag; chart.options.scales.xAxes[0].ticks.max = freq_max; + chart.options.scales.xAxes[0].scaleLabel.labelString = freq_string chart.options.scales.yAxes[0].ticks.min = min_atten chart.options.scales.yAxes[0].ticks.max = max_atten; chart.options.scales.yAxes[0].scaleLabel.labelString = atten_string; - chart.options.scales.yAxes[0].ticks.reverse = !use_dB; chart.options.scales.yAxes[1].ticks.min = -max_phase_lag; chart.options.scales.yAxes[1].ticks.max = -min_phase_lag; chart.update(); diff --git a/Tools/autotest/web-firmware/Tools/FilterTool/index.html b/Tools/autotest/web-firmware/Tools/FilterTool/index.html index 7b5cfa845c..e60e97dd39 100644 --- a/Tools/autotest/web-firmware/Tools/FilterTool/index.html +++ b/Tools/autotest/web-firmware/Tools/FilterTool/index.html @@ -25,12 +25,40 @@ ArduPilot 4.2 filter setup.
Graph Settings -

- -
- -
-

+ + + + + +
+
+ Magnitude scale + +
+ +
+
+
+
+ Frequency scale + + + + + +
+ +
+ +
+
+ +
+ +
+
+
+