⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dtmf.m

📁 单音多频信号的产生和识别
💻 M
字号:
function  H = dtmf()
% 函数完成6位号码的双音多频信号的检测
%   1      2      3      A   697Hz
%   4      5      6      B   770Hz
%   7      8      9      C   852Hz
%   *      0      #      D   941Hz
% 1209Hz 1336Hz 1477Hz 1633Hz 

%频率分辨力要求 F0<=10Hz
%音频信号       fs = 8000Hz
%抽样时间间隔   T = 1/fs = 1/8000 = 0.125ms
%最小记录长度   T0 = 1/F0 >= 0.1s
%所允许处理的信号最高频率 fh < 0.5*fs = 1/T = 1/0.1*1000 =4000Hz
%在一个记录中的最少点数   N =T0/T >= 0.1/0.125*1000 =800
%N取2的整数幂            N = 1024

tm=[1,2,3,65;4,5,6,66;7,8,9,67;42,0,35,68]; %按键号码表
N=205;
fs=8000;
K=[18,20,22,24,31,34,38,42];
f1=[697,770,852,941];
f2=[1209,1336,1477,1633];
TN=input('输入六位电话号码=');
TNr=0;
for m=1:6;
    d=fix(TN/10^(6-m));
    TN=TN-d*10^(6-m);
    for p=1:4;
        for q=1:4;
            if tm(p,q)==abs(d);break,end
        end
            if tm(p,q)==abs(d);break,end
    end
    n=0:1023;
    x=sin(2*pi*n*f1(p)/fs)+sin(2*pi*n*f2(q)/fs);
    figure(1),subplot(3,2,m),plot(n,x);
    sound(x,fs);
    pause(0.1);
    %接收检测端的程序
     X=goertzel(x(1:N),K+1);
     val=abs(X);
     figure(2),subplot(3,2,m);stem(K,val,'.');grid;xlabel('k');ylabel('|X(k)|');
     
     limit=80;
     for s=5:8;
          if val(s)>limit,break,end
     end
     for r=1:4;
          if val(r)>limit,break,end
     end
        TNr=TNr+tm(r,s-4)*10^(6-m);
 end
 disp('接收检测到的号码为:')
 disp(TNr)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -