Comments (5)
Thank you for raising this issue.
I have tried to answer the highlighted questions in a new markdown document here: https://github.com/GallVp/emgGO/blob/master/docs/edtaExplained.md
Go through the document to see if it answers your questions. I can add additional information if you have more questions.
It would be a great help if you highlight any spelling or other mistake, correct it and add a pull request.
from emggo.
Thank you for your work again.
Your explanation does an amazing job for people to start!
It is unfortunate that I could not spot any mistake in your explanation or so, I am sure others may be able to spot it!
I do however another few questions, your script runs on the single-channel source, which works fine with my data to in conditions of correct modifications.
For my data, I had to modify a bit, the highlighted bits are where I had to add in order to get the baselinemean and std. Weirdly, the index for IA is retrieved in random order, does this matter? as your data gives ordered IA. I had to times by 10000 as my EMG is not amplified much as your value.
UNIQUE_TOL = 1/max(abs(inputSignal*10000)); [~, IA, ~] = uniquetol(movingAverage, UNIQUE_TOL); **IA = sort(IA);**
Also, with I rounded my index for baselineinterval too, but you don't seem to do it and works fine. Is there a reason why you didn't use round for this?
baselineInterval = startSampleNo - floor(baselineLength/2) + 1 : startSampleNo + floor(baselineLength/2); **baselineInterval = round(baselineInterval);**
Lastly, have you tried with multichannel data? I was wondering if the value of **baseline mean and std were calculated for each channel. If you look at my data(14 channel), the first channel does detect the activation very well but for other channels, it doesn't seem to do so.
If I am not very clear, please let me know.
Thank you for your work!
from emggo.
A few notes:
- uniquetol returns a rank order of the signal by comparing values. For example, consider the following code.
[~, IA, ~] = uniquetol([10 5 1 8], 0.1)
IA =
3
2
4
1
IA is the rank order of [10 5 1 8] in ascending order. Using sort
on IA destroys the rank order.
-
The value of UNIQUE_TOL also created problems for me. If you can share your data via email, I can look at the problem and maybe change the way UNIQUE_TOL is calculated so that it works across datasets.
-
I am rounding the
baselineLength
parameter using the sampling rate in theextendedDTA
function. If you need to roundbaselineInterval
, then there is bug in my code as rounding should not be required. -
Yes, I have tested the toolbox on multi-channel data. The
extendedDTA
function only works on single channel but the GUIs are designed to work on multi-channel data by running theextendedDTA
on each channel individually. The GUIs keep parameters separate for each channel. -
I would suggest to use the nOptim based Auto Find function to detect onsets/offsets. But if you are trying to go through the ins and outs of the algorithm, then tuning the parameters manually is of course what you need to do. This requires tuning parameters for each channel separately as in my experience same parameters rarely work for all the channels.
from emggo.
I will send you the link where my data is stored via email. I personally believe that the value of UNIQUE_TOL is creating a problem which leads onto other functions hence not able to get correct detection of bursts.
Regards to your comment on extendedDTA function only working on a single channel and manually adjusting the parameters using GUI. Please correct me if I am wrong, but as far as I understand, values for OptionsVector should not vary between channels as the behaviour of muscle activation are quite similar.
Please let me know,
Thank you!
from emggo.
Thank you for your help in identifying a number of bugs in the toolbox. Please download the latest version with the bugs fixed. Two of the fixed bugs are:
-
UNIQUE_TOL has been removed and a simpler logic is now used. For further details, please see issue no 2.
-
By default,
emgEventsDetectTool
initialises same parameters for all the channels. If a parameter is changed for the selected channel, this does not affect the remaining channels. This was done as in some situations, different channels need different parameters. But you are right, there are situations when same parameters are required. To cater to such situations, I have added an additional button "Apply to all". By pressing this button, the current parameters are applied across all the channels, thus, saving time in copy pasting parameters manually.
from emggo.
Related Issues (7)
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from emggo.