20
20
21
21
%% Setting Filters to BOSS Device
22
22
% this allows calibrating the oscillation analysis to an individual peak frequency
23
- bd.alpha.bpf_fir_coeffs = firls(70 , [0 6 9 13 16 (500 / 2 )]/(500 / 2 ), [0 0 1 1 0 0 ], [1 1 1 ]);
23
+ % bd.alpha.bpf_fir_coeffs = firls(70, [0 6 9 13 16 (500/2)]/(500/2), [0 0 1 1 0 0], [1 1 1]);
24
24
% fvtool(bd.alpha.bpf_fir_coeffs, 'Fs', 500) % visualize filter
25
25
26
26
27
27
%% Configuring an instrument buffer to acquire data
28
28
instObj = slrealtime .Instrument ;
29
- instObj .addSignal(' spf_sig_500Hz ' );
29
+ instObj .addSignal(' spf_sig ' );
30
30
instObj .addSignal(' osc' ,' BusElement' ,' alpha.ip' );
31
31
instObj.BufferData = true ;
32
32
42
42
sigData = mapData .values ;
43
43
44
44
% Extract data and downsample fast signal
45
- osc_alpha_ipData = sigData{1 }.data;
46
- spf_sigData = squeeze(sigData{2 }.data)' ;
45
+ osc_alpha_ip = timetable(seconds(sigData{1 }.time),sigData{1 }.data(: ,1 ));
46
+ spf_sig = squeeze(sigData{2 }.data)' ;
47
+ spf_sig = timetable(seconds(sigData{2 }.time),spf_sig(: ,1 ));
47
48
48
- % Compute sample frequency
49
- fs = 1 / mean(diff(sigData{1 }.time));
49
+ syncedData = synchronize(osc_alpha_ip , spf_sig , ' first' , ' nearest' );
50
50
51
51
% Compensante offset in instantaneous predicted phase
52
52
numSamples = bd .alpha .offset_samples ;
53
- assert(numSamples >= 1 )
54
- spf_sigData = spf_sigData(1 + numSamples - 1 : end , 1 );
55
- osc_alpha_ipData = osc_alpha_ipData(1 : size(spf_sigData ,1 ),end );
53
+ assert(numSamples >= 1 );
56
54
57
55
58
56
%% Phase error using standard non-causal methods
59
57
disp(' Determining phase using standard non-causal methods...' );
60
58
61
- % Build zero phase band-pass filter
62
- PhaseErrorFilter = designfilt( ' bandpassfir ' , ' FilterOrder ' , round( fs ), ' CutoffFrequency1 ' , 9 , ' CutoffFrequency2 ' , 13 , ' SampleRate ' , fs );
59
+ % Obtain applied filter
60
+ oscBPFcoeffs = bd .getparam( ' OSC/alpha ' , ' bpf_fir_coeffs ' );
63
61
64
62
% Compute phase prediction error
65
- [phaseError , meanError , meanDev ] = bossapi .boss .computePhasePredictionError(PhaseErrorFilter , spf_sigData(: ,1 ), osc_alpha_ipData(: ,1 ));
63
+ [phaseError , meanError , meanDev ] = bossapi .boss .computePhasePredictionError(oscBPFcoeffs ,...
64
+ syncedData .Var1_spf_sig(1 + numSamples : end ), syncedData .Var1_osc_alpha_ip(1 : end - numSamples ));
66
65
67
66
disp(' Done.' );
68
67
71
70
polarhistogram(phaseError , ' Normalization' , ' probability' , ' BinWidth' , pi / 36 );
72
71
ax = gca ;
73
72
ax.ThetaZeroLocation = ' Top' ;
73
+ ax.ThetaLim = [-180 180 ];
74
74
title(sprintf(' Circular mean = %.1f °\n Circular standard deviation = %.1f °' , meanError , meanDev ));
75
75
76
76
77
77
%% Stop and reset instrumentation
78
- bd .stop ;
79
- bd .removeInstrument(instObj );
78
+ bd .stop ;
0 commit comments