Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- clear;
- subPlotX = 2;
- subPlotY = 1;
- recordTime = 1;
- L = recordTime * 8000;
- frequences = (8000*(0:(L/2))/L)';
- tolerance = 5;
- % Record Yes
- input('Say "Yes" but true')
- recorderYes = audiorecorder;
- recordblocking(recorderYes, recordTime);
- audioYes = getaudiodata(recorderYes);
- % FIR Yes
- % Reference: https://en.wikipedia.org/wiki/Voice_frequency
- filterYes = fir1(100, [300/8000, 3000/8000]);
- audioYes = filter(filterYes, 1, audioYes);
- % Fourier transform for Yes
- Y = fft(audioYes);
- L = length(Y);
- P2 = abs(Y);
- intensityYes = P2(1:L/2+1);
- subplot(subPlotX, subPlotY, 1);
- plot(frequences, intensityYes);
- % Say answer
- input('Say Yes or No')
- recorderAnswer = audiorecorder;
- recordblocking(recorderAnswer, recordTime);
- audioAnswer = getaudiodata(recorderAnswer);
- % FIR answer
- filterAnswer = fir1(100, [300/8000, 3000/8000]);
- audioAnswer = filter(filterAnswer, 1, audioAnswer);
- % Fourier transform for Answer
- Y = fft(audioAnswer);
- L = length(Y);
- P2 = abs(Y);
- intensityAnswer = P2(1:L/2+1);
- subplot(subPlotX, subPlotY, 2);
- plot(frequences, intensityAnswer);
- % Reference: http://luscinia.sourceforge.net/page26/page35/page35.html
- meanFrequencyYes = sum(frequences .* intensityYes) / sum(intensityYes);
- meanFrequencyAnswer = sum(frequences .* intensityAnswer) / sum(intensityAnswer);
- result = meanFrequencyAnswer - meanFrequencyYes
- if (meanFrequencyAnswer > meanFrequencyYes + tolerance)
- disp('Lie')
- else
- disp('True');
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement