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

📄 dtmf.m

📁 Matlab源程序
💻 M
字号:

d=input('键入一位电话号码= ','s');   %输入一个号码符号
symbol=abs(d);                        %求它的ASCII码   
tm=[49,50,51,65;52,53,54,66;55,56,57,67;42,48,35,68];  %16个ASCII码
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
    f1=[697,770,852,941];                        %行频率向量
    f2=[1209,1336,1477,1633];                    %列频率向量
    n=0:2040;
    x1=sin(2*pi*n*f1(p)/8000)+sin(2*pi*n*f2(q)/8000);   %构成双频信号
    subplot(4,1,1),plot(x1),title('yuanshi');
    y = awgn(x1,4) ;                                     %加高斯噪声
    subplot(4,1,2),plot(y),title('jiazao');
    sound(x1)
    disp('双频信号已经生成并发出')
%
    N=205;                                         %样本长度
    k=[18 20 22 24 31 34 38 42];             %DFT样本序号
    Y=goertzel(y(1:N),k+1);                         %计算八点DFT
    val=abs(Y);                                       
    subplot(4,1,3)                                  %列出八点DFT向量
      %绘图
    stem(k,val,'r.');
    grid on;
    xlabel('k');ylabel('∣Y(k)∣');
    set(gcf,'color','w');
    shg,disp('图上显示的是检测到的八个近似基频的DFT幅度');
%
     x2=sin(2*pi*n*2*f1(p)/8000)+sin(2*pi*n*2*f2(q)/8000);
     y1 = awgn(x2,4) ;
    N=201;
  k1=[35 39 43 47 61 67 74 82];
    Y1=goertzel(y1(1:N),k1+1);
    val=abs(Y1);
    subplot(4,1,4)
      stem(k1,val,'o');
    grid on;
    xlabel('k1');ylabel('∣Y1(k1)∣');
    set(gcf,'color','w');
    
    shg,disp('图上显示的是检测到的二次八个近似基频的DFT幅度');
 
    limit=80;          %规定检测门限
    for s=5:8;
        if val(s)>limit,break,end  %查找列号
    end
    for r=1:4
        if val(r)>limit,break,end   %查找行号
    end
    disp(['接收端检测到的号码为',setstr(tm(r,s-4))])  %显示接收到的字符

⌨️ 快捷键说明

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