应用IIR滤波器对双音多频信号进行解码.docx
- 文档编号:29030174
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:16
- 大小:287.23KB
应用IIR滤波器对双音多频信号进行解码.docx
《应用IIR滤波器对双音多频信号进行解码.docx》由会员分享,可在线阅读,更多相关《应用IIR滤波器对双音多频信号进行解码.docx(16页珍藏版)》请在冰豆网上搜索。
应用IIR滤波器对双音多频信号进行解码
应用IIR滤波器对双音多频信号进行解码
实验名称应用IIR滤波器对双音多频信号进行解码
实验目的
综合应用信号频谱分析和IIR数字滤波器设计的知识,实现双音多频信号的解码,加深理解信号时域和频域分析的物理概念。
实验环境
1.微型电子计算机(PC);
2.安装Windows10操作系统,MATLAB7.0等开发工具。
实验原理
双音多频(DTMF)信号的产生及检测在现代通信系统中有着广泛的应用,家用电话、移动电话以及公共程控交换机(PBX)都采用DTMF信号发送和接收电话拨号号码。
DTMF信号由低频组和高频两组频率信号构成,其中高频为列,低频为行。
按键电话上的每个按键都由对应的两个频率组成。
当按下某个键时,所得到的按键信号是由相应两个频率的正弦信号相加而成:
其中
,
,
。
可以用IIR数字滤波器对DTMF信号进行解码。
如图1所示,接收到的音频信号分别通过低通和高通滤波器,由于DTMF信号的行频低于列频,所以低通和高通可以分离出行和列信息。
再通过带通滤波器,对其输出的振幅大小进行判断,可以确定具体的行频和列频。
如图1中所示的滤波器响应,将得到按键“4”。
图1
图2
实验内容和任务要求
用Matlab编程完成以下问题,实验结束后提交设计报告(含纸质稿、电子稿),要求格式规范、内容完整、结论正确。
(1)利用DTMF的产生原理合成数字“4”,合成公式为:
其中
,画出其时域波形和幅度谱曲线。
(2)根据图中的低通和高通滤波器,画出两个滤波器的幅频响应;并利用
函数对信号
进行滤波,并输出信号的幅度谱曲线。
(3)设计图1中第一组的四个带通滤波器,画出滤波器的幅频响应;并利用
函数对图中相应的输入信号进行滤波,在一张图上用不同颜色画出这四条输出曲线。
比较其幅值可知,BP770Hz滤波器的输出最大,因此确定该DTMF的行频为770Hz。
(4)设计图1中第二组的三个带通滤波器,画出滤波器的幅频响应;并利用
函数对图中相应的输入信号进行滤波,在一张图上用不同颜色画出这三条输出曲线。
比较其幅值,BP1209Hz滤波器的输出最大,因此确定该DTMF的列频为1209Hz。
从(3)和(4)可以解出该DTMF信号为按键“4”。
(5)生成0~9其它数字的DTMF信号,按照上述方法进行解码,验证该方法的正确性。
(6)对于图1中的第一组带通滤波器的4个输出,分别用fft函数求其频响,画出幅频响应曲线。
同理在一张图上用不同颜色画出第二组带通滤波器的3个输出的幅频响应曲线。
实验分析
本实验要求利用IIR滤波器对双音多频信号进行解码。
对于问题一,我们可以利用高频和低频合成相应的时域信号以此来模拟DTMF中信号的产生;
对于问题二,我们根据题目要求分别设计一个IIR低通滤波器和高通滤波器,并对问题一中产生的信号进行滤波,以此将信号中的高频和低频区分开来;
对于问题三,我们分别设计四个低频带通滤波器,以此来对问题二中产生的低频信号进行第二次滤波,将滤波后的信号绘制在同一张图上,比较其幅值从而确定其行频;
对于问题四,同问题三类似,设计三个高频带通滤波器对问题二中产生的高频信号进行第二次滤波,从而确定其列频;
对于问题五,我们用同样的方式模拟其他数字的合成以及解码,并检验相应解码结果是否正确;
对于问题六,利用FFT对滤波后的两组信号分别进行频谱分析。
Matlab代码
数字合成函数:
function[x]=Signal(fl,fh)%生成字符信号序列函数
fs=8000;
N=205;n=0:
N-1;
t=n/fs;
x=sin(2*pi*fl*t)+sin(2*pi*fh*t);
滤波器函数:
function[b,a,H,varagout]=Butter_My(wp,ws,Rp,Rs,w,sign)%高/低/带通滤波器的设计函数
[Nm,wc]=buttord(wp,ws,Rp,Rs);%计算满足给定指标所需的最小阶数以及相应的3dB截止频率
if(length(wp)>1)||(wp [b,a]=butter(Nm,wc); else [b,a]=butter(Nm,wc,'high');%高通 end; ifsign==0%根据标志信号判断是否需要计算滤波器的频率响应 H=freqz(b,a,w); else H=0; End 译码函数: function[result,varargout]=Translate(x)%译码函数 %%初始参数设置 fs=8000; N=205;n=0: N-1; t=n/fs; f=(n/N-1/2)*fs;w=f*2*pi/fs; %%IIR低通 wpl=1000*2/fs;wsl=1100*2/fs;Rp=1;Rs=15; [bl,al,Hl]=Butter_My(wpl,wsl,Rp,Rs,w,nargout); %%低带通1 wpl_1=[650*2/fs,750*2/fs];wsl_1=[600*2/fs,800*2/fs]; [bl_1,al_1,Hl_1]=Butter_My(wpl_1,wsl_1,Rp,Rs,w,nargout); %%低带通2 wpl_2=[720*2/fs,820*2/fs];wsl_2=[670*2/fs,870*2/fs]; [bl_2,al_2,Hl_2]=Butter_My(wpl_2,wsl_2,Rp,Rs,w,nargout); %%低带通3 wpl_3=[800*2/fs,900*2/fs];wsl_3=[750*2/fs,950*2/fs]; [bl_3,al_3,Hl_3]=Butter_My(wpl_3,wsl_3,Rp,Rs,w,nargout); %%低带通4 wpl_4=[890*2/fs,990*2/fs];wsl_4=[840*2/fs,1040*2/fs]; [bl_4,al_4,Hl_4]=Butter_My(wpl_4,wsl_4,Rp,Rs,w,nargout); %%低频组滤波 xl=filter(bl,al,x);xl_1=filter(bl_1,al_1,xl);xl_2=filter(bl_2,al_2,xl);xl_3=filter(bl_3,al_3,xl);xl_4=filter(bl_4,al_4,xl); %%IIR高通 wph=1100*2/fs;wsh=1000*2/fs; [bh,ah,Hh]=Butter_My(wph,wsh,Rp,Rs,w,nargout); %%高带通1 wph_1=[1110*2/fs,1310*2/fs];wsh_1=[1060*2/fs,1360*2/fs]; [bh_1,ah_1,Hh_1]=Butter_My(wph_1,wsh_1,Rp,Rs,w,nargout); %%高带通2 wph_2=[1240*2/fs,1440*2/fs];wsh_2=[1190*2/fs,1490*2/fs]; [bh_2,ah_2,Hh_2]=Butter_My(wph_2,wsh_2,Rp,Rs,w,nargout); %%高带通3 wph_3=[1380*2/fs,1580*2/fs];wsh_3=[1330*2/fs,1630*2/fs]; [bh_3,ah_3,Hh_3]=Butter_My(wph_3,wsh_3,Rp,Rs,w,nargout); %%高频组滤波 xh=filter(bh,ah,x);xh_1=filter(bh_1,ah_1,xh);xh_2=filter(bh_2,ah_2,xh);xh_3=filter(bh_3,ah_3,xh); ifnargout==0 %%原始信号频响 X=fftshift(fft(x)); %%低频组滤波后频响 Xl=fftshift(fft(xl));Xl_1=fftshift(fft(xl_1));Xl_2=fftshift(fft(xl_2));Xl_3=fftshift(fft(xl_3));Xl_4=fftshift(fft(xl_4)); %%高频组滤波后频响 Xh=fftshift(fft(xh));Xh_1=fftshift(fft(xh_1));Xh_2=fftshift(fft(xh_2));Xh_3=fftshift(fft(xh_3)); %%绘制图像 figure (1) subplot(2,1,1),plot(t,x);title('原始信号时域波形');xlabel('t/s');ylabel('xt');gridon; subplot(2,1,2),plot(f,abs(X));title('原始信号幅度谱');xlabel('f/Hz');ylabel('幅度');gridon;xlim([0,4000]); figure (2) subplot(3,2,1);plot(f,abs(Hl));title('低通滤波器幅频响应');xlabel('f/Hz');ylabel('幅度');gridon;xlim([0,4000]); subplot(3,2,2);plot(f,abs(Hh));title('高通滤波器幅频响应');xlabel('f/Hz');ylabel('幅度');gridon;xlim([0,4000]); subplot(3,2,3),plot(t,xl);title('低通滤波后信号时域波形');xlabel('t/s');ylabel('xt');gridon; subplot(3,2,4),plot(t,xh);title('高通滤波后信号时域波形');xlabel('t');ylabel('xt');gridon; subplot(3,2,5),plot(f,abs(Xl));title('低通滤波器滤波后信号幅度谱');xlabel('f/Hz');ylabel('幅度');gridon;xlim([0,4000]); subplot(3,2,6),plot(f,abs(Xh));title('高通滤波器滤波后信号幅度谱');xlabel('f/Hz');ylabel('幅度');gridon;xlim([0,4000]); figure(3) subplot(2,2,1);plot(f,abs(Hl_1));title('697Hz低带通滤波器幅频响应');xlabel('f/Hz');ylabel('幅度');axis([400,1000,0,1.2]);gridon; subplot(2,2,2);plot(f,abs(Hl_2));title('770Hz低带通滤波器幅频响应');xlabel('f/Hz');ylabel('幅度');axis([470,1070,0,1.2]);gridon; subplot(2,2,3);plot(f,abs(Hl_3));title('852Hz低带通滤波器幅频响应');xlabel('f/Hz');ylabel('幅度');axis([550,1150,0,1.2]);gridon; subplot(2,2,4);plot(f,abs(Hl_4));title('941Hz低带通滤波器幅频响应');xlabel('f/Hz');ylabel('幅度');axis([640,1240,0,1.2]);gridon; figure(4) subplot(2,2,1);plot(f,abs(Hh_1));title('1209Hz高带通滤波器幅频响应');xlabel('f/Hz');ylabel('幅度');axis([910,1510,0,1.2]);gridon; subplot(2,2,2);plot(f,abs(Hh_2));title('1336Hz高带通滤波器幅频响应');xlabel('f/Hz');ylabel('幅度');axis([1040,1640,0,1.2]);gridon; subplot(2,2,3);plot(f,abs(Hh_3));title('1477Hz高带通滤波器幅频响应');xlabel('f/Hz');ylabel('幅度');axis([1180,1780,0,1.2]);gridon; figure(5) plot(t,xl_1,'b-',t,xl_2,'r-',t,xl_3,'g-',t,xl_4,'y-');legend('697Hz','770Hz','852Hz','941Hz');title('低通译码结果');xlabel('t');ylabel('xt');gridon; figure(6) plot(t,xh_1,'b-',t,xh_2,'r-',t,xh_3,'g-');legend('1209Hz','1336Hz','1477Hz');title('高通译码结果');xlabel('t/s');ylabel('xt');gridon; figure(7) plot(f,abs(Xl_1),'b-',f,abs(Xl_2),'r-',f,abs(Xl_3),'g-',f,abs(Xl_4),'y-');legend('697Hz','770Hz','852Hz','941Hz');title('低通译码结果频谱');xlabel('f/Hz');ylabel('幅度');gridon;xlim([0,4000]); figure(8) plot(f,abs(Xh_1),'b-',f,abs(Xh_2),'r-',f,abs(Xh_3),'g-');legend('1209Hz','1336Hz','1477Hz');title('高通译码结果频谱');xlabel('f/Hz');ylabel('幅度');gridon;xlim([0,4000]); %%译码匹配 else l=[xl_1;xl_2;xl_3;xl_4];h=[xh_1;xh_2;xh_3]; result=Decode(l,h); End 译码匹配函数: functiontranslation=Decode(l,h)%译码匹配函数 %%计算峰值 maxl=max(max(l));maxh=max(max(h));%计算低频组最大值和高频组最大值 maxl_1=max(l(1,: ));maxl_2=max(l(2,: ));maxl_3=max(l(3,: ));maxl_4=max(l(4,: ));%低频组各频率峰值 maxh_1=max(h(1,: ));maxh_2=max(h(2,: ));maxh_3=max(h(3,: ));%高频组各频率峰值 %%译码匹配,返回译码结果 ifmaxl==maxl_1 ifmaxh==maxh_1 translation='1'; end ifmaxh==maxh_2 translation='2'; end ifmaxh==maxh_3 translation='3'; end end ifmaxl==maxl_2 ifmaxh==maxh_1 translation='4'; end ifmaxh==maxh_2 translation='5'; end ifmaxh==maxh_3 translation='6'; end end ifmaxl==maxl_3 ifmaxh==maxh_1 translation='7'; end ifmaxh==maxh_2 translation='8'; end ifmaxh==maxh_3 translation='9'; end end ifmaxl==maxl_4 ifmaxh==maxh_1 translation='*'; end ifmaxh==maxh_2 translation='0'; end ifmaxh==maxh_3 translation='#'; end end 主函数: closeall;clearall;clc; %%模拟数字4的合成并显示译码过程相关图像 x4=Signal(770,1209);%合成数字四 Translate(x4);%译码,无返回值时绘制图像 %%模拟其他字符的合成并译码 fl=[697770852941];fh=[120913361477];%定义低频组和高频组 fori=1: 4 forj=1: 3 x(3*(i-1)+j,: )=Signal(fl(i),fh(j));%模拟合成12种字符信号 end end fori=1: 4 forj=1: 3 result(3*(i-1)+j)=Translate(x(3*(i-1)+j,: ));%翻译接收的12种字符信号,有返回值时只译码不绘图 end end disp('译码结果为: ');disp(result);%显示译码结果 实验结果以及分析: 实验结果分析: 从实验结果来看实验还是非常成功的,从滤波后的两组时域波形来看,可以看出低频组中幅度最大的为770Hz,高频组中幅度最大的为1209Hz。 因此可以确定该数字应为4,解码正确。 同时从命令窗口的显示结果来看,对其他数字合成的解码也都正确。 其实在实际的应用中产生信号的频率并不一定那么准确,它们往往存在一定误差。 但在一定的误差范围内并不会影响解码结果,以下列出了解码的误差允许范围: 低频组: (506|507)697(738|739)770(809|810)852(895|896)941 高频组: 1209(1279|1280)1336(1411|1412)1477(2107|2108) 当其越过临界值时才会产生误码。 实验总结 通过本次实验,加深了我们对信号频谱分析和IIR数字滤波器设计的知识的理解,并对滤波器有了更进一步的认识,掌握了滤波器在双音多频信号解码中的应用方法,理解了设计指标的工程概念,认识到了不同类型滤波器的特性和适用范围。 实验中,我们对Matlab中一些函数的用法还不清楚,后面经过查资料以及尝试后均得到了解决。 总的来说,本次实验基本上达到了预期的实验效果,是一次比较成功的实验。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 应用 IIR 滤波器 双音 信号 进行 解码
![提示](https://static.bdocx.com/images/bang_tan.gif)