Added settings to configure the flap detector algorithm

This commit is contained in:
Graham Jones
2024-06-30 23:00:05 +01:00
parent 404bc3108d
commit c483795d44
4 changed files with 66 additions and 12 deletions

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:versionCode="145"
android:versionName="4.2.11x1">
android:versionCode="146"
android:versionName="4.2.11x2">
<!-- android:allowBackup="false" -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>

View File

@@ -89,6 +89,12 @@ public abstract class SdDataSource {
private short mAlarmTime;
private short mAlarmThresh;
private short mAlarmRatioThresh;
private short mFlapThresh;
private short mFlapRatioThresh;
private double mFlapFreqMin;
private double mFlapFreqMax;
private boolean mFallActive;
private short mFallThreshMin;
private short mFallThreshMax;
@@ -620,10 +626,6 @@ public abstract class SdDataSource {
*/
protected boolean flapCheck() {
boolean retVal;
double flapFreqMin = 2.0;
double flapFreqMax = 4.0;
double flapRatioThresh = 50.0;
double flapThresh = 5000.0;
int nMin = 0;
int nMax = 0;
int nFreqCutoff = 0;
@@ -637,12 +639,12 @@ public abstract class SdDataSource {
Log.v(TAG, "flapCheck(): mSampleFreq=" + mSampleFreq + " mNSamp=" + mSdData.mNsamp + ": freqRes=" + freqRes);
Log.v(TAG, "flapCheck(): rawData=" + Arrays.toString(mSdData.rawData));
// Set the frequency bounds for the analysis in fft output bin numbers.
nMin = freq2FftBin(flapFreqMin, mSampleFreq, mSdData.mNsamp);
nMax = freq2FftBin(flapFreqMax, mSampleFreq, mSdData.mNsamp);
nMin = freq2FftBin(mFlapFreqMin, mSampleFreq, mSdData.mNsamp);
nMax = freq2FftBin(mFlapFreqMax, mSampleFreq, mSdData.mNsamp);
// Calculate the bin number of the cutoff frequency
nFreqCutoff = freq2FftBin(mFreqCutoff, mSampleFreq, mSdData.mNsamp);
Log.v(TAG, "flapCheck(): flapFreqMin=" + flapFreqMin + ", nMin=" + nMin
+ ", flapFreqMax=" + flapFreqMax + ", nMax=" + nMax);
Log.v(TAG, "flapCheck(): flapFreqMin=" + mFlapFreqMin + ", nMin=" + nMin
+ ", flapFreqMax=" + mFlapFreqMax + ", nMax=" + nMax);
Log.v(TAG, "mFreqCutoff = " + mFreqCutoff + ", nFreqCutoff=" + nFreqCutoff);
DoubleFFT_1D fftDo = new DoubleFFT_1D(mSdData.mNsamp);
@@ -683,8 +685,8 @@ public abstract class SdDataSource {
}
retVal = false;
if (roiPower > flapThresh) {
if (roiRatio > flapRatioThresh) {
if (roiPower > mFlapThresh) {
if (roiRatio > mFlapRatioThresh) {
Log.i(TAG,"flapCheck() - *** flap detected ***");
retVal = true;
}
@@ -1255,6 +1257,26 @@ public abstract class SdDataSource {
Log.v(TAG, "updatePrefs() FlapAlarmActive = " + mSdData.mFlapAlarmActive);
mUtil.writeToSysLogFile("updatePrefs() FlaplarmActive = " + mSdData.mFlapAlarmActive);
prefStr = SP.getString("FlapAlarmThresh", "SET_FROM_XML");
mFlapThresh = (short) Integer.parseInt(prefStr);
Log.v(TAG, "updatePrefs() FlapAlarmThresh = " + mFlapThresh);
mUtil.writeToSysLogFile("updatePrefs() FlapThresh = " + mFlapThresh);
prefStr = SP.getString("FlapAlarmRatioThresh", "SET_FROM_XML");
mFlapRatioThresh = (short) Integer.parseInt(prefStr);
Log.v(TAG, "updatePrefs() FlapAlarmRatioThresh = " + mFlapRatioThresh);
mUtil.writeToSysLogFile("updatePrefs() FlapAlarmRatioThresh = " + mFlapRatioThresh);
prefStr = SP.getString("FlapAlarmFreqMin", "SET_FROM_XML");
mFlapFreqMin = (double) Double.parseDouble(prefStr);
Log.v(TAG, "updatePrefs() FlapAlarmFreqMin = " + mFlapFreqMin);
mUtil.writeToSysLogFile("updatePrefs() FlapAlarmFreqMin = " + mFlapFreqMin);
prefStr = SP.getString("FlapAlarmFreqMax", "SET_FROM_XML");
mFlapFreqMax = (double) Double.parseDouble(prefStr);
Log.v(TAG, "updatePrefs() FlapAlarmFreqMax = " + mFlapFreqMax);
mUtil.writeToSysLogFile("updatePrefs() FlapAlarmFreqMax = " + mFlapFreqMax);
mSdData.mCnnAlarmActive = SP.getBoolean("CnnAlarmActive", false);
Log.v(TAG, "updatePrefs() CnnAlarmActive = " + mSdData.mCnnAlarmActive);
mUtil.writeToSysLogFile("updatePrefs() CnnAlarmActive = " + mSdData.mCnnAlarmActive);

View File

@@ -42,6 +42,7 @@
android:summary=""
android:title="@string/fall_detect_active_title" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/SeizureDetectorSettingsTitle">
<CheckBoxPreference
android:defaultValue="true"
@@ -88,6 +89,37 @@
android:title="@string/sample_period_title" />
</PreferenceCategory>
<PreferenceCategory android:title="Flap Alarm Settings">
<CheckBoxPreference
android:defaultValue="true"
android:key="FlapAlarmActive"
android:summary="Enable the experimental alarm to detect arm 'flapping' motion"
android:title="Enable Flap Alarm" />
<EditTextPreference
android:defaultValue="5000"
android:key="FlapAlarmThresh"
android:summary="Flap Alarm Threshold"
android:title="Flap Alarm Threshold" />
<EditTextPreference
android:defaultValue="90"
android:key="FlapAlarmRatioThresh"
android:summary="Flap Alarm Ratio Threshold"
android:title="Flap Alarm Ratio Threshold" />
<EditTextPreference
android:defaultValue="2"
android:key="FlapAlarmFreqMin"
android:summary="@string/AlarmFreqMinSummary"
android:title="@string/AlarmFreqMinTitle" />
<EditTextPreference
android:defaultValue="4"
android:key="FlapAlarmFreqMax"
android:summary="@string/AlarmFreqMaxSummary"
android:title="@string/AlarmFreqMaxTitle" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/ml_sd_settings_title">
<CheckBoxPreference
android:defaultValue="false"

Binary file not shown.