当前位置: 代码迷 >> 综合 >> 【数字信号】基于DTMF双音多频电话拨号仿真含Matlab源码
  详细解决方案

【数字信号】基于DTMF双音多频电话拨号仿真含Matlab源码

热度:73   发布时间:2023-12-03 18:16:25.0

1 简介

DTMF信号是音频电话中的拨号信号,本文介绍了基于MATLAB的DTMF信号产生与检测的流程,重点分析了DTMF信号检测中的戈泽尔算法原理及参数选择.?

2 部分代码

t1='123A';t2='456B';t3='789C';t4='*0#D'; % DTMF 信号代表的16 个数tm=[double(t1);double(t2);double(t3);double(t4)];% DTMF 信号代表的16 个ASCII 值i=0;N=205; %DFT 采样点数K=[19,21,23,25,32,35,39,43]; %8 个基频对应的8 个k 值f1=[697,770,852,941]; % 行频率向量f2=[1209,1336,1477,1633]; % 列频率向量Y1=input(' 键入电话号码= ','s'); % 输入一串数字Y2=double(Y1);% 输入字符串变成ASCII 码T=length(Y2); %求输入号码长度Y3=zeros(1,T);%接收端电话号码初值为零for l=1:T; %分别对每位号码数字处理:产生信号,检测d=Y2(l); %计算出第l 位号码数字for p=1:4;for q=1:4;if tm(p,q)==d; break,end % 检测与l 位号码相符的列号qendif tm(p,q)==d; break,end % 检测与l 位号码相符的行号pendn=0:1023;x = sin(2*pi*n*f1(p)/8000) + sin(2*pi*n*f2(q)/8000);% 构成双音频信号pause(0.1) %相邻信号响声之间加0.1 秒停顿% 接收检测端的程序X=fft(x,N) ; % 用FFT 算法计算DFT 样本val = abs(X(K)); % 列出八点DFT 的摸figure(1) subplot(4,3,l);stem(K,val,'.');grid;xlabel('k');ylabel('|X(k)|') % 画出8 点DFT(k) 的幅度axis([0 50 0 120]);limit = 80; %基频检测门限为80for s=5:8;if val(s) > limit, break, end % 查找列号endfor r=1:4;if val(r) > limit, break, end % 查找行号endY3(l)=tm(r,s-4); %将号码表示成一个ASCII 向量endY=char(Y3); %将ASCII 转化成字符串表示的电话号码disp('接收端检测到的号码为: ')disp(Y) % 显示接收到的电话号码

3 仿真结果

4 参考文献

[1]陈布雨. 基于MATLAB的DTMF信号系统仿真[J]. 科技创新导报, 2008(28):2.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

  相关解决方案