双音多频的通信(数字信号处理实验3)

(1)从数字信号处理的角度分析双音多频通信,查阅资料了解双音多频通信的原理及工作过程,总结在实验报告中。
(2)了解DTMF接收信号时,离散傅立叶变化的过程。
(3)在程序中改变门限值r,对比不同门限值的结果。
(4)改变程序中最佳频序K的取值,对比不同k频序产生的结果有何不同,并总结出最佳k频序的规律。

文章目录

  • 一.题目
  • 二.实验目的
  • 三.实验仪器
  • 四.实验原理
      • 1.双音多频DTMF原理
      • 2.双音多频信号的产生
      • 3.双音多频信号的检测
  • 五.实验步骤
      • 1.实验步骤流程图
  • 六.实验代码与实验现象
    • 1.完整代码
    • 2.代码解析
      • (1)键盘号码发射机
      • (2)测试二:输入八位数字进行测试。;启动程序输入当前的8位数字得到结果
      • (3)测试三:在测试一的代码基础上修改门限值,观察运行结果。
      • (4)测试四:改变程序中频序K的取值
  • 七.实验结论及分析
    • 1.测试一:输入6位电话号码,观察运行结果
    • 2.测试二:输入8位电话号码,观察运行结果
    • 3.测试三:修改门限值
    • 4.测试四:修改K序列
    • 结果分析
  • 八.Matlab实验源文件

一.题目

(1)从数字信号处理的角度分析双音多频通信,查阅资料了解双音多频通信的原理及工作过程,总结在实验报告中。
(2)了解DTMF接收信号时,离散傅立叶变化的过程。
(3)在程序中改变门限值r,对比不同门限值的结果。
(4)改变程序中最佳频序K的取值,对比不同k频序产生的结果有何不同,并总结出最佳k频序的规律。

二.实验目的

(1)从数字信号处理的角度分析双音多频通信,查阅资料了解双音多频通信的原理及工作过程,总结在实验报告中。
(2)了解DTMF接收信号时,离散傅立叶变化的过程。
(3)在程序中改变门限值r,对比不同门限值的结果。
(4)改变程序中最佳频序K的取值,对比不同k频序产生的结果有何不同,并总结出最佳k频序的规律。

三.实验仪器

计算机,MATLAB软件

四.实验原理

1.双音多频DTMF原理

  • 双音多频,由高频群和低频群组成,高低频群各包含4个频率。一个高频信号和一个低频信号叠加组成一个组合信号,代表一个数字。DTMF信令有16个编码。利用DTMF信令可选择呼叫相应的对讲机
  • 双音多频信号(DTMF),电话系统中电话机与交换机之间的一种用户信令,通常用于发送被叫号码。在使用双音多频信号之前,电话系统中使用一连串的断续脉冲来传送被叫号码,称为脉冲拨号。脉冲拨号需要电信局中的操作员手工完成长途接续。
  • 双音多频的拨号键盘是4×4的矩阵,每一行代表一个低频,每一列代表一个高频。每按一个键就发送一个高频和低频的正弦信号组合,比如’1’相当于697和1209赫兹(Hz)。交换机可以解码这些频率组合并确定所对应的按键。
    在这里插入图片描述
    DTMF编解码器在编码时将击键或数字信息转换成双音信号并发送,解码时在收到的DTMF信号中检测击键或数字信息的存在性。一个DTMF信号由两个频率 的音频信号叠加构成。这两个音频信号的频率来自两组预分配的频率组:行频组或列频组。每一对这样的音频信号唯一表示一个数字或符号。电话机中通常有16个 按键,其中有10个数字键0~9和6个功能键*、#、A、B、C、D。由于按照组合原理,一般应有8种不同的单音频信号。因此可采用的频率也有8种,故称 之为多频,又因它采用从8种频率中任意抽出2种进行组合来进行编码,所以又称之为“8中取2”的编码技术。根据CCITT的建议,国际上采用的多种频率为 687Hz、770Hz、852Hz、941Hz、1209Hz、1336Hz、1477Hz和1633Hz等8种。用这8种频率可形成16种不同的组 合,从而代表16种不同的数字或功能键,每个按键唯一地由一组行频和列频组成,如下图所示:
    在这里插入图片描述
    DTMF信号在电话中有两种作用,一个是用拨号信号去控制交换机接通被叫的用户电话机,另一个作用是控制电话机的各种动作,如播放留言、语音信箱等。

2.双音多频信号的产生

假设时间连续的DTMF信号用x(t)= sin(2pif1t)+sin(2pif2t)表示,
f1代表低频带中的一个频率,f2代表高频带中的一个频率。用8KHz对DTMF信号进行采样,采样后得到的时域离散信号为
在这里插入图片描述
形成上面序列的方法有两种,即计算法和查表法。用计算法求正弦波的序列值容易,但实际中要占用一些计算时间,影响运行速度。查表法是预先将正弦波的各序列值计算出来,寄存在存储器中,运行时只要按顺序和一定的速度取出便可。这种方法要占用一定的存储空间,但是速度快。
(在此次实验中,采用的是查表法)

3.双音多频信号的检测

在接收端,要对收到的双音多频信号进行检测,检测两个正弦波的频率是多少,以判断所对应的十进制数字或者符号。显然这里仍然要用数字方法进行检测,因此要将收到的时间连续DTMF信号经过A/D变换,变成数字信号进行检测。检测的方法有两种,一种是用一组滤波器提取所关心的频率,根据有输出信号的2个滤波器判断相应的数字或符号。另一种是用DFT(FFT)对双音多频信号进行频谱分析,由信号的幅度谱,判断信号的两个频率,最后确定相应的数字或符号。当检测的音频数目较少时,用滤波器组实现更合适。FFT是DFT的快速算法,但当DFT的变换区间较小时,FFT快速算法的效果并不明显,而且还要占用很多内存,因此不如直接用DFT合适。下面介绍Goertzel算法,这种算法的实质是直接计算DFT的一种线性滤波方法。可以直接调用MATLAB信号处理工具箱中戈泽尔算法的函数Goertzel,计算N点

五.实验步骤

1.实验步骤流程图

在这里插入图片描述

六.实验代码与实验现象

1.完整代码

键盘号码发射机:

%DTMF双音多频信号

%【DTMF双频拨号信号的生成和检测程序】
tm = [1,2,3,65;4,5,6,66;7,8,9,67;42,0,35,68];%DTMF信号代表的16个数
%N=205;K=[35,20,22,24,31,34,38,42];%8个基频对应的8个k值
N=205;K=[18,21,22,24,31,34,38,42];%8个基频对应的8个k值
N=205;K=[35,39,43,47,61,67,74,82];%8个基频对应的8个k值

f1 = [697,770,852,941];   %行频率向量
f2 = [1209,1336,1477,1633]; %列频率向量
TN=input('键入6位电话号码=');  %输入6位数字
TNr=0;                        %接收端电话号码初值为0
i = 1
for m =1:6;                   %分别对每位号码数字处理:产生信号,发声,检测
    d= fix(TN/10^(6-m));      %计算出第m位号码数字
    TN=TN-d*10^(6-m);
    for p =1:4;
        for q = 1:4;
            if tm(p,q)==abs(d);break,end  %检测与第m位号码相符合的列号q
        end
            if tm(p,q)==abs(d);break,end   %检测与第m位号码相符合的行号q
    end
    n = 0:1023;  %为了发声,加长序列
    x = sin(2*pi*n*f1(p)/8000)+sin(2*pi*n*f2(q)/8000); %构成双频信号
    sound(x,8000);         %发出声音
    pause(0.1)             %相邻号码响声之间加0.1秒停顿
    %接收检测端的程序
    X = goertzel(x(1:N),K+1);  %用Goertzel算法计算八点DFT样本
    val = abs(X);    %列出八点DFT的模
    subplot(3,2,i);stem(K,val,'.');grid;xlabel('k(当采样点N=205时)');ylabel('|X(k)|')%画出8点DFT幅度
    i = i+1
    axis([10 50 0 120])
    %limit = 800;       %门限加大
    limit = 80;       %基频检测门限
    %limit = 5;       %门限减小
    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); %将6位电话号码表示成一个6位数
