Skip to content

Commit 6c00226

Browse files
committed
cleanup code
Signed-off-by: Andrey Parfenov <[email protected]>
1 parent 534dbcd commit 6c00226

File tree

6 files changed

+26
-158
lines changed

6 files changed

+26
-158
lines changed

app/src/main/java/com/example/brainflowplot/DataActivity.java

+1-11
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ public class DataActivity extends AppCompatActivity {
2727
public static BoardShim boardShim = null;
2828
public static int samplingRate = 0;
2929
public static int[] channels = null;
30-
3130
public static final int[] colors = {Color.BLUE, Color.YELLOW, Color.RED, Color.MAGENTA, Color.GREEN, Color.CYAN, Color.GRAY, Color.BLACK};
3231

3332
@Override
@@ -53,7 +52,6 @@ protected void onStart() {
5352
} catch (Exception e) {
5453
// do nothing
5554
}
56-
String dataType = prefs.getString(getString(R.string.data_type_key), "");
5755

5856
try {
5957
BrainFlowInputParams params = new BrainFlowInputParams();
@@ -64,15 +62,7 @@ protected void onStart() {
6462
boardShim.prepare_session();
6563
boardShim.start_stream();
6664
samplingRate = BoardShim.get_sampling_rate(boardId);
67-
if (dataType.equals("EEG")) {
68-
channels = BoardShim.get_eeg_channels(boardId);
69-
} else {
70-
if (dataType.equals("EMG")) {
71-
channels = BoardShim.get_emg_channels(boardId);
72-
} else {
73-
channels = BoardShim.get_ecg_channels(boardId);
74-
}
75-
}
65+
channels = BoardShim.get_exg_channels(boardId);
7666
SettingsActivity.isPrevFailed = false;
7767
} catch (Exception e) {
7868
Log.e(getString(R.string.log_tag), e.getMessage());

app/src/main/java/com/example/brainflowplot/ui/bandpowerplot/BandPowerPlotFragment.java

+6-44
Original file line numberDiff line numberDiff line change
@@ -19,36 +19,27 @@
1919
import com.jjoe64.graphview.series.BarGraphSeries;
2020
import com.jjoe64.graphview.series.DataPoint;
2121

22-
import org.apache.commons.lang3.tuple.ImmutablePair;
2322
import org.apache.commons.lang3.tuple.Pair;
2423

25-
import java.util.ArrayList;
26-
import java.util.List;
27-
2824
import brainflow.BrainFlowError;
2925
import brainflow.DataFilter;
30-
import brainflow.WindowFunctions;
3126

3227

3328
public class BandPowerPlotFragment extends Fragment {
3429

35-
public int windowSize = 2;
36-
public int timeSleep = 100;
30+
private int windowSize = 4;
31+
private int timeSleep = 50;
3732
private GraphView graph = null;
3833
private BarGraphSeries<DataPoint> series= null;
39-
4034
private Runnable worker = null;
4135
private final Handler handler = new Handler();
4236

43-
private List<Pair<Integer, Integer>> bands = new ArrayList<Pair<Integer, Integer>>();
44-
private final String[] names = {"Delta", "Theta", "Alpha", "Beta", "Gamma"};
45-
4637
public View onCreateView(@NonNull LayoutInflater inflater,
4738
ViewGroup container, Bundle savedInstanceState) {
4839
View rootView = inflater.inflate(R.layout.fragment_bandpowerplot, container, false);
4940

5041
graph = (GraphView) rootView.findViewById(R.id.bandpowergraph);
51-
graph.setTitle("BandPower");
42+
graph.setTitle("BandPowers");
5243
graph.getViewport().setXAxisBoundsManual(true);
5344
graph.getViewport().setMinX(0);
5445
graph.getViewport().setMaxX(5);
@@ -65,16 +56,9 @@ public int get(DataPoint data) {
6556
return Color.rgb((int) data.getX() * 255 / 6, (int) Math.abs(data.getY() * 255 / 4), 100);
6657
}
6758
});
68-
series.setTitle("Delta Theta Alpha Beta Gamma");
6959

7060
graph.addSeries(series);
7161

72-
bands.add(new ImmutablePair<Integer, Integer>(1, 4));
73-
bands.add(new ImmutablePair<Integer, Integer>(4, 8));
74-
bands.add(new ImmutablePair<Integer, Integer>(8, 13));
75-
bands.add(new ImmutablePair<Integer, Integer>(13, 30));
76-
bands.add(new ImmutablePair<Integer, Integer>(30, 70));
77-
7862
return rootView;
7963
}
8064

@@ -88,32 +72,10 @@ public void run() {
8872
try {
8973
int numDataPoints = DataFilter.get_nearest_power_of_two(DataActivity.samplingRate * windowSize);
9074
double[][] tmpArray = DataActivity.boardShim.get_current_board_data(numDataPoints);
91-
if (tmpArray[0].length != numDataPoints) {
92-
// dont prepend, just wait for more data
93-
return;
94-
}
95-
// average across all channels
96-
DataPoint[] values = new DataPoint[bands.size()];
75+
Pair<double[], double[]> bands = DataFilter.get_avg_band_powers (tmpArray, DataActivity.channels, DataActivity.samplingRate, true);
76+
DataPoint[] values = new DataPoint[bands.getKey().length];
9777
for (int i = 0; i < values.length; i++) {
98-
values[i] = new DataPoint(i, 0);
99-
}
100-
for (int i = 0; i < DataActivity.channels.length; i++) {
101-
double[] channel = tmpArray[DataActivity.channels[i]];
102-
Pair<double[], double[]> psd = DataFilter.get_psd (channel, 0, channel.length, DataActivity.samplingRate, WindowFunctions.HAMMING.get_code ());
103-
for (int j = 0; j < bands.size(); j++) {
104-
double bandPower = DataFilter.get_band_power(psd, bands.get(j).getLeft(), bands.get(j).getRight());
105-
values[j] = new DataPoint(values[j].getX(), values[j].getY() + bandPower);
106-
}
107-
}
108-
// normalize for colors
109-
double max = 0;
110-
for (int j = 0; j < bands.size(); j++) {
111-
if (values[j].getY() > max) {
112-
max = values[j].getY();
113-
}
114-
}
115-
for (int j = 0; j < bands.size(); j++) {
116-
values[j] = new DataPoint(values[j].getX(), values[j].getY() / max);
78+
values[i] = new DataPoint(i, bands.getKey()[i]);
11779
}
11880
series.resetData(values);
11981
} catch (BrainFlowError e) {

app/src/main/java/com/example/brainflowplot/ui/dataplot/DataPlotFragment.java

+8-28
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.example.brainflowplot.ui.dataplot;
22

3-
import android.content.SharedPreferences;
43
import android.os.Bundle;
54
import android.os.Handler;
65
import android.util.Log;
@@ -10,7 +9,6 @@
109

1110
import androidx.annotation.NonNull;
1211
import androidx.fragment.app.Fragment;
13-
import androidx.preference.PreferenceManager;
1412

1513
import com.example.brainflowplot.DataActivity;
1614
import com.example.brainflowplot.R;
@@ -26,19 +24,14 @@
2624

2725
public class DataPlotFragment extends Fragment {
2826

29-
public int windowSize = 8;
30-
public int downnsamplingOrder = 1;
31-
public int timeSleep = 100; // 10fps, good enough for phone
27+
private int windowSize = 8;
28+
private int timeSleep = 50; // 20fps
3229
private GraphView graph = null;
3330
private LineGraphSeries<DataPoint>[] series= null;
34-
3531
private Runnable worker = null;
3632
private final Handler handler = new Handler();
33+
private static int downnsamplingOrder = 1;
3734
private static final int maxValue = 1000;
38-
private double bandPassCenter = 0;
39-
private double bandPassWidth = 0;
40-
private double bandStopWidth = 0;
41-
private double bandStopCenter = 0;
4235

4336
public View onCreateView(@NonNull LayoutInflater inflater,
4437
ViewGroup container, Bundle savedInstanceState) {
@@ -51,19 +44,6 @@ public View onCreateView(@NonNull LayoutInflater inflater,
5144
graph.getGridLabelRenderer().setHorizontalLabelsVisible(false);
5245
graph.getGridLabelRenderer().setGridStyle(GridLabelRenderer.GridStyle.NONE);
5346

54-
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(rootView.getContext());
55-
String bp = prefs.getString(getString(R.string.bp_key), "1-50");
56-
String bs = prefs.getString(getString(R.string.bs_key), "58-62");
57-
int bpStart = Integer.valueOf(bp.split("-")[0]);
58-
int bpEnd = Integer.valueOf(bp.split("-")[1]);
59-
int bsStart = Integer.valueOf(bs.split("-")[0]);
60-
int bsEnd = Integer.valueOf(bs.split("-")[1]);
61-
62-
bandStopWidth = Math.abs(bsEnd - bsStart);
63-
bandStopCenter = (bsStart + bsEnd) / 2.0;
64-
bandPassWidth = Math.abs(bpEnd - bpStart);
65-
bandPassCenter = (bpStart + bpEnd) / 2.0;
66-
6747
return rootView;
6848
}
6949

@@ -75,8 +55,6 @@ public void onResume() {
7555
int desiredSamplingRate = 500;
7656
if (DataActivity.samplingRate > desiredSamplingRate) {
7757
downnsamplingOrder = DataActivity.samplingRate / desiredSamplingRate;
78-
} else {
79-
downnsamplingOrder = 1;
8058
}
8159

8260
graph.getViewport().setXAxisBoundsManual(true);
@@ -97,8 +75,8 @@ public void run() {
9775
double[][] tempArray = DataActivity.boardShim.get_current_board_data(DataActivity.samplingRate * windowSize);
9876
double[][] tmpArray = new double[tempArray.length][DataActivity.samplingRate * windowSize];
9977
double[][] dataArray = null;
78+
// prepend with zeroes if less datapoints
10079
if (tempArray[0].length != DataActivity.samplingRate * windowSize) {
101-
// prepend with zeroes if less datapoints
10280
for (int i = 0; i < tempArray.length; i++) {
10381
for (int j = 0; j < DataActivity.samplingRate * windowSize - tempArray[i].length; j++) {
10482
tmpArray[i][j] = 0.0;
@@ -112,9 +90,11 @@ public void run() {
11290
tmpArray = tempArray;
11391
}
11492
for (int i = 0; i < DataActivity.channels.length; i++) {
115-
DataFilter.perform_bandstop(tmpArray[DataActivity.channels[i]], DataActivity.samplingRate, bandStopCenter, bandStopWidth, 2,
93+
DataFilter.perform_bandstop(tmpArray[DataActivity.channels[i]], DataActivity.samplingRate, 50.0, 4.0, 2,
94+
FilterTypes.BUTTERWORTH.get_code (), 0.0);
95+
DataFilter.perform_bandstop(tmpArray[DataActivity.channels[i]], DataActivity.samplingRate, 60.0, 4.0, 2,
11696
FilterTypes.BUTTERWORTH.get_code (), 0.0);
117-
DataFilter.perform_bandpass(tmpArray[DataActivity.channels[i]], DataActivity.samplingRate, bandPassCenter, bandPassWidth, 2,
97+
DataFilter.perform_bandpass(tmpArray[DataActivity.channels[i]], DataActivity.samplingRate, 24.0, 47.0, 2,
11898
FilterTypes.BUTTERWORTH.get_code (), 0.0);
11999
}
120100
// downsampling

app/src/main/java/com/example/brainflowplot/ui/psdplot/PSDPlotFragment.java

+10-30
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.example.brainflowplot.ui.psdplot;
22

3-
import android.content.SharedPreferences;
43
import android.os.Bundle;
54
import android.os.Handler;
65
import android.util.Log;
@@ -10,7 +9,6 @@
109

1110
import androidx.annotation.NonNull;
1211
import androidx.fragment.app.Fragment;
13-
import androidx.preference.PreferenceManager;
1412

1513
import com.example.brainflowplot.DataActivity;
1614
import com.example.brainflowplot.R;
@@ -29,17 +27,13 @@
2927

3028
public class PSDPlotFragment extends Fragment {
3129

32-
public int windowSize = 2;
33-
public int timeSleep = 100;
30+
public int windowSize = 8;
31+
public int timeSleep = 50;
3432
private GraphView graph = null;
3533
private LineGraphSeries<DataPoint>[] series= null;
3634

3735
private Runnable worker = null;
3836
private final Handler handler = new Handler();
39-
private double bandPassCenter = 0;
40-
private double bandPassWidth = 0;
41-
private double bandStopWidth = 0;
42-
private double bandStopCenter = 0;
4337

4438
public View onCreateView(@NonNull LayoutInflater inflater,
4539
ViewGroup container, Bundle savedInstanceState) {
@@ -59,20 +53,7 @@ public View onCreateView(@NonNull LayoutInflater inflater,
5953
graph.getViewport().setMaxY(10);
6054
graph.getViewport().setYAxisBoundsManual(true);
6155
graph.getViewport().setXAxisBoundsManual(true);
62-
graph.getGridLabelRenderer().setNumHorizontalLabels(10);
63-
64-
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(rootView.getContext());
65-
String bp = prefs.getString(getString(R.string.bp_key), "1-50");
66-
String bs = prefs.getString(getString(R.string.bs_key), "58-62");
67-
int bpStart = Integer.valueOf(bp.split("-")[0]);
68-
int bpEnd = Integer.valueOf(bp.split("-")[1]);
69-
int bsStart = Integer.valueOf(bs.split("-")[0]);
70-
int bsEnd = Integer.valueOf(bs.split("-")[1]);
71-
72-
bandStopWidth = Math.abs(bsEnd - bsStart);
73-
bandStopCenter = (bsStart + bsEnd) / 2.0;
74-
bandPassWidth = Math.abs(bpEnd - bpStart);
75-
bandPassCenter = (bpStart + bpEnd) / 2.0;
56+
graph.getGridLabelRenderer().setNumHorizontalLabels(20);
7657

7758
return rootView;
7859
}
@@ -95,26 +76,25 @@ public void run() {
9576
try {
9677
int numDataPoints = DataFilter.get_nearest_power_of_two(DataActivity.samplingRate * windowSize);
9778
double[][] tmpArray = DataActivity.boardShim.get_current_board_data(numDataPoints);
98-
if (tmpArray[0].length != numDataPoints) {
99-
// dont prepend, just wait for more data
100-
return;
101-
}
10279
for (int i = 0; i < DataActivity.channels.length; i++) {
103-
DataFilter.perform_bandstop(tmpArray[DataActivity.channels[i]], DataActivity.samplingRate, bandStopCenter, bandStopWidth, 2,
80+
DataFilter.perform_bandstop(tmpArray[DataActivity.channels[i]], DataActivity.samplingRate, 50.0, 4.0, 2,
81+
FilterTypes.BUTTERWORTH.get_code (), 0.0);
82+
DataFilter.perform_bandstop(tmpArray[DataActivity.channels[i]], DataActivity.samplingRate, 60.0, 4.0, 2,
10483
FilterTypes.BUTTERWORTH.get_code (), 0.0);
105-
DataFilter.perform_bandpass(tmpArray[DataActivity.channels[i]], DataActivity.samplingRate, bandPassCenter, bandPassWidth, 2,
84+
DataFilter.perform_bandpass(tmpArray[DataActivity.channels[i]], DataActivity.samplingRate, 24.0, 47.0, 2,
10685
FilterTypes.BUTTERWORTH.get_code (), 0.0);
10786
}
10887
// prepare data to plot
10988
for (int i = 0; i < DataActivity.channels.length; i++) {
11089
double[] channel = tmpArray[DataActivity.channels[i]];
111-
Pair<double[], double[]> psd = DataFilter.get_log_psd (channel, 0, channel.length, DataActivity.samplingRate, WindowFunctions.HAMMING.get_code ());
90+
int nfft = DataFilter.get_nearest_power_of_two(DataActivity.samplingRate) * 2;
91+
Pair<double[], double[]> psd = DataFilter.get_psd_welch (channel, nfft, nfft / 2, DataActivity.samplingRate, WindowFunctions.HANNING.get_code());
11292
int count = psd.getKey().length;
11393
DataPoint[] values = new DataPoint[count];
11494
for (int j = 0; j < count; j++) {
11595
double x = psd.getValue()[j];
11696
double y = psd.getKey()[j];
117-
DataPoint v = new DataPoint(x, y);
97+
DataPoint v = new DataPoint(x, Math.log10(y));
11898
values[j] = v;
11999
}
120100
series[i].resetData(values);

app/src/main/res/values/strings.xml

+1-11
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,7 @@
3131
<string name="submit_summary">Configure parameters above and submit settings to start</string>
3232
<string name="submit_key">submit_key</string>
3333
<string name="title_activity_data">DataActivity</string>
34-
35-
<string name="units">Hz</string>
36-
<string name="bp_message">Configure BandPass Filter</string>
37-
<string name="bp_title">BandPass</string>
38-
<string name="bp_summary">Configure BandPass Filter</string>
39-
<string name="bp_key">bp_key</string>
40-
<string name="bs_message">Configure BandStop Filter</string>
41-
<string name="bs_title">BandStop</string>
42-
<string name="bs_summary">Configure BandStop Filter</string>
43-
<string name="bs_key">bs_key</string>
44-
<string name="resolution_preference_separator">-</string>
34+
4535
<string name="title_dataplot">Data</string>
4636
<string name="title_psdplot">PSD</string>
4737
<string name="title_bandpowerplot">BandPower</string>

app/src/main/res/xml/root_preferences.xml

-34
Original file line numberDiff line numberDiff line change
@@ -25,38 +25,4 @@
2525

2626
</PreferenceCategory>
2727

28-
<PreferenceCategory app:title="@string/app_params">
29-
30-
<ListPreference
31-
app:entries="@array/data_type_entries"
32-
app:entryValues="@array/data_type_values"
33-
app:key="@string/data_type_key"
34-
app:title="@string/data_type_title"
35-
app:defaultValue="EEG"
36-
app:useSimpleSummaryProvider="true"/>
37-
38-
<de.mrapp.android.preference.ResolutionPreference
39-
app:defaultValue="1-50"
40-
app:unit="@string/units"
41-
app:dialogMessage="@string/bp_message"
42-
app:dialogTitle="@string/bp_title"
43-
app:key="@string/bp_key"
44-
app:summary="@string/bp_summary"
45-
app:title="@string/bp_title"
46-
app:showValueAsSummary="true"
47-
app:dialogThemeResource="@style/Theme.MaterialComponents.Light.NoActionBar"/>
48-
49-
<de.mrapp.android.preference.ResolutionPreference
50-
app:defaultValue="58-62"
51-
app:unit="@string/units"
52-
app:dialogMessage="@string/bs_message"
53-
app:dialogTitle="@string/bs_title"
54-
app:key="@string/bs_key"
55-
app:summary="@string/bs_summary"
56-
app:title="@string/bs_title"
57-
app:showValueAsSummary="true"
58-
app:dialogThemeResource="@style/Theme.MaterialComponents.Light.NoActionBar"/>
59-
60-
</PreferenceCategory>
61-
6228
</PreferenceScreen>

0 commit comments

Comments
 (0)