You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

DetectorFFT.java 8.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package com.feemers.android.fftdrawer.SignalProcessing;
  2. import android.util.Log;
  3. public class DetectorFFT extends DetectorImpl {
  4. private int m_sample_cnt; //TODO: move this to DetectorImpl
  5. private Complex[] m_samples;
  6. public DetectorFFT(int windowSize)
  7. {
  8. super(windowSize);
  9. Log.d("DetectorFFT", "DetectorFFT() - Constructor called");
  10. m_sample_cnt = 0;
  11. m_samples = new Complex[m_buffer_SIZE];
  12. for(int i = 0; i < m_buffer_SIZE; i++){
  13. m_samples[i] = new Complex(0, 0);
  14. }
  15. }
  16. @Override
  17. public void onNewSample(double sample) {
  18. super.onNewSample(sample);
  19. m_samples[m_sample_cnt] = new Complex(sample, 0);
  20. m_sample_cnt++;
  21. if(m_sample_cnt % 100 == 0){
  22. check_for_earthquake_fft();
  23. }
  24. if (m_sample_cnt >= m_buffer_SIZE)
  25. {
  26. m_sample_cnt = 0;
  27. }
  28. }
  29. public void check_for_earthquake_fft()
  30. {
  31. //Log.d("DetectorFFT", "check_for_earthquake_fft() was called");
  32. // Calculate the fft of the protected classmember m_buffer
  33. // If the highest amplitude exceeds the threshold, send info via notifier
  34. FFT fft = new FFT();
  35. /*double[] tmp = new double[512];
  36. tmp = new double[] {0,1,1.22464679914735e-16,-1,-2.44929359829471e-16,1,3.67394039744206e-16,-1,-4.89858719658941e-16,1,-1.16403343982657e-15,-1,-7.34788079488412e-16,1,-2.69546091939735e-15,-1,-9.79717439317883e-16,1,1.10218211923262e-15,-1,2.32806687965315e-15,1,-2.20560219973841e-15,-1,-1.46957615897682e-15,1,-1.96067283990894e-15,-1,5.39092183879471e-15,1,-1.71574348007947e-15,-1,-1.95943487863577e-15,1,-1.47081412025000e-15,-1,-2.20436423846524e-15,1,-1.22588476042053e-15,-1,4.65613375930630e-15,1,-9.80955400591059e-16,-1,4.41120439947683e-15,1,-7.84145339836259e-15,-1,-2.93915231795365e-15,1,-4.91096680932118e-16,-1,3.92134567981788e-15,1,-7.35159467870365e-15,-1,1.07818436775894e-14,1,-1.23796127317672e-18,-1,3.43148696015894e-15,1,-6.86173595904471e-15,-1,-3.91886975727153e-15,1,4.88620758385765e-16,-1,2.94162824050000e-15,1,-6.37187723938577e-15,-1,-4.40872847693047e-15,1,9.78479478044706e-16,-1,2.45176952084106e-15,1,-5.88201851972683e-15,-1,9.31226751861259e-15,1,-1.27425165174984e-14,-1,1.96191080118212e-15,1,8.81869491513412e-15,-1,8.82240879895365e-15,1,1.95819691736259e-15,-1,1.56829067967252e-14,1,-4.90230108040894e-15,-1,-5.87830463590730e-15,1,-1.17627990781805e-14,-1,9.82193361864236e-16,1,9.79841235445200e-15,-1,7.84269135963577e-15,1,2.93791435668047e-15,-1,1.47031893574073e-14,1,-3.92258364109106e-15,-1,2.15636873551788e-14,1,-1.07830816388626e-14,-1,2.47592254635343e-18,1,1.07781297937699e-14,-1,6.86297392031788e-15,1,3.91763179599835e-15,-1,1.37234719180894e-14,1,-2.94286620177318e-15,-1,-7.83773951454306e-15,1,-9.80336419954471e-15,-1,-9.77241516771529e-16,1,-1.66638621973162e-14,-1,5.88325648100000e-15,1,-2.35243601950878e-14,-1,1.27437544787715e-14,1,-1.96314876245530e-15,-1,-8.81745695386094e-15,1,-8.82364676022683e-15,-1,-1.95695895608941e-15,1,1.27375646724057e-14,-1,4.90353904168212e-15,1,5.87706667463412e-15,-1,1.17640370394537e-14,1,-9.83431323137413e-16,-1,1.86245350372252e-14,1,-7.84392932090894e-15,-1,2.54850330349967e-14,1,-1.47044273186805e-14,-1,3.92382160236424e-15,1,6.85678411395200e-15,-1,-1.76373898302682e-14,1,-2.84254233142235e-14,-1,1.76448175979073e-14,1,-6.86421188159106e-15,-1,-3.91639383472518e-15,1,1.46969995510414e-14,-1,3.13658135934504e-14,1,-2.05852078771341e-14,-1,9.80460216081789e-15,1,9.76003555498353e-16,-1,-1.17566092718146e-14,1,2.25372149881308e-14,-1,2.35255981563610e-14,1,-1.27449924400447e-14,-1,1.96438672372847e-15,1,8.81621899258777e-15,-1,-1.95968247089040e-14,1,-2.64659884355878e-14,-1,1.56853827192715e-14,1,-4.90477700295530e-15,-1,-5.87582871336094e-15,1,-4.01869844311308e-14,-1,2.94063787148146e-14,1,-1.86257729984984e-14,-1,7.84516728218212e-15,1,-5.39079804266739e-14,-1,4.31273747103577e-14,1,-3.23467689940414e-14,-1,2.15661632777252e-14,1,-6.76289764222170e-14,-1,4.95184509270686e-18,1,1.07756538712235e-14,-1,-2.15562595875398e-14,1,3.23368653038560e-14,-1,1.37259478406358e-14,1,-2.94534212431953e-15,-1,-7.83526359199671e-15,1,1.86158693083129e-14,-1,2.74469438361788e-14,1,-1.66663381198626e-14,-1,5.88573240354636e-15,1,4.89487331276988e-15,-1,-1.56754790290861e-14,1,-3.03873341154057e-14,-1,1.96067283990894e-14,1,-8.82612268277318e-15,-1,-1.95448303354306e-15,1,-4.41083301109487e-14,-1,3.33277243946325e-14,1,-2.25471186783162e-14,-1,1.17665129620000e-14,1,-5.78293261064918e-14,-1,4.70487203901755e-14,1,-3.62681146738593e-14,-1,2.54875089575431e-14,1,4.21365156195812e-14,-1,3.92629752491059e-15,1,6.85430819140565e-15,-1,-1.76349139077219e-14,1,2.84155196240381e-14,-1,1.76472935204537e-14,1,-6.86668780413741e-15,-1,-3.91391791217882e-15,1,1.46945236284951e-14,-1,-2.54751293448113e-14,1,-2.05876837996805e-14,-1,9.80707808336424e-15,1,9.73527632951999e-16,-1,-1.17541333492682e-14,1,-3.43086797952235e-14,-1,2.35280740789073e-14,1,-1.27474683625911e-14,-1,1.96686264627483e-15,1,-4.80296757907666e-14,-1,3.72490700744504e-14,1,-2.64684643581341e-14,-1,1.56878586418179e-14,1,-6.17506717863097e-14,-1,5.09700660699934e-14,1,-4.01894603536772e-14,-1,2.94088546373610e-14,1,-1.86282489210447e-14,-1,7.84764320472847e-15,1,2.93296251158776e-15,-1,-1.37135682279040e-14,1,2.44941739442202e-14,-1,-3.52747796605365e-14,1,4.60553853768527e-14,-1,5.68508466284471e-14,1,-4.60702409121308e-14,-1,3.52896351958146e-14,1,-2.45090294794984e-14,-1,1.37284237631821e-14,1,-2.94781804686588e-15,-1,-7.83278766945035e-15,1,1.86133933857666e-14,-1,-2.93939991020828e-14,1,-7.35122329032170e-14,-1,6.27316271869007e-14,1,-5.19510214705845e-14,-1,4.11704157542683e-14,1,-3.03898100379520e-14,-1,1.96092043216358e-14,1,-8.82859860531953e-15,-1,-1.95200711099671e-15,1,-1.00954224894303e-13,-1,-2.35132185436292e-14,1,3.42938242599454e-14,-1,-4.50744299762617e-14,1,5.58550356925779e-14,-1,4.70511963127219e-14,1,-3.62705905964057e-14,-1,2.54899848800894e-14,1,-1.47093791637732e-14,-1,3.92877344745694e-15,1,-1.06835005452757e-13,-1,-1.76324379851755e-14,1,-8.52737940201243e-14,-1,-3.91936494178080e-14,1,4.99742551341243e-14,-1,5.29319768711755e-14,1,7.15354665667567e-14,-1,3.13707654385431e-14,1,9.30966779993892e-14,-1,9.80955400591059e-15,1,9.71051710405646e-16,-1,-1.17516574267219e-14,1,2.25322631430381e-14,-1,8.03739688622617e-14,1,4.40934745756706e-14,-1,5.88127574296292e-14,1,6.56546860083031e-14,-1,3.72515459969967e-14,1,-2.64709402806805e-14,-1,1.56903345643642e-14,1,-4.90972884804800e-15,-1,1.07815960853348e-13,1,1.66514825845845e-14,-1,8.62547494207153e-14,1,3.82126940172170e-14,-1,6.46935379880828e-14,1,-5.39129322717666e-14,-1,4.31323265554504e-14,1,-3.23517208391341e-14,-1,1.35257952844434e-13,1,-1.07905094065017e-14,-1,9.90369018541372e-18,1,1.07707020261308e-14,-1,-2.15513077424471e-14,1,-8.13549242628527e-14,-1,-4.31125191750795e-14,1,-5.97937128302203e-14,-1,-6.46737306077120e-14,1,-3.82325013975878e-14,-1,2.74518956812715e-14,1,-1.66712899649553e-14,-1,5.89068424863906e-15,1,-1.08796916253939e-13,-1,-1.56705271839934e-14,1,-8.72357048213064e-14,-1,-3.72317386166259e-14,1,-6.56744933886739e-14,-1,5.48938876723577e-14,1,-4.41132819560414e-14,-1,3.33326762397252e-14,1,-2.25520705234090e-14,-1,1.17714648070927e-14,1,-1.14677696812393e-13,-1,-9.78974662553977e-15,1,-9.31164853797600e-14,-1};
  37. for (int i = 0; i < m_buffer_SIZE; i++)
  38. {
  39. m_samples[i] = new Complex(tmp[i], 0);
  40. }*/
  41. Complex[] Y = fft.fft(m_samples);
  42. double[] Y_abs = new double[m_buffer_SIZE / 2];
  43. String Y_abs_str = "";
  44. String m_samples_str = "";
  45. for(int i = 0; i < (m_buffer_SIZE / 2.0); i++)
  46. {
  47. Y_abs[i] = Y[i].abs();
  48. Y_abs[i] = Y_abs[i] / (m_buffer_SIZE / 2.0); // scaling to real amplitudes of timedomain
  49. Y_abs_str += Y_abs[i] + ","; // For debugging only
  50. m_samples_str += m_samples + ","; // For debugging only
  51. }
  52. m_Notifier.onNewFFTData(Y_abs);
  53. Log.d("DetectorFFT", "m_sampleRate: " + m_sampleRate);
  54. Log.d("DetectorFFT", "Frequency-Data was calculated.");
  55. }
  56. }