end
disp('接收端检测到的号码为:')
disp(TNr)   %显示接收到的6位电话号码

输入八位数字进行测试。;启动程序输入当前的8位数字得到结果:

%8位DTMF双音多频信号

%【DTMF双频拨号信号的生成和检测程序】
tm = [1,2,3,65;4,5,6,66;7,8,9,67;42,0,35,68];%DTMF信号代表的16个数
N=205;K=[18,20,22,24,31,34,38,42];%8个基频对应的8个k值
f1 = [697,770,852,941];   %行频率向量
f2 = [1209,1336,1477,1633]; %列频率向量
TN=input('键入8位电话号码=');  %输入6位数字
TNr=0;                        %接收端电话号码初值为0
i = 1
for m =1:8;                   %分别对每位号码数字处理:产生信号,发声,检测
    d= fix(TN/10^(8-m));      %计算出第m位号码数字
    TN=TN-d*10^(8-m);
    for p =1:4;
        for q = 1:4;
            if tm(p,q)==abs(d);break,end  %检测与第m位号码相符合的列号q
        end
            if tm(p,q)==abs(d);break,end   %检测与第m位号码相符合的行号q
    end
    n = 0:1023;  %为了发声,加长序列
    x = sin(2*pi*n*f1(p)/8000)+sin(2*pi*n*f2(q)/8000); %构成双频信号
    sound(x,8000);         %发出声音
    pause(0.1)             %相邻号码响声之间加0.1秒停顿
    %接收检测端的程序
    X = goertzel(x(1:N),K+1);  %用Goertzel算法计算八点DFT样本
    val = abs(X);    %列出八点DFT的模
    subplot(4,2,i);stem(K,val,'.');grid;xlabel('k(当采样点N=205时)');ylabel('|X(k)|')%画出8点DFT幅度
    i = i+1
    axis([10 50 0 120])
    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); %将6位电话号码表示成一个6位数
end
disp('接收端检测到的号码为:')
disp(TNr)   %显示接收到的6位电话号码

在测试一的代码基础上修改门限值与K的取值,观察运行结果。:

%6位DTMF双音多频信号

%【DTMF双频拨号信号的生成和检测程序】
tm = [1,2,3,65;4,5,6,66;7,8,9,67;42,0,35,68];%DTMF信号代表的16个数
N=205;K=[18,20,22,24,31,34,38,42];%8个基频对应的8个k值
%N=205;K=[20,20,22,24,31,34,38,42];%8个基频对应的8个k值
f1 = [697,770,852,941];   %行频率向量
f2 = [1209,1336,1477,1633]; %列频率向量
TN=input('键入6位电话号码=');  %输入6位数字
TNr=0;                        %接收端电话号码初值为0
i = 1
for m =1:6;                   %分别对每位号码数字处理:产生信号,发声,检测
    d= fix(TN/10^(6-m));      %计算出第m位号码数字
    TN=TN-d*10^(6-m);
    for p =1:4;
        for q = 1:4;
            if tm(p,q)==abs(d);break,end  %检测与第m位号码相符合的列号q
        end
            if tm(p,q)==abs(d);break,end   %检测与第m位号码相符合的行号q
    end
    n = 0:1023;  %为了发声,加长序列
    x = sin(2*pi*n*f1(p)/8000)+sin(2*pi*n*f2(q)/8000); %构成双频信号
    sound(x,8000);         %发出声音
    pause(0.1)             %相邻号码响声之间加0.1秒停顿
    %接收检测端的程序
    X = goertzel(x(1:N),K+1);  %用Goertzel算法计算八点DFT样本
    val = abs(X);    %列出八点DFT的模
    subplot(3,2,i);stem(K,val,'.');grid;xlabel('k(当采样点N=205时)');ylabel('|X(k)|')%画出8点DFT幅度
    i = i+1
    axis([10 50 0 120])
    %limit = 1000;       %门限加大
    limit = 80;       %基频检测门限
    %limit = 0;       %门限减小
    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); %将6位电话号码表示成一个6位数
end
disp('接收端检测到的号码为:')
disp(TNr)   %显示接收到的6位电话号码

2.代码解析

(1)键盘号码发射机

①设定双音多频相关参数(矩阵列及高低频率,信号的样本序号和采样频率);
这里K值的设定会确定不同的频率,包括低频和高频
在这里插入图片描述

②输入按键号码;并提取长度(这里号码长度设为6)。
在这里插入图片描述

③用循环语句依次确定每个号码在键盘中的行、列序号。
代码部分展示:

在这里插入图片描述

(2)测试二:输入八位数字进行测试。;启动程序输入当前的8位数字得到结果

这里将输入6位号码实验中的代码for循环部分改为循环8次即可,使检测的数值增多。代码修改部分如下:
在这里插入图片描述

(3)测试三:在测试一的代码基础上修改门限值,观察运行结果。

如图,修改代码以下部分:
在这里插入图片描述

(4)测试四:改变程序中频序K的取值

在这里插入图片描述

七.实验结论及分析

1.测试一:输入6位电话号码,观察运行结果

启动程序,matlab弹出下面的输入号码界面:
在这里插入图片描述
输入检测的号码:246895,得到运行结果的每一个数字的DFT频谱如下:
在这里插入图片描述

2.测试二:输入8位电话号码,观察运行结果

启动程序,待matlab弹出以下输入号码界面时候,输入8位号码。
在这里插入图片描述
输入检测的号码:26784135,得到运行结果的每一个数字的DFT频谱如下:
在这里插入图片描述

3.测试三:修改门限值

启动程序,待matlab弹出以下输入号码界面时候,输入8位号码。在测试一的条件下,多次修改门限值进行测试(初始门限值为80)。
当门限值变化较小时,号码检测结果与DFT频谱没有变化。
当门限值减小到一定值时,其检测结果和频谱发生变化,且门限值越小,其检测到的号码值也越小,当门限值为0时,检测到的号码为111111.
当门限值增大到一定值时,其检测结果和频谱发生变化,且门限值越大,其检测到的号码值也越大,接收端检测到的号码最大为7555548,继续增加门限值,接收端检测到的号码也未发生改变。

4.测试四:修改K序列

在测试一的基础上修改K序列,全部改小:
在这里插入图片描述
在这里插入图片描述
修改K频序改为二次谐波对应的K值
在这里插入图片描述
在这里插入图片描述

结果分析

测试一:输入6位电话号码,观察运行结果
通过对比可以得知第一个数字输出的频谱图得到的k值参考实验原理中的对应表尾18和34对应的频率为697Hz与1136Hz所以可以得到检测输出的数值为2,同理第二个数字输出的频谱图得到的k值参考实验原理中的频率图对应表尾20和31对应的频率为770Hz与1209Hz,得出检测输出的数值为2,其他数字检测同理,最终可以看出运行结果正确并且能够检测到相应的输入电话号码。

测试二:输入8位电话号码,观察运行结果
通过对比可以得知第一个数字输出的频谱图得到的k 值参考上文的对应表为18和34对应频率为697Hz 与 1136Hz所以可以得到检测输出的数值为2,同理第二个数字输出的频谱图得到的k值参考上文的对应表为20 和38对应频率为770Hz 与 1477Hz所以可以得到检测输出的数值为6,其他数字检测同理。可以看出运行结果正确能够检测到相应的输入的电话号码。观察可以发现该段输出与第一次的输出不同之处在于它能够检测8位的号码数字,其实检测原理一致的。

测试三:修改门限值
在测试一的条件下,多次修改门限值进行测试(初始门限值为80)。
当门限值变化较小时,号码检测结果与DTF频谱没有变化。
当门限值减小到一定值时,其检测结果和频谱发生变化,且门限值越小,其检测到的号码值也越小,当门限值为0时,检测到的号码为111111.
当门限值增大到一定值时,其检测结果和频谱发生变化,且门限值越大,其检测到的号码值也越大,接收端检测到的号码最大为7555548,继续增加门限值,接收端检测到的号码也未发生改变。

测试四:修改K序列
在多次修改中发现,修改K序列中任意一位的数值,其检测结果与DTF频谱都会发生较大的改变,最佳序列为8个基频对应的K值取整数时最佳。

八.Matlab实验源文件

双音多频的通信实验源文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/199285.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

人工智能 -- 技术概览

1、我们身处人工智能的时代 人们从早期做web开发,到移动端的开发;之后随着数据量的增大,人们开始研究高并发的问题;当数据量不断的增大,而人们希望数据不被浪费时,产生了大数据的技术,包括&…

真空工艺腔内潮湿有什么危害?

在半导体制程中,真空工艺腔被广泛使用。薄膜沉积,干法刻蚀,光刻,退火,离子注入等工序均需要在相应的真空腔室中完成相应制程。真空工艺腔在半导体制程中起着至关重要的作用,它能够提供一个高度控制的环境&a…

河北中洺科技-数据标注是怎样工作的?

由于人工智能系统的普及,各种智能场景在生活中变得普遍。然而,在这些极大方便我们生活的智能背后,数据标注似乎从未被人们所重视。数据标注是怎样的工作?为什么被称为人工智能训练师? 要想了解这些问题,我…

npm-工具包

npm-工具包 npm 介绍 npm&#xff08;Node Package Manager&#xff09;是用于管理和共享Node.js包&#xff08;包括代码、工具和资源&#xff09;的包管理工具 常用命令 局部安装包 npm install <package-name>: 安装指定的包 npm install <package-name> --save…

将二维数组ndarray转置ndarray.T

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 将二维数组ndarray转置 ndarray.T 选择题 执行以下代码transposed_arr的输出结果为&#xff1f; import numpy as np arr np.array([[1, 2, 3], [4, 5, 6]]) transposed_arr arr.T print(&q…

json处理由fastjson换jackjson

fastjson没有jackjson稳定&#xff0c;所以换成jackjson来处理对象转json和json转对象问题。 首先下载jackjson包&#xff0c;三个都要引用 然后修改实现类 package JRT.Core.Util;import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.ja…

3种在ArcGIS Pro中制作山体阴影的方法

山体阴影可以更直观的展现地貌特点&#xff0c;表达真实的地形&#xff0c;这里为大家介绍一下在ArcGIS Pro中制作山体阴影的方法&#xff0c;希望能对你有所帮助。 数据来源 本教程所使用的数据是从水经微图中下载的DEM数据&#xff0c;除了DEM数据&#xff0c;常见的GIS数据…

【攻防世界-misc】hit-the-core

1.将文件打开后发现文件内容为这样子的&#xff0c; 2.看文件内容里面有一串字符&#xff0c;发现除第一个大写字母不是隔四个小写以外&#xff0c;剩下的每隔四个小写字母就可以看到一个大写字母&#xff0c;刚好是ALEXCTF&#xff0c;按这个规律找下去&#xff0c;应该就可以…

Kubernetes入门篇

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容Kubernetes是什么&#xff1f;为什么需要 Kubernetes&#xff0c;它能做什么&#xff1f;Kubernetes 版本进化Kubernetes 概念Kubernetes 中 3 个重要概念 &#x1f4e2;文章总结&#x1f4e5;博主目标 &#x1f50a;博主介…

在线陪诊系统: 医疗科技的崭新前沿

