Advertisement
lukicdarkoo

Lie detector prototype (using voice)

Dec 13th, 2015
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 1.45 KB | None | 0 0
  1. clear;
  2.  
  3. subPlotX = 2;
  4. subPlotY = 1;
  5. recordTime = 1;
  6. L = recordTime * 8000;
  7. frequences = (8000*(0:(L/2))/L)';
  8. tolerance = 5;
  9.  
  10. % Record Yes
  11. input('Say "Yes" but true')
  12. recorderYes = audiorecorder;
  13. recordblocking(recorderYes, recordTime);
  14. audioYes = getaudiodata(recorderYes);
  15.  
  16. % FIR Yes
  17. % Reference: https://en.wikipedia.org/wiki/Voice_frequency
  18. filterYes = fir1(100, [300/8000, 3000/8000]);
  19. audioYes = filter(filterYes, 1, audioYes);
  20.  
  21. % Fourier transform for Yes
  22. Y = fft(audioYes);
  23. L = length(Y);
  24. P2 = abs(Y);
  25. intensityYes = P2(1:L/2+1);
  26. subplot(subPlotX, subPlotY, 1);
  27. plot(frequences, intensityYes);
  28.  
  29.  
  30. % Say answer
  31. input('Say Yes or No')
  32. recorderAnswer = audiorecorder;
  33. recordblocking(recorderAnswer, recordTime);
  34. audioAnswer = getaudiodata(recorderAnswer);
  35.  
  36. % FIR answer
  37. filterAnswer = fir1(100, [300/8000, 3000/8000]);
  38. audioAnswer = filter(filterAnswer, 1, audioAnswer);
  39.  
  40. % Fourier transform for Answer
  41. Y = fft(audioAnswer);
  42. L = length(Y);
  43. P2 = abs(Y);
  44. intensityAnswer = P2(1:L/2+1);
  45. subplot(subPlotX, subPlotY, 2);
  46. plot(frequences, intensityAnswer);
  47.  
  48. % Reference: http://luscinia.sourceforge.net/page26/page35/page35.html
  49. meanFrequencyYes = sum(frequences .* intensityYes) / sum(intensityYes);
  50. meanFrequencyAnswer = sum(frequences .* intensityAnswer) / sum(intensityAnswer);
  51.  
  52.  
  53. result = meanFrequencyAnswer - meanFrequencyYes
  54. if (meanFrequencyAnswer > meanFrequencyYes + tolerance)
  55.     disp('Lie')
  56. else
  57.     disp('True');
  58. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement