Closed Yukuncn closed 1 year ago
The file you have attached is not accessible. Could you please attach it to a comment?
Few Questions :
Oh,Sorry,I forgot to open file permissions;This is a new file link: https://drive.google.com/file/d/112almsqRELM5sE82I9QIfHjgazAOjLcT/view?usp=sharing 1.The data size is about 100kb and each file has only one channel; 2.reference.wav has 2205 points and singal.wav has about 80000 points
I simulated this code for both Python (using Scipy & Numpy) and Java (using JDSP).
Two things need to be noted:
Scipy imports all data as int16. This has to be converted to int64 for computations to remain consistent to JDSP. This can be done using the .astype(numpy.int64)
function.
On executing both, the execution time came up as this:
For Python:
Execution Time: **231 ms**
Output:
array([10797, 10799, 10807, ..., 87370, 87378, 87394])
For Java:
Execution Time: **777682 ms**
Output:
[10797, 10799, 10807, 10813, 10821, 10829, ... 87335, 87352, 87361, 87370, 87378, 87394]
The outputs for both Python and Java are the same. So, there are some inefficiencies in the code which need to be addressed. The testing code is attached as a ZIP file with this comment.
Thanks a lot,!I know the data type problem.Another problem is that it takes long time to findpeaks on android phone.And i hope you can optimize this problem.I use android studio tool and java for programming language. For time problem,I use a library called TarsosDSP which can be founded at https://github.com/JorenSix/TarsosDSP. It takes about 10-20 seconds to find all the peaks.I think JDSP is a good library and fixing this will make it better.The last i hope you can check the time of Peak Detection and peak filters.Have a nice day!
@Yukuncn
With Commit c882796, the execution speed has been reduced to match Python execution speed.
Execution Time: **294 ms**
Output:
[10797, 10799, 10807, 10813, 10821, 10829, ... 87335, 87352, 87361, 87370, 87378, 87394]
To achieve this, Peak properties are now computed only when the specific property is called / filtered with; and not as a part of the detectPeak()
function.
Currently in dev branch.
When I use your library jdsp for peak detection on android phone,It takes long time and can not get the result. The data can be downloaded at https://drive.google.com/file/d/112almsqRELM5sE82I9QIfHjgazAOjLcT/view?usp=sharing The code as follows: readWavObj = new WAV(); readWavObj1 = new WAV(); try { readWavObj.readWAV(Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + "audio/" + "singal.wav"); originSignal = readWavObj.getData("double"); readWavObj1.readWAV(Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + "reference.wav"); originrefSingal = readWavObj1.getData("double"); } catch (WavFileException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } //covert 1-D array double[] Singal = utilAcObj.getArray(originSignal); double[] refSingal = utilAcObj.getArray(originrefSingal);