在医学科技的快速发展中&#xff0c;在线陪诊系统正成为医疗服务领域的创新力量。通过结合互联网和先进的远程技术&#xff0c;这一系统为患者和医生提供了更为便捷、高效的医疗体验。本文将深入探讨在线陪诊系统的技术背后的核心代码和实现原理。 技术背后的关键代码 在线陪…

精力管理金字塔

精力管理金字塔 由协和医学院的张遇升博士在《掌控精力&#xff1a;不疲惫的身心管理术》一书中提出&#xff0c;分层次对精力管理提出了解析和有效的建议。 模型介绍 精力管理是一个可以学会的技能&#xff0c;学会了科学的精力管理方法&#xff0c;就能使自己的精力越来越好…

webpack项目工程初始化

一、初始化项目 默认系统已经安装node //初始化 pnpm init//安装webpack pnpm i -D webpack webpack-cli 新建一个index.html的入口文件 新建一个src文件存放js代码&#xff0c;src里面新建一个index.js package.josn配置打包命令 {"name": "webpack-cs&q…

【算法】算法题-20231129

这里写目录标题 一、15. 三数之和二、205. 同构字符串三、383. 赎金信 一、15. 三数之和 提示 中等 6.5K 相关企业 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] …

计算机服务器中了faust勒索病毒怎么办,faust勒索病毒解密文件恢复

计算机技术的不断发展&#xff0c;为企业的生产生活运营提供了坚实基础&#xff0c;但网络是一把双刃剑&#xff0c;网络安全威胁也在不断增加&#xff0c;近期&#xff0c;云天数据恢复中心陆续接到很多企业的求助&#xff0c;企业的计算机服务器遭到了faust勒索病毒攻击&…

贝叶斯Sklearn实践

贝叶斯统计学是一种基于贝叶斯定理的概率推理方法&#xff0c;它提供了一种对概率进行建模和更新的框架。贝叶斯方法在机器学习中得到了广泛的应用&#xff0c;特别是在分类问题中&#xff0c;如垃圾邮件过滤、文本分类等。与传统的频率主义方法相比&#xff0c;贝叶斯方法具有…

万字解析设计模式之迭代器模式、备忘录模式

一、迭代器模式 1.1概述 迭代器模式是一种行为型设计模式&#xff0c;它允许在没有暴露其底层表现形式的情况下遍历集合对象。迭代器模式提供一种通用的遍历机制&#xff0c;可以遍历任何类型的集合&#xff0c;包括数组、列表、树等。通过这种模式&#xff0c;可以实现一种通…

中兴小鲜50 ZTE 畅行50 刷机救砖演示机7543n root 虎贲 展锐 T760 解锁BL

系统信息 网络制式 支持中国移动、中国电信、中国联通、中国广电四大运营商5G频段&#xff1b;支持4G/3G/2G 系统平台 MyOS 13.0&#xff08;基于Android 13&#xff09; 硬件信息 处理器 展锐T760&#xff0c;高性能8核5G芯片 存储 6GB RAM128GB ROM 扩展 不支持 电池容…

linux zsh终端美化

目前的centos系统默认的shell还是bash&#xff0c;但是zsh被称为终极shell&#xff0c;国外有个程序员开发出了一个能够让你快速上手的zsh项目&#xff0c;叫做「oh my zsh」&#xff0c;Github 网址是&#xff1a;https://github.com/robbyrussell/oh-my-zsh 有了这玩意zsh用起…

Apache Airflow (十四) :Airflow分布式集群搭建及测试

&#x1f3e1; 个人主页&#xff1a;IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 &#x1f6a9; 私聊博主&#xff1a;加入大数据技术讨论群聊&#xff0c;获取更多大数据资料。 &#x1f514; 博主个人B栈地址&#xff1a;豹哥教你大数据的个人空间-豹…

物理层之三种数据交换方式(电路交换、报文交换、分组交换(数据报方式、虚电路方式))

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…