dtmf_tones = load('Eng Abeer dtmf.mat');
xr = dtmf_tones.R;
fs = dtmf_tones.fs;
x = xr - mean(xr);
[S,F,T] = spectrogram(x, 1536, 64, 512, fs, 'yaxis');
Sa = abs(S);
[r, c] = find(Sa >= 20);
Fr = F(r);
Tc = T(c)';
FT = [Tc Fr];
[C, ia, ic] = unique(FT(:,1));
for k1 = 1:size(C,1)
FrqTime{k1} = FT(FT(:,1) == C(k1),:);
if size(FrqTime{k1},1) > 2
FrqTime{k1} = [FrqTime{k1}(1,:); mean(FrqTime{k1}(2:end,:))];
end
end
FrqTime{1:10}
original_f = [697 770 852 941 1209 1336 1477];
dtmf_dcd = [1 5; 1 6; 1 7; 2 5; 2 6; 2 7; 3 5; 3 6; 3 7; 4 5; 4 6; 4 7];
nbr_map = ['1' '2' '3' '4' '5' '6' '7' '8' '9' '*' '0' '#'];
for k1 = 1:size(C,1)
freq_dist = abs(bsxfun(@minus, FrqTime{k1}(:,2), original_f));
[~,freq_pos(:,k1)] = min(freq_dist,[],2);
num_pad(k1) = nbr_map(ismember(dtmf_dcd, freq_pos(:,k1)', 'rows'));
end
Best Answer