please explain this code
3 views (last 30 days)
Show older comments
gen_det.m [file_name file_path] = uigetfile ({'*.wav'}); if file_path ~= 0 filename = [file_path,file_name]; end [y, fs]=audioread(filename); wavplay(y,16000); cla; %axes(handles.axes1); time = length(y)/fs; if time == 0 %the first, second and third lines of the message box msgboxText{1} = 'You have tried to estimate gender without recording signal'; msgboxText{2} = 'Try recording a signal using record button'; %this command actually creates the message box msgbox(msgboxText,'Signal recording not done', 'warn'); else ms20 = fs/50; t = (0:length(y)-1)/fs; gen_det_sph(time,ms20,fs,y) figure; plot(t,y); title('Waveform'); xlabel('Time (s)'); ylabel('Amplitude'); wavplay.m function wavplay(signal, sampleRate) % WAVPLAY Plays an audio signal using the audioplayer object. % WAVPLAY(x, Fs) plays the audio signal x at the specified sample rate Fs. % Instantiate object to play audio data. player = audioplayer(signal, sampleRate);
% Play signal from beginning to end (no overlap with other code
possible).
playblocking(player);
end
gen_det_sph.m
function gen_det_sph(time,ms20,fs,x)
cla;
if time == 0
%the first, second and third lines of the message box
msgboxText{1} = 'You have tried to estimate gender without recording
signal';
msgboxText{2} = 'Try recording a signal using record button';
%this command actually creates the message box
msgbox(msgboxText,'Signal recording not done', 'warn');
else
%calculate autocorrelation
r = xcorr(x, ms20, 'coeff');
%plot autocorrelation
d = (-ms20:ms20)/fs;
plot(d, r);
title('Autocorrelation');
xlabel('Delay (s)');
ylabel('Correlation coeff.');
ms2 = fs/500; %maximum speech Fx at 500Hz
ms20 = fs/50; %maximum speech Fx at 50Hz
%just look at region corresponding to positive delays
r = r(ms20 + 1 : 2*ms20+1);
[rmax, tx] = max(r(ms2:ms20));
Fx = fs/(ms2+tx-1);
end
if Fx <= 175 && Fx >=80
msgboxText{1} = ('Male');
msgboxText{2} = num2str(round(Fx));
msgbox(msgboxText,'Signal detection done', 'warn');
elseif Fx>175 && Fx<=255
msgboxText{1} = ('Female');
msgboxText{2} = num2str(round(Fx));
msgbox(msgboxText,'Signal detection done', 'warn');
else
msgboxText{1} = ('Sorry not recogansed');
msgboxText{2} = num2str(round(Fx));
msgbox(msgboxText,'Signal recording not done', 'warn');
end
end
0 Comments
Answers (1)
Hari
on 18 Feb 2025
Edited: Walter Roberson
on 19 Feb 2025
Hi Vineeth,
The code involves functions and scripts to read, play, and analyze a .wav audio file to determine the gender based on the fundamental frequency (Fx).
I assume that the audio file you are working with contains a clear speech signal for accurate gender detection.
Here is the explanation for the important sections of the code:
File Selection and Audio Reading:
The code uses uigetfile to prompt the user to select a .wav file. If a file is selected, audioread reads the audio data and sample rate.
[file_name, file_path] = uigetfile({'*.wav'});
[y, fs] = audioread(filename);
Playing the Audio:
The wavplay function is defined to play the audio using the "audioplayer" object. It plays the signal at the specified sample rate.
player = audioplayer(signal, sampleRate);
playblocking(player);
Gender Detection Logic:
The gen_det_sph function calculates the autocorrelation of the audio signal and uses it to estimate the fundamental frequency (Fx). Based on Fx, it categorizes the signal as male or female.
r = xcorr(x, ms20, 'coeff');
[rmax, tx] = max(r(ms2:ms20));
Fx = fs/(ms2+tx-1);
Result Display:
The code uses msgbox to display the detected gender or any issues (e.g., no signal recorded). The frequency is rounded and shown in the message box.
if Fx <= 175 && Fx >= 80
msgboxText{1} = 'Male';
elseif Fx > 175 && Fx <= 255
msgboxText{1} = 'Female';
else
msgboxText{1} = 'Sorry not recognized';
Plotting:
The waveform of the audio signal and its autocorrelation are plotted using plot, providing a visual representation of the signal and its analysis.
plot(t, y);
plot(d, r);
Refer to the documentation of "audioplayer": https://www.mathworks.com/help/matlab/ref/audioplayer.html
Refer to the documentation of "xcorr": https://www.mathworks.com/help/signal/ref/xcorr.html
Hope this helps!
0 Comments
See Also
Categories
Find more on Audio I/O and Waveform Generation in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!