Skip to content

Instantly share code, notes, and snippets.

@ethe
Forked from sakamoto-poteko/HPS.m
Created December 3, 2019 09:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ethe/31dd01c1612d5b8a08cb82f5765acbc1 to your computer and use it in GitHub Desktop.
Save ethe/31dd01c1612d5b8a08cb82f5765acbc1 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), 0, 'post');
d3 = padarray(d3, fftrsize-length(d3), 0, 'post');
d4 = padarray(d4, fftrsize-length(d4), 0, 'post');
d5 = padarray(d5, fftrsize-length(d5), 0, '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