matlab电话拨号音的合成与识别代码,实验报告 电话拨号音的合成与识别

大连理工大学实验报告 学院(系): 电信 专业: 电子信息工程 班级: 电子1302 姓名: 曾昱 学号: 201311066 组: 实验时间: 实验室: 实验台: 指导教师签字: 成绩: 电话拨号音的合成与识别 一、实验目的和要求 电话拨号音合成的基本原理及识别的主要方法 利用 MATLAB 软件以及 FFT 算法实现对电话通信系统中拨号音的合成与识别 并进一步利用 MATLAB 中的图形用户界面 GUI 制作简单直观的模拟界面。 三、题目 1)产生拨号界面,显示播出的号码,产生电话拨号音 2)识别拨号音并显示在界面上 三、代码和运行结果 按键识别、产生拨号音: % --- Executes on button press in pushbutton1. function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defi ned in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) n = [1:410]; d0 = sin(2*pi*697*n/8192) + sin(2*pi*1209*n/8192); space = zeros(1, 410); phone = [d0, space]; handles.numsig = [handles.numsig, phone]; num = get(handles.numbershow, String); newnum = strcat(num, 1); set(handles.numbershow, String, newnum); sound(d0,8192) guidata(hObject, handles); 删除键: % --- Executes on button press in pushbuttonf1. function pushbuttonf1_Callback(hObject, eventdata, handles) % hObject handle to pushbuttonf1 (see GCBO) % eventdata reserved - to be defi ned in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) num = get(handles.numbershow,String); %??????????? num = num(1:end-1);%???? handles.numsig = handles.numsig(1:end-820); set(handles.numbershow,String,num);%???? n=[1:410]; d11=sin(0.7217*n)+sin(0.9273*n); sound(d11,8192); %????????? guidata(hObject, handles); 拨出键,拨出号码后通过产生的序列识别拨出的号码: % --- Executes on button press in pushbuttonf2.?? function pushbuttonf2_Callback(hObject, eventdata, handles) % hObject handle to pushbuttonf2 (see GCBO) % eventdata reserved - to be defi ned in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) numtable = [1 2 3;4 5 6;7 8 9;* 0 #]; for i = 1:length(handles.numsig)/820 f = fft(handles.numsig((i-1)*820 +1:i*820), 8192);%???????? a = abs(f); fi nd(a(1:1000)==max(a(1:1000))) frequency(1) = fi nd(a(1:1000)==max(a(1:1000))); frequency(2) = 1000 + fi nd(a(1000:1700)==max(a(1000:1700))); if(frequency(1) < 730) row = 1; elseif(frequency(1) < 810) row = 2; elseif(frequency(1) < 900) row = 3; else row = 4; end if(frequency(2) < 1280) column = 1; elseif(frequency(2) < 1400) column = 2; else column = 3; end identifyNum(i) = numtable(row, column); end 结果: ? 图1-拨号界面 五、实验总结 接收端收到信号后,取出每位电话号码对应的正弦信号,进行fft变换后通过找幅度最大的频率来确 定这一位号码的行和列。从行和列到具体的这一位电话号码的数字,我是这样做的,建立一个号码 表,根据从信号频率得到的行数和列数来查表。 numtable = [1 2 3;4 5 6;7 8 9;* 0 ‘#’]; … ?????????? … identifyNum(i) = numtable(row, column);

展开阅读全文

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值