尝试从.wav文件中确定DTMF

时间:2016-12-02 04:10:35

标签: matlab

所以我试图通过读取傅里叶分析图的[x,y]坐标来确定DTMF波形文件中拨打的数字。数字是:251216。这是我的Matlab代码:

% Tone Dialling %
[y,Fs] = audioread('tones.wav');
n = length(y);
p = abs(fft(y));
f = (Fs/n)*(0:n-1);
plot(f,p);
axis([500 1400 0 1000])
xlabel('f(Hz)')
title('Power')

这对应于以下图:

enter image description here

enter image description here

现在这应该有6个峰值,但不是!我哪里错了?剪辑是一个6秒的剪辑,每1秒后播放一次脉冲。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

DTMF信号中的每个音调由两个特定频率组成的音调组成。

        1209 Hz 1336 Hz 1477 Hz 1633 Hz
697 Hz    1       2       3       A
770 Hz    4       5       6       B
852 Hz    7       8       9       C  
941 Hz    *       0       #       D

如果您采用序列555555的DTMF信号,您将只能看到构成fft图中数字5的音调的两个频率。

DTMF Signal 555555

在您的情况下,您的音调由以下频率组成:

  • 1:697 Hz,1209 Hz
  • 2:697 Hz,1336 Hz
  • 5:770 Hz,1336 Hz
  • 6:770 Hz,1477 Hz

4个独特的频率。因此信号中有四个峰值。音调1和2共享频率697 Hz,音调2和5共享频率1336 Hz,音调5和6共享频率770 Hz。

你的情节幅度应该能够让你指出频率在任何音调中的使用频率:

fft-plot of DTMF signal 251216

您以1400 Hz的频率切断了绘图,这是一个错误,因为DTMF音调6的分量为1477 Hz。