Skip to content

Instantly share code, notes, and snippets.

@sakamoto-poteko
Last active December 4, 2019 04:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save sakamoto-poteko/236a9986cc80efc6fd5fb5fbf4976a79 to your computer and use it in GitHub Desktop.
Save sakamoto-poteko/236a9986cc80efc6fd5fb5fbf4976a79 to your computer and use it in GitHub Desktop.
HPS algorithm for tone detection
function [ freq ] = HPS(audiofile)
CORRECTFACTOR=1;
[sample, fs] = audioread(audiofile);
fftn = fs;
sample = sample .* hann(length(sample));
fftr = abs(fft(sample,fftn));
fftr = fftr(1:fftn/2);
d2 = downsample(fftr, 2);
d3 = downsample(fftr, 3);
d4 = downsample(fftr, 4);
d5 = downsample(fftr, 5);
fftrsize = fftn/2;
d2 = padarray(d2, fftrsize-length(d2), 1, 'post');
d3 = padarray(d3, fftrsize-length(d3), 1, 'post');
d4 = padarray(d4, fftrsize-length(d4), 1, 'post');
d5 = padarray(d5, fftrsize-length(d5), 1, 'post');
result = fftr .* d2 .* d3 .* d4 .* d5;
plot(result);
[~, I] = max(result);
freq = I * (fs / fftn) * CORRECTFACTOR;
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment