我怎么能在DTMF检测吗?我想进入一个语气和获得的数量

55视图(30天)
我想进入一个基调,由它的数字....
8的评论

登录置评。

接受的答案

明星黾
明星黾 2015年12月18日
成功!
排序的。
我不得不杂牌电脑因为有问题好一点时候分离以及良好的频率间隔,但除了产生重复的结果——这工程,并给出了合理的答案。你可能会想尝试它。很可能 健壮的,可能只使用你发送的文件。(我离开了 光谱图 情节,但说出来。取消它如果你想看到它所做的注释)。的 “TL” “TH” 向量似乎毫无意义的背景信号的长度和采样频率,因为只有你的整个信号 3.63 秒的长度。
代码:
dtmf_tones =负载(“Eng安倍dtmf.mat”);
xr = dtmf_tones.R;
fs = dtmf_tones.fs;
x = xr -意味着(xr);%去除直流分量
F (S, T) =光谱图(fs x, 1536、64、512年,“桠溪”);
%调频= repmat (F, 1,长度(T));
% Tm = repmat (T,长度(F), 1);
图(2)%
%冲浪(Fm、Tm、abs (S))
%包含(频率)
% ylabel(“时间”)
%轴([0 2000 ylim zlim])
%网格
Sa = abs (S);
[r、c] =找到(Sa) > = 20);
Fr = F (r);
Tc = T (c) ';
英国《金融时报》= (Tc Fr);
[C ia ic] =独特(英国《金融时报》(:1));%找到独特的时代
k1 = 1:尺寸(C, 1)%通过时间创建单元阵列
FrqTime {k1} =英国《金融时报》(FT (: 1) = = C (k1):);%的时间和频率细胞
如果大小(FrqTime {k1}, 1) > 2
(FrqTime FrqTime {k1} = {k1} (1:);意思是(FrqTime {k1}(2:最终,:)));%如果超过2行,第二行是指最后2行
结束
结束
FrqTime {1:10}
original_f = (697 770 852 941 1209 1336 1477);% DTMF频率
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];%的组合规范关于“original_f”
nbr_map = [“1”“2”“3”“4”的5 ' 6 ' ' 7 ' ' 8 ' 9 ' ' * ' ' 0 ' ' # '];%数字键映射
k1 = 1:尺寸(C, 1)
freq_dist = abs (bsxfun (@minus FrqTime {k1} (:, 2), original_f));%的距离FrqTime频率从original_f的频率
[~,freq_pos (:, k1)] = min (freq_dist [], 2);%的频率位置“FrqTime”“original_f”
num_pad (k1) = nbr_map (ismember (dtmf_dcd, freq_pos (:, k1) ',“行”));%映射到数字键垫
结束
唯一的其他方法是创建为每个DTMF频率带通滤波器,然后程序逻辑解码每个频率对。的 光谱图 方法的优点是简单。

答案(1)

M。马努普拉卡什
M。马努普拉卡什 2020年10月23日
dtmf_tones =负载(“Eng安倍dtmf.mat ');
xr = dtmf_tones.R;
fs = dtmf_tones.fs;
x = xr -意味着(xr);%去除直流分量
F (S, T) =光谱图(x, 1536、64、512、fs“桠溪”);
%调频= repmat (F, 1,长度(T));
% Tm = repmat (T,长度(F), 1);
图(2)%
%冲浪(Fm、Tm、abs (S))
%包含(频率)
% ylabel(“时间”)
%轴([0 2000 ylim zlim])
%网格
Sa = abs (S);
[r、c] =找到(Sa) > = 20);
Fr = F (r);
Tc = T (c) ';
英国《金融时报》= (Tc Fr);
[C ia ic] =独特(英国《金融时报》(:1));%找到独特的时代
k1 = 1:尺寸(C, 1) %创建单元阵列的时间
FrqTime {k1} =英国《金融时报》(FT (: 1) = = C (k1):);%的时间和频率细胞
如果大小(FrqTime {k1}, 1) > 2
(FrqTime FrqTime {k1} = {k1} (1:);意思是(FrqTime {k1}(2:最终,:)));%如果超过2行,第二行是指最后2行
结束
结束
FrqTime {1:10}
original_f = (697 770 852 941 1209 1336 1477);% DTMF频率
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]; % Combination Codes w.r.t. ‘original_f’
nbr_map =(“1”“2”“3”“4”的5 ' 6 ' ' 7 ' ' 8 ' ' 9 ' ' * ' ' 0 ' ' # '];%数字键映射
k1 = 1:尺寸(C, 1)
freq_dist = abs (bsxfun (@minus FrqTime {k1} (:, 2), original_f));%的距离FrqTime频率从original_f的频率
[~,freq_pos (:, k1)] = min (freq_dist [], 2);%的频率位置“FrqTime”“original_f”
num_pad (k1) = nbr_map (ismember (dtmf_dcd, freq_pos (:, k1)”、“行”);%映射到数字键垫
结束

标签

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!