北邮双音多频MATLAB实验报告
双音多频拨号系统仿真设计报告
双音多频拨号系统仿真设计报告首先,我们需要了解双音多频拨号系统的原理。
在DTMF系统中,每个按键都被映射到一个由两个频率组成的音调。
这些频率包括低频组(697Hz,770Hz,852Hz,941Hz)和高频组(1209Hz,1336Hz,1477Hz,1633Hz)。
通过同时发送低频和高频信号,我们就可以识别出用户所按下的按键。
为了设计一个可靠的DTMF拨号系统,我们需要进行系统的仿真设计。
首先,我们需要使用MATLAB等工具来实现DTMF信号的产生。
这可以通过使用矩阵乘法来实现,其中每个按键对应一个DTMF信号,并且通过调整每个信号的振幅和长度来控制其音调。
在仿真时,我们可以模拟用户按下按键来产生相应的DTMF信号。
然后,我们需要设计一个数字滤波器来对DTMF信号进行分析和处理。
这个数字滤波器通常被称为带通滤波器,它可以对特定的频率范围内的信号进行增益。
为了实现这个滤波器,我们需要使用数字滤波器设计工具,例如巴特沃斯滤波器或IIR滤波器。
通过将DTMF信号传递给数字滤波器,我们可以将其分解成低频组和高频组,并且可以判断出用户所按下的按键。
通过以上的仿真设计,我们可以模拟出一个完整的双音多频拨号系统。
通过调整输入的按键和观察界面显示的结果,我们可以验证系统的正确性和可靠性。
此外,通过对系统进行性能测试,我们还可以评估系统的响应时间和稳定性等指标。
总结起来,双音多频拨号系统仿真设计报告主要介绍了DTMF系统的原理和设计过程。
通过使用MATLAB等工具,我们可以实现DTMF信号的产生和分析,并通过设计合适的数字滤波器进行信号处理。
通过设计一个交互式界面,我们可以模拟整个DTMF拨号系统的运行过程,并评估其性能和可靠性。
(最新版)MATLAB实验报告
(最新版)MATLAB实验报告实验一典型环节的MATLAB仿真一、实验目的1.熟悉MATLAB桌面和命令窗口,初步了解SIMULINK功能模块的使用方法。
2.通过观察典型环节在单位阶跃信号作用下的动态特性,加深对各典型环节响应曲线的理解。
3.定性了解各参数变化对典型环节动态特性的影响。
二、SIMULINK的使用MATLAB中SIMULINK是一个用来对动态系统进行建模、仿真和分析的软件包。
利用SIMULINK功能模块可以快速的建立控制系统的模型,进行仿真和调试。
1.运行MATLAB软件,在命令窗口栏“>>”提示符下键入simulink命令,按Enter 键或在工具栏单击按钮,即可进入如图1-1所示的SIMULINK仿真环境下。
2.选择File菜单下New下的Model命令,新建一个simulink 仿真环境常规模板。
3.在simulink仿真环境下,创建所需要的系统。
以图1-2所示的系统为例,说明基本设计步骤如下:1)进入线性系统模块库,构建传递函数。
点击simulink下的“Continuous”,再将右边窗口中“Transfer Fen”的图标用左键拖至新建的“untitled”窗口。
2)改变模块参数。
在simulink仿真环境“untitled”窗口中双击该图标,即可改变传递函数。
其中方括号内的数字分别为传递函数的分子、分母各次幂由高到低的系数,数字之间用空格隔开;设置完成后,选择OK,即完成该模块的设置。
3)建立其它传递函数模块。
按照上述方法,在不同的simulink 的模块库中,建立系统所需的传递函数模块。
例:比例环节用“Math”右边窗口“Gain”的图标。
4)选取阶跃信号输入函数。
用鼠标点击simulink下的“Source”,将右边窗口中“Step”图标用左键拖至新建的“untitled”窗口,形成一个阶跃函数输入模块。
5)选择输出方式。
用鼠标点击simulink下的“Sinks”,就进入输出方式模块库,通常选用“Scope”的示波器图标,将其用左键拖至新建的“untitled”窗口。
北京邮电大学_dsp_matlab实验报告
数字信号处理实验报告实验名称:数字信号处理实验学生姓名:班级:班内序号:1.实验要求假设信号x(n) 由下述信号组成:请选择合适的长度N 和窗函数,用DFT 分析其频谱,得到清楚的三根谱线。
2.实验代码和实验结果N = 1000; % Length of DFTn = [0:1:N-1];xn = 0.001*cos(0.45*n*pi)+sin(0.3*n*pi)-cos(0.302*n*pi-pi/4);Xk = fft(xn,N);k=[0:1:N-1];subplot(5,1,1);stem(k,abs(Xk(1:1:N)));title('DFT x(n)');xlabel('k');axis([140,240,0,6])subplot(5,1,2);stem(k, abs(Xk(1:1:N)),'r');%画出sin(0.3npi)-cos(0.302npi-pi/4) axis([140,160,0,6]);title('sin(0.3*pi*n)-cos(0.302*pi*n) ');xlabel('k');subplot(5,1,3);stem(k, 1000*abs(Xk(1:1:N)),'g');%画出0.001*cos(0.45npi)axis([220,230,0,6]);title('cos(0.45*pi*n) ');xlabel('k');subplot(5,1,4);stem(k,0.01*abs(Xk(1:1:N)),'k');%画%sin(0.3npi)-cos(0.302npi-pi/4)axis([140,160,0,6]);title('sin(0.3*pi*n)-cos(0.302*pi*n) ');xlabel('k');subplot(5,1,5);stem(k, 10*abs(Xk(1:1:N)),'m');%画出0.001*cos(0.45npi)axis([220,230,0,6]);title('cos(0.45*pi*n) ');xlabel('k');结论:由上图及过程可知,当DFT变换长度为1000时所得到的谱线非常理想。
北邮DSP Matlab仿真实验
《数字信号处理》Matlab 实验一. 离散信号的 FFT 分析 知识点:利用FFT 对信号频谱进行分析,用DFT 进行信号分析时基本参数的选择,以及信号经过离散时间傅立叶变换(DTFT )和有限长度离散傅立叶变换(DFT )后信号频谱上的区别。
实验教学内容:1.用Matlab 编程上机练习。
已知: N=25。
这里Q=+。
可以推导出 ,首先根据这个式子计算X(k)的理论值,然后计算输入序列x(n)的32个值,再利用基2时间抽选的FFT 算法,计算x(n)的DFT X(k),与X(k)的理论值比较(要求计算结果最少6位有效数字)。
解:format long Q=+;WN=exp(-2*pi*1i/32); Xk=(1-Q^32)./(1-Q*WN.^[0:24]); xn=Q.^[0:24]; Xkfft=fft(xn,32); for (k0=1:1:25)difference=Xk(k0)-Xkfft(k0); end;subplot(3,1,1);stem(abs(Xk(1:1:24)),'.');title('DFT x(n)');xlabel('k');axis([0,35,0,15]); subplot(3,1,2);stem(abs(Xkfft(1:1:32)),'g.');title('FFT x(n)');xlabel('k');axis([0,35,0,15]); subplot(3,1,3);stem(abs(difference(1:1:25)),'r.');title('Xk-Xkfft');xlabel('k');axis([0,35,0,15]);0n N-1()0 n 0, n Nn Q x n ⎧≤≤=⎨<≥⎩11,011)()()(k k1nk1-=--===∑∑-=-=N k QW Q QW W n x k X N NnN N n NN n Λ,2.假设信号 x(n) 由下述信号组成:请选择合适的长度 N 和窗函数,用 DFT 分析其频谱,得到清楚的三根谱线。
实验4 双音多频信号的合成与检测.
实验四双音多频信号的合成与检测一实验目的1.理解电话拨号音的合成与检测的基本原理;2.深入理解信号频谱分析理论中相关参数的作用和意义; 3.了解频谱分析在实际工程中的应用实例。
二实验基础双音多频(dual-tone multifrequency, DTMF信号的产生及检测在现代通信系统中有着广泛的应用,家用电话、移动电话以及公共程控交换机(PBX都采用DTMF 信号发送和接收电话拨号号码。
本实验要求利用信号的时域分析和频域分析的基本理论实现DTMF 的合成和检测。
1. DTMF信号合成DTMF 信号由低频组和高频组两组频率信号构成。
按键电话上每个按键都由对应的两个频率组成,如表4.1。
当按下某个键时,所得到的按键信号是由相应两个频率的正弦信号叠加而成。
设x(n为DTMF 信号,产生方式为:x (n =sin (ωH n +sin (ωH n式中:ωH =f s,ωL =f sf s =8KHz 。
DTMF 信号的标准是:在传送过程中每个按键字占用100ms ,其中信号必须持续至少40ms ,且不得多于55ms ,100ms 里的其余时间为静音(无信号)。
表4.1按键频率对应表2. DTMF信号检测DTMF 信号的检测是将信号的两个频率提取出来,从而确定接收到的DTMF 对应的按键。
利用DFT 对DTMF 信号进行N 点的频谱分析,N 的选取决定了频率分辨率以及捕捉N 个样值所需要的时间。
根据谱峰出现的频率点位置m 就可以确定DTMF 信号的频率f k:/k s f kf N =这样计算出的DTMF 信号频率可能与实际的DTMF 信号频率有一定的差别,但可以通过加大N 的选取来减小这种频率差异。
然而从另外一方面来考虑,虽然加大N 值会减小检测频率误差,但这势必会带来捕捉N 个样值所需要的时间增加,从而会对检测的效果造成一定影响。
由DTMF 信号频率所具有的特性不难发现要选取一定的N 值使得计算出的频率和真实的DTMF 信号的频率相一致几乎不可能,而实际中也并不需要计算出来的频率值与其真实频率相一致,只需偏差保持在±1.5%即可认为是DTMF 信号的真实频率。
北邮Matlab实验报告概论
《数字信号处理》Matlab 实验一.实现重叠相加和重叠保留算法,完成线性卷积的分段计算(可任意指定()x n 及()h n );1、 对算法的概括性说明;1)重叠相加法重叠相加法是将待过滤的信号分割成长为N 的若干段,每一段都可以和有限时宽单位取样响应作卷积,再将过滤后的各段重叠相加。
具体算法实现:建立缓存序列,每次输入N 点序列,通过计算x(n)和h(n) 的循环卷积实现线性卷积运算,将缓存的M-1点序列和卷积结果相加,并输出前N 点作为计算结果,同时缓存后M-1点,如此循环,直至所有分段计算完毕,则输出序列y(n)为最终计算结果。
2)重叠保留法重叠保留法相当于将x l (n )和h(n )作循环卷积,然后找出循环卷积中相当于线性卷积的部分。
在这种情况下,将序列y(n)分为长为N 的若干段,每个输入段和前一段有M-1个重叠点 。
此时只需要将发生重叠的前M-1个点舍去,保留重叠的部分并输出,则可获得序列y(n)。
2、源代码及流程图;2.1 源代码:function[y] = overlap_add(x,h,N)M = length(h);if N<MN = M+1;endL = M+N-1;Lx = length(x);T = ceil(Lx/N);t = zeros(1,M-1);x = [x,zeros(1,(T+1)*N-Lx)];y = zeros(1,(T+1)*N);for i = 0:1:Txi = i*N+1;x_seg = x(xi:xi+N-1);y_seg = circular_conv(x_seg,h,L);y_seg(1:M-1) = y_seg(1:M-1)+t(1:M-1); t(1:M-1) = y_seg(N+1:L);y(xi:xi+N-1) = y_seg(1:N);endy = y(1:Lx+M-1);endfunction[y] = overlap_save(x,h,N)Lx = length(x);M = length(h);if N<MN = M+1;endL = N+M-1;t = zeros(1,M-1);T = ceil(Lx/N);x = [x,zeros(1,(T+1)*N-Lx)];y = zeros(1,(T+1)*N);for i = 0:1:Txi = i*N+1;x_seg= [t,x(xi:xi+N-1)];t = x_seg(N+1:N+M-1);y_seg = circular_conv(x_seg,h,L); y(xi:xi+N-1) = y_seg(M:N+M-1); endy = y(1:Lx+M-1);endfunction[y] = circular_conv(x1,x2,L) X1k = fft(x1,L);X2k = fft(x2,L);Yk = X1k.*X2k;y = ifft(Yk);endn = 0:9;xn = n+1;hn = [1,0,-1];N = 6;y1 = conv(hn,xn)y2 = overlap_add(xn,hn,N)y3 = overlap_save(xn,hn,N)2.2流程图1)重叠相加法2)重叠保留法3、实验结果;4、结合教材3.5.1节作运算量分析;重叠相加法和重叠保留法的算法的时间复杂度均为O(n),空间复杂度均为O(1),二者都具有较好的时间和空间复杂度。
双音多频(DTMF)通信设计的MATLAB仿真.
sm=[31 44;23 40;23 44;23 48;26 40;26 44;26 48;28 40;28 44;28 48]; %0-9对应的频率点表矩阵 for i3=1:8*n b=nnz(c(i3,:)); %b:c中≠0数据的个数; if b==2 %若b=2,则c为信号幅频谱,其 ≠ 0 的 下 标 q1 即 为 频 率 点 。 q1=find(c(i3,:)); for i4=1:10 %查表矩阵sm,将q1还原 成相应的数字键,存入AN if q1==sm(i4,:) AN(i3)=i4-1;break; end end else AN(i3)=NaN; %若b≠2,则c为间隔时间,则 AN=NaN(空信号标志) end end AN %显示解码结果AN
其余过程同第一种算法。
进一步思考:怎样用压缩空间的迭代法解差 分方程得到DTMF信号。(这种方法最接近 于实际硬件开发应用) 提示: 用hL(1),hL(2),hL(3)这三个存贮空间存放 hL(n-2),hL(n-1),hL(n); 用hH(1),hH(2),hH(3)这三个存贮空间存放 hH(n-2),hH(n-1),hH(n); 进行迭代。 每次迭代的结果马上放入out数组中。
2)产生相应的DTMF信号及间隔时间,每个信 号持续时间为100ms,间隔时间也是100ms。 (取样频率fs=8kHz),并将结果存入一个数组 中(out)。 *每个DTMF信号为多少点? ∵t=nTs=n/fs=100ms=0.1s, ∴n=tfs=0.1×8000=800点 ∴每个信号x为800点,间隔(用0表示)800点。
(可在媒体播放器中播放)程序如下:
Clear TAB=[941 1336;697 1209;697 1336;697 1477; ... 770 1209;770 1336;770 1477;852 1209; ... 852 1336;852 1477];%表矩阵TAB k=input(‘0~9’); %数字键数组k n=length(k); %k的长度=n for i=1:n %产生相应的DTMF信号 fL=TAB(k(i)+1,1);fH=TAB(k(i)+1,2); n1=800;fs=8000; j=0:1:n1-1; x=sin(2*pi*fL*j/fs)+sin(2*pi*fH*j/fs); out(1600*(i-1)+1:1600*i-800)=x; out(1600*i-799:1600*i)=0; end
MATLAB实验报告北京邮电大学
Matlab实验报告学院:信息与通信工程学院班级:201321113学号:2013210381班内序号:18姓名:石雪原实验题目1.实现重叠相加和重叠保留算法一.实验原理重叠相加法和重叠保留法的实质都是以逐段地方式通过循环卷积来完成线性卷积的计算。
将输入序列x (n)进行分段,每段长为N,且N>M(M为有限长因果序列h (n)的长度),x (n) 逐段与h (n)进行循环卷积,在重叠保留法中需在x (n)序列首部加入长度为M-1的0序列。
在算法中,在获得N个点的输入后,进行N+M-1点循环卷积计算,之后输出N个点。
通过for循环逐段进行循环卷积,使用FFT和IFFT 计算两个有限长序列的N点循环卷积结果。
二.源代码和流程图重叠相加法代码function [Y]=overpl(x,h,N)Lx=length(x); % 序列长度M=length(h); %h (n )长度x=[x,zeros(1,N-1)];t=zeros(1,M-1);Y=zeros(1,Lx+M-1);a=floor(Lx/N);for k=0:aA=x(k*N+1:k*N+N);y1=fft(A,Lx+M-1); % 利用fft 进行运算y2=fft(h,Lx+M-1);y3=y1.*y2;q=ifft(y3,Lx+M-1);Y(k*N+1:k*N+M-1)=q(1:M-1)+t(1:M-1);Y(k*N+M:k*N+N)=q(M:N);t(1:M-1)=q(N+1:N+M-1);endY(1:Lx+M-1);对应流程图图一:每段利用fft和ifft实现循环卷积图二:对X (n)逐段进行循环卷积然后相加得输出线性卷积结果y (n)重叠保留法代码fun cti on [Y]二overlpsav(x,h,N)Lx=le ngth(x);M=le ngth(h);M仁M -1;L=N-M1;h=[h,zeros(1,N-M)];图x=[zeros(1,M1),x,zeros(1,N-1)];a 二floor ((Lx+M1-1)/(L))+1; Y=zeros(1,N); for k=0:a-1 xk=x(k*L+1:k*L+N); b=fft(xk,N); C=fft(h,N); Z=b.*C;Y (k+1,:)=ifft(Z,N); end Y=Y (:,M:N): Y=( Y(:))'对应流程图装成单列向量再转置成行向量 输出输入数据 x I 各段搭接长 长度及脉冲 —\度M1,有效 响应长度k数据长度L将h 延长 至循环 长度N㈡把x 前面 加上(M- 1)个零各段进 行卷积把 K+1X N 阶输出矩 阵Y 初始 化Y 中各行均去 掉前M-1个样 Z 本,转置后构V成新的Y三.实验结果重叠相加法x=[1,2,3] h二[1,2,3] N=41 5]? 3X] 1 K 12 9 0緒=1 1 10 12 9 0重叠保留法x=[1,2,3,4,5,6,7,8,9,10] h=[1,0,-1] N=4四.结果分析(有关运算量的定量分析结果)有限长因果序列x (n)h (n)的长度分别为N和M直接计算线性卷积y (n),y(n)可视为N个序列的叠加结果,序列长度为M 所以每生成一个序列需完成M次乘法,共需完成MN次乘法运算。
基于MATLAB电话机中的双音多频DTMF信号的产生与检测PDF.
绍介理原的测检与生产号信频音双 1.2
容内和理原的测检与生产号信频音双 章二第
3
�为式格用调的数函 letzreoG leztreog 数函箱具工 BALTAM �2� 。值的点频的趣兴感个几的 TFD 点 N 算计�leztreoG 数函的法 算尔泽戈中箱具工理处号信 BALTAM 用调接直以可�绍介的法算 leztreoG 去略里这。法方波滤性线种一的 TFD 算计接直是质实的法算种这�法算 leztreoG 绍介面下。适合 TFD 用接直如不此因�存内多很用占要 还且而�显明不并果效的法算速快 TFF�时小较间区换变的 TFD 当但�法算速快的 TFD 是 TFF。适合更现 实组器波滤用�时少较目数频音的测检当。号符或字数的应相定确后最�率频个两的号信断判�谱度幅的 号信由�析分谱频行进号信频多音双对�TFF�TFD 用是种一另。号符或字数的应相断判器波滤个 2 的号信 出输有据根�率频的心关所取提器波滤组一用是种一�种两有法方的测检。测检行进号信字数成变�换变 D/A 过经号信 FMTD 续连间时的到收将要此因�测检行进法方字数用要然仍里这然显。号符者或字数制进 十的应对所断判以�少多是率频的波弦正个两测检�测检行进号信频多音双的到收对要�端收接在�1�
。用未时暂中话电在列一后最中表。示所 1 表如率频的应对号符及以码号体具。号
用号信�率频个两 zH9021 和 zH796 用 1 如例�成构率频个一各中带频低、高由均字数个一每。.zH3361 和 zH7741,zH6331,zH9021�率频个四有也带频高�zH149 和 zH258,zH077,zH976�率频个四有带频低�组 两带频低和带频高成分率频个 8 的用所�输传频音单的同不个两用都个一每中的 9~0 字数�中话电在 。验实拟模行进后最�法算 尔泽戈括包�法方测检和法方生产的号信频多音双绍介先首面下。现实件软用以可也�现实�片芯用专� 件硬用以可既法算种这�法算)leztreoG(尔泽戈为称�法算 TFD 的殊特种一发开还�本成低降并度速测检 的统系了为。别识与理处号信字数行进并�号信字数成换转其将器换变 D/A 用端收接在�器换变 A/D 了到 用还中其�输传行进并号信拟模生产法方字数用要它�统系理处号信型小的型典个一是统系号信 FMTD 。作操行进单菜音语择 选号信 FMTD 送发话电用以可户用中统系些这。中统系行银和件邮子电于用�中统系信通它其的据数制进 十输传于用以可还�中络网话电在用仅不式制号信频多音双种这。式制号拨的式方数计冲脉用的有原了替 代就快很�别识测监动自易容且�度速号拨的高很有具式制号信种这。中络网话电于用并�制研室验实司 公尔贝 T&TA 国美由�号信号拨的中话电频音是号信�FMTD ,ycneuqerF itluM enoT lauD�频多音双
基于MATLAB的双音多频拨号系统的仿真
基于MATLAB的双音多频拨号系统的仿真淮阴工学院数字信号处理课程设计报告题目:基于MATLAB的双音多频拨号系统的仿真系(院): 计算机工程学院专业:通信工程班级:学号:姓名:指导教师:顾相平学年学期: 2013 ~ 2014 学年第 1 学期2013年12月15 日摘要双音多频(Dual Tone Multi Frequency, DTMF)信号是音频电话中的拨号信号,由美国AT&T贝尔公司实验室研制,并用于电话网络中。
DTMF信号在电话中有两种作用,一个是用拨号信号去控制交换机接通被叫的用户电话机,另一个作用是控制电话机的各种动作,如播放留言、语音信箱等。
MATLAB语言是一种广泛应用于工程计算及数值分析领域的新型高级语言,MATLAB功能强大、简单易学、编程效率高,深受广大科技工作者的欢迎。
特别是MATLAB 还具有信号分析工具箱,不需具备很强的编程能力,就可以很方便地进行信号分析、处理和设计。
所以该课程设计利用MATLAB进行仿真,编写代码,运行程序,根据提示键入8位电话号码如12345678,回车后可以听见8位电话号码对应的DTMF信号的声音,并输出相应的8幅频谱图,最后显示检测到的电话号码12345678。
说明DTMF信号的参数:采样频率、DFT的变换点数以及观测时间的确定原则。
关键词多音双频频谱图采样频率目录1引言 ....................................................................................................................... - 4 - 2课程设计题目描述和要求 ................................................................................... - 6 - 3课程设计报告内容 ............................................................................................... - 7 -3.1信号的产生及算法实现....................................................................... - 7 -3.2详细设计 ............................................................................................. - 11 -3.3结果分析 ............................................................................................. - 13 - 总结 ........................................................................................................................ - 15 -1引言双音多频(Dual Tone Multi Frequency,DTMF)信号是音频电话中的拨号信号,由美国AT&T贝尔公司实验室研制,并用于电话网络中。
双音多频通信设计的Matlab仿真
双音多频(DTMF通信设计的MATLAB仿真摘要:讨论以MATLAB乍为仿真工具产生DTMF言号,并用FFT算法、DFT算法、卷积法及迭代法来对DTMF信号进行解码。
关键词:FFT; DFT;频谱分析;卷积;滤波;差分方程;MATLAB0引言双音多频(DTMF:Double Tone Multi-Frequency) 是按键电话通信,也广泛应用于电子邮件和银行系统中。
用户可从电话发送DTMF信号来选择菜单进行操作。
DTMF信号容易用软件产生和解码。
MATLAB是一个高度集成的软件系统,通过交互式的命令(语句)可以十分简便地实现许多复杂的数值计算。
本文采用MATLAB乍为仿真工具产生DTMF信号,并用FFT算法、DFT算法、卷积法及迭代法来对DTMF信号进行解码,由此得出:时域和频域是研究信号的两个窗口,其中信号处理大都在时域中进行,而信号分析往往在频域中比较方便直观。
且数字信号处理技术中的DFT FFT、卷积、滤波、差分方程这几个概念之间有内在联系。
1 DTMF信号的产生DTMF是数字音频信号,在DTMF I信系统中共有8个频率,分为4个高频音和4个低频音,用一个高频音和一个低频音的组合表示一个信号,这样共有16种组合,分别代表16种信号,如表1所示:表1 DTMF信号组合表例如,当按下数字键“ 1”时,则产生低频697Hz和高频1209Hz这两个正弦信号的迭加。
由于语音信号的最高频率为4KHz,根据奈奎斯特取样定理,取样频率fs应大于或等于原信号最高频率fc的两倍,即fs > 2fc (1)才能保证取样后的信号不失真,所以电话音频信号在数字信号处理时,取样频率fs为2X 4k=8kHz,这里,每个数字信号持续时间为100ms,后面加上100ms的间隔时间(用0表示)。
上述DTMF信号产生方法如下:(1)建立拨号数字的表矩阵,用查表法(查表1)求用户所按数字键对应的高、低频音。
为简化起见,仅允许选择“ 0-9 ”这十个键,在开始时还可拨空信号。
(2021年整理)Matlab实验报告
Matlab实验报告编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(Matlab实验报告)的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为Matlab实验报告的全部内容。
实验一:Matlab操作环境熟悉一、实验目的1.初步了解Matlab操作环境.2.学习使用图形函数计算器命令funtool及其环境.二、实验内容熟悉Matlab操作环境,认识命令窗口、内存工作区窗口、历史命令窗口;学会使用format命令调整命令窗口的数据显示格式;学会使用变量和矩阵的输入,并进行简单的计算;学会使用who和whos命令查看内存变量信息;学会使用图形函数计算器funtool,并进行下列计算:1.单函数运算操作。
求下列函数的符号导数(1)y=sin(x); (2) y=(1+x)^3*(2—x);求下列函数的符号积分(1)y=cos(x);(2)y=1/(1+x^2);(3)y=1/sqrt(1-x^2);(4)y=(x1)/(x+1)/(x+2)求反函数(1)y=(x—1)/(2*x+3); (2) y=exp(x); (3) y=log(x+sqrt(1+x^2));代数式的化简(1)(x+1)*(x-1)*(x-2)/(x—3)/(x—4);(2)sin(x)^2+cos(x)^2;(3)x+sin(x)+2*x-3*cos(x)+4*x*sin(x);2.函数与参数的运算操作。
从y=x^2通过参数的选择去观察下列函数的图形变化(1)y1=(x+1)^2(2)y2=(x+2)^2(3) y3=2*x^2 (4) y4=x^2+2 (5) y5=x^4(6) y6=x^2/23.两个函数之间的操作求和(1)sin(x)+cos(x) (2) 1+x+x^2+x^3+x^4+x^5乘积(1)exp(-x)*sin(x) (2) sin(x)*x商(1)sin(x)/cos(x);(2) x/(1+x^2); (3) 1/(x-1)/(x-2); 求复合函数(1)y=exp(u) u=sin(x) (2) y=sqrt(u) u=1+exp(x^2) (3) y=sin(u) u=asin(x)(4) y=sinh(u) u=-x实验二:MATLAB基本操作与用法一、实验目的1.掌握用MATLAB命令窗口进行简单数学运算。
北邮数字信号处理MATLAB实验报告
数字信号处理软件实验——MatLab仿真实验报告学院:电子工程学院班级:2013211202姓名:学号:实验一:数字信号的 FFT 分析1、实验内容及要求(1) 离散信号的频谱分析:设信号 此信号的0.3pi 和 0.302pi 两根谱线相距很近,谱线 0.45pi 的幅度很小,请选择合适的序列长度 N 和窗函数,用 DFT 分析其频谱,要求得到清楚的三根谱线。
(2) DTMF 信号频谱分析用计算机声卡采用一段通信系统中电话双音多频(DTMF )拨号数字 0~9的数据,采用快速傅立叶变换(FFT )分析这10个号码DTMF 拨号时的频谱。
2、实验目的通过本次实验,应该掌握:(a) 用傅立叶变换进行信号分析时基本参数的选择。
(b) 经过离散时间傅立叶变换(DTFT )和有限长度离散傅立叶变换(DFT ) 后信号频谱上的区别,前者 DTFT 时间域是离散信号,频率域还是连续的,而 DFT 在两个域中都是离散的。
(c) 离散傅立叶变换的基本原理、特性,以及经典的快速算法(基2时间抽选法),体会快速算法的效率。
(d) 获得一个高密度频谱和高分辨率频谱的概念和方法,建立频率分辨率和时间分辨率的概念,为将来进一步进行时频分析(例如小波)的学习和研究打下基础。
(e) 建立 DFT 从整体上可看成是由窄带相邻滤波器组成的滤波器组的概念,此概念的一个典型应用是数字音频压缩中的分析滤波器,例如 DVD AC3 和MPEG Audio 。
3.设计思路及实验步骤1)离散信号的频谱分析:该信号中要求能够清楚的观察到三根谱线。
由于频率0.3pi 和0.302pi 间隔非常小,要清楚的显示,必须采取足够大小的N ,使得分辨率足够好,至少到0.001单位级,而频率0.45pi 的幅度很小,要清楚的观察到它的谱线,必须采取幅度够大的窗函数,使得它的频谱幅度变大一些。
同时还要注意频谱泄漏的问题,三个正弦函数的周期(2pi/w )分别为20,40,1000,所以为了避免产生频谱泄漏(k=w/w0为整数),采样点数N 必须为1000的整数倍。
实验1 双音多频电话拨号音产生实验报告
沈阳工程学院学生实验报告实验室名称:通信实验室课程名称:数字传输技术实验名称:双音多频电话拨号音产生实验实验日期:2015年11月6日班级:通信32 姓名:张翼学号:2013312211指导教师:何思远成绩:一、实验目的1. 理解双音多频电话拨号音产生的原理。
2. 掌握使用MATLAB语言产生双音多频电话拨号音的方法。
二、实验原理电话拨号产生的电话号码是通过双音多频(DTMF)格式从电话机传送给交换机的。
所谓双音多频,就是利用两个规定频率的正弦波去代表电话机的某一个按键,当按下某按键时,就发送相应的一组正弦波。
交换机一方通过检测这组正弦波的频率来识别相应的号码信息。
DTMF规定的电话拨号按键与发送正弦波频率组的对应关系如图1所示。
图1 DTMF规定的电话拨号按键与发送正弦波频率组的对应关系此外,Matlab也提供了关于电话拨号的演示程序phone。
图2为使用phone命令打开的演示窗口。
图2 Matlab中的phone演示窗口三、实验内容及要求根据双音多频电话拨号音产生的原理,用一个函数文件(Function File)产生双音多频电话拨号音。
要求该函数能够根据输入的电话号码产生拨号音频,每个号码的DTMF音持续时间为0.3秒,拨号间隔为0.1秒。
四、程序代码function y=myphone(num_str)%输入num_str为电话号码字符串,为1.2.3.4.5.6.7.5.6.0.*.#%输出为相应的拨号音效矩阵%如果不给出输出变量,则从声卡输出拨号音频freq_low=[697 770 852 941]; %低频频率freq_Hgh=[1209 1336 1477]; %高频频率time_of_num=0.3; %每个号码的DTMF音持续时间Fs=8000; %信号采集率wav=inline('0.25*sin(2*pi*p(1)*[1/p(3):1/p(3):p(4)])+0.25*sin(2*pi*p(2)*[1/p(3):1/p(3):p(4)])','p'); %P=[fL,fH,time_of_num]%参数的含义:[高频率,低频率,采样率,持续时间]XX=[]; %提高运行速度for k=1:length(num_str)switch num_str(k) %根据拨号确定双音频对case '1'fL=freq_low(1);fH=freq_Hgh(1);case '2'fL=freq_low(1);fH=freq_Hgh(2);case '3'fL=freq_low(1);fH=freq_Hgh(3);case '4'fL=freq_low(2);fH=freq_Hgh(1);case '5'fL=freq_low(2);fH=freq_Hgh(2);case '6'fL=freq_low(2);fH=freq_Hgh(3);case '7'fL=freq_low(3);fH=freq_Hgh(1);case '8'fL=freq_low(3);fH=freq_Hgh(2);case '9'fL=freq_low(3);fH=freq_Hgh(3);case '0'fL=freq_low(4);fH=freq_Hgh(2);case '*'fL=freq_low(4);fH=freq_Hgh(1);case '#'fL=freq_low(4);fH=freq_Hgh(3);otherwiseerror('输入号码错误');endX=wav([fL,fH,Fs,time_of_num]); %产生拨号频率信号X=[X,zeros(1,Fs*0.1)]; %添加拨号间隔XX=[XX,X]; %多个拨号顺序合成endif nargout==1y=XX; %返回else %如果无返回变量,则播放声音,并做出波形图sound(XX,Fs);plot([1:length(XX)]./Fs,XX);axis([0 length(XX)/Fs -1 1]);xlabel('time(sec)');title(['The telephone number is : ',num_str]);end编辑并存盘为myphone.m后,执行:(1)myphone('31975555');从声卡输出拨号DTMF音,并显示出拨号波形图,如图3所示。
[IT计算机]MATLAB实验报告
MATLAB实验报告姓名:学号:班级:专业:指导老师:实验一MATLAB运算基础一、实验目的:1、熟悉启动和退出MATLAB的方法。
2、熟悉MATLAB命令窗口的组成。
3、掌握建立矩阵的方法、4、掌握MATLAB各种表达式的书写规则以及常用函数的使用。
二、实验内容:1.1、>> t=0:0.5:2.5t =0 0.5000 1.0000 1.5000 2.0000 2.5000>>y=t.^2.*((t>=0)&(t<1))+(t.^2-1).*((t>=1)&(t>=1)&(t<2))+(t.^2-2*t+1).*((t>=2)&(t <3))y =0 0.2500 0 1.2500 1.0000 2.2500分析:该实验用逻辑表达式求出了分段函数的值。
1.2、>> p=rem([100:999],21)==0;>> sum(p)ans =43>> p1=rem([100:999],21),A=find(p1==0),length(A)ans =43分析:该实验求出了[100,999]之间能被21整除的数的个数为43.1.3、>> ch='ABcdefGHd',k=find(ch>='A'&ch<='Z'),ch(k)=[]ch =ABcdefGHdk =1 2 7 8ch =cdefd分析:该实验建立了一个字符串向量,删除了其中的大写字母。
1.4、A=[1 2 3;4 5 6;7 8 9],[i,j]=find(A>=5),for n=1:length(i)m(n)=A(i(n),j(n))endm>> mm =7 5 8 6 9分析:该实验求出了矩阵A中大于或等于5的元素为7 5 8 6 9.1.5、>>a11=input('all='),a12=input('a12='),a21=input('a21='),a22=input('a22='),A=[a 11,a12;a21,a22],DA=det(A),IN=inv(A),EA=eig(A)a11=23a12=12a21=11a22=32A =23 1211 32DA =604IN =0.0530 -0.0199-0.0182 0.0381EA =15.161039.8390分析:该实验求出了矩阵A中的行列式的值、逆和特征值。
双音多频拨号系统DTMF的实验报告
双音多频拨号系统DTMF的实验设计报告所谓双音多频(DTMF),就是用两个频率——行频和列频来表示机键盘上的一个数字。
DTMF 的指令正在迅速的取代脉冲指令。
除了在呼叫信号中使用外,DTMF 还广泛的使用在交互式控制应用,例如银行、电子甚至家电远程控制等,用户可以从机发送DTMF 信号来做菜单选择。
本文基于MATLAB的双音多频拨号系统的仿真实现。
主要涉及到拨号音合成的基本原理及识别的主要方法,利用 MATLAB 软件以及DFT 算法实现对通信系统中拨号音的合成与识别。
并进一步利用 MATLAB 中的图形用户界面 GUI 制作简单直观的模拟界面。
还能够利用矩阵不同的基频合成 0 - 9 不同按键的拨号音,并能够对不同的拨号音加以正确的识别,实现由拨号音解析出的过程,进一步利用 GUI 做出了简单的图形操作界面。
本文具有界面清楚,画面简洁,易于理解,操作简单的优点,从而实现对拨号音系统的简单的信号仿真。
关键词:双音多频(DTMF) MATLAB GUI 信号仿真在中,数字0~9的中每一个都用两个不同的单音频传输,所用的8个频率分成高频带和低频带两组,低频带有四个频率:679Hz,770Hz,852Hz和941Hz;高频带也有四个频率:1209Hz,1336Hz,1477Hz和1633Hz.。
每一个数字均由高、低频带中各一个频率构成,例如1用697Hz和1209Hz两个频率,信号用表示,其中,。
这样8个频率形成16种不同的双频信号。
一,利用GUI 作图(简单的界面)如下:利用 GUI 图形用户界面设计工具制作拨号面板,把 DTMF 信号和机的键盘矩阵对应起来。
其中选用我们熟悉的 10 个数字键 0 — 9 , 3 个功能键“ 回删”、“拨号”,“解码”。
按照图机键盘矩阵的排列方式制作五行三列的按键控件。
每个按键可用( Push Button )添加。
静态文本框可用( Static Text )添加,如图再加个解码键( Push Button )二,再点运行,得出与上图对应的m文件,再用鼠标右击上图的每个键,点callback导入每个键的编译程序如下:1,按键1的程序:% --- Executes on button press in pushbutton4. function pushbutton4_Callback(hObject, eventdata, handles)x=get(handles.text1,'string'); % 把数字显示在屏幕上if(length(x)>15)errordlg('Sorry . The number you have input is too long !','Input Error•','modal')elsen=[1:1000];%每个数字1000个采样点y=sin(0.5345*n)+sin(0.9272*n);%对应行频列频时域叠加,数字1的低频697Hz和高频1209Hz叠加wavplay(y,8192) %产生拨号音space=zeros(1,100);%100个0模拟静音信号global NUMphone=[NUM,y];% 循环储存NUM=[phone,space]; % 储存连续的拨号音信号NoCtrl=x;NoCtrl=[NoCtrl,'1'];set(handles.text1,'string',[NoCtrl]);end2,按键2的程序:function pushbutton5_Callback(hObject, eventdata, handles)x=get(handles.text1,'string'); %把数字显示在屏幕上if(length(x)>15)errordlg('Sorry . The number you have input is tooelsen=[1:1000];% 每个数字1000个采样点y=sin(0.5345*n)+sin(1.0247*n);% 对应行频列频时域叠加,数字2的低频697Hz和高频1336Hz叠加wavplay(y,8192) %产生拨号音space=zeros(1,100);% 100个0模拟静音信号global NUMphone=[NUM,y]; %循环储存NUM=[phone,space]; %储存连续的拨号音信号NoCtrl=x;NoCtrl=[NoCtrl,'2'];set(handles.text1,'string',[NoCtrl]);end3.按键3的程序:% --- Executes on button press in pushbutton6. function pushbutton6_Callback(hObject, eventdata, handles)x=get(handles.text1,'string'); %把数字显示在屏幕上if(length(x)>15)errordlg('Sorry . The number you have input is tooelsen=[1:1000];% 每个数字1000个采样点y=sin(0.5345*n)+sin(1.1328*n);% 对应行频列频时域叠加,数字3的低频697Hz和高频1477Hz叠加wavplay(y,8192) %产生拨号音space=zeros(1,100);% 100个0模拟静音信号global NUMphone=[NUM,y]; %循环储存NUM=[phone,space]; %储存连续的拨号音信号NoCtrl=x;NoCtrl=[NoCtrl,'3'];set(handles.text1,'string',[NoCtrl]);end4,按键4的程序:% --- Executes on button press in pushbutton10. function pushbutton10_Callback(hObject, eventdata, handles)x=get(handles.text1,'string'); %把数字显示在屏幕上if(length(x)>15)errordlg('Sorry . The number you have input is tooelsen=[1:1000];% 每个数字1000个采样点y=sin(0.5905*n)+sin(0.9272*n);% 对应行频列频时域叠加,数字4的低频770Hz和高频1209Hz叠加wavplay(y,8192) %产生拨号音space=zeros(1,100);% 100个0模拟静音信号global NUMphone=[NUM,y]; %循环储存NUM=[phone,space]; %储存连续的拨号音信号NoCtrl=x;NoCtrl=[NoCtrl,'4'];set(handles.text1,'string',[NoCtrl]);end5,按键5的程序:% --- Executes on button press in pushbutton9. function pushbutton9_Callback(hObject, eventdata, handles)x=get(handles.text1,'string'); %把数字显示在屏幕上if(length(x)>15)errordlg('Sorry . The number you have input is too long !','Input Error•','modal')elsen=[1:1000];%每个数字1000个采样点vy=sin(0.5905*n)+sin(1.0247*n);% 对应行频列频时域叠加,数字5的低频770Hz和高频1336Hz叠加wavplay(y,8192) %产生拨号音space=zeros(1,100); %100个0模拟静音信号global NUMphone=[NUM,y];% 循环储存NUM=[phone,space]; %储存连续的拨号音信号NoCtrl=x;NoCtrl=[NoCtrl,'5'];set(handles.text1,'string',[NoCtrl]);end6,按键6的程序:% --- Executes on button press in pushbutton8. function pushbutton8_Callback(hObject, eventdata, handles)x=get(handles.text1,'string'); %把数字显示在屏幕上if(length(x)>15)errordlg('Sorry . The number you have input is too long !','Input Error•','modal')elsen=[1:1000];% 每个数字1000个采样点y=sin(0.5905*n)+sin(1.1328*n);% 对应行频列频时域叠加,数字6的低频770Hz和高频1477Hz叠加wavplay(y,8192) %产生拨号音space=zeros(1,100);% 100个0模拟静音信号global NUMphone=[NUM,y];% 循环储存NUM=[phone,space]; %储存连续的拨号音信号NoCtrl=x;NoCtrl=[NoCtrl,'6'];set(handles.text1,'string',[NoCtrl]);end7,按键7的程序:% --- Executes on button press in pushbutton13. function pushbutton13_Callback(hObject, eventdata,handles)x=get(handles.text1,'string'); %把数字显示在屏幕上if(length(x)>15)errordlg('Sorry . The number you have input is too long !','Input Error•','modal')elsen=[1:1000];% 每个数字1000个采样点y=sin(0.6534*n)+sin(0.9272*n);% 对应行频列频时域叠加,数字7的低频852Hz和高频1209Hz叠加wavplay(y,8192) %产生拨号音space=zeros(1,100); %100个0模拟静音信号global NUMphone=[NUM,y];% 循环储存NUM=[phone,space]; %储存连续的拨号音信号NoCtrl=x;NoCtrl=[NoCtrl,'7'];set(handles.text1,'string',[NoCtrl]);end8,按键8的程序:% --- Executes on button press in pushbutton12.function pushbutton12_Callback(hObject, eventdata, handles)x=get(handles.text1,'string'); %把数字显示在屏幕上if(length(x)>15)errordlg('Sorry . The number you have input is too long !','Input Error•','modal')elsen=[1:1000];% 每个数字1000个采样点y=sin(0.6534*n)+sin(1.0247*n);% 对应行频列频时域叠加,数字8的低频852Hz和高频1336Hz叠加wavplay(y,8192) %产生拨号音space=zeros(1,100);% 100个0模拟静音信号global NUMphone=[NUM,y]; %循环储存NUM=[phone,space]; %储存连续的拨号音信号NoCtrl=x;NoCtrl=[NoCtrl,'8'];set(handles.text1,'string',[NoCtrl]);end% --- Executes on button press in pushbutton14. function pushbutton14_Callback(hObject, eventdata, handles)x=get(handles.text1,'string'); %把数字显示在屏幕上if(length(x)>15)errordlg('Sorry . The number you have input is too long !','Input Error•','modal')elsen=[1:1000];% 每个数字1000个采样点y=sin(0.6534*n)+sin(1.1328*n);% 对应行频列频时域叠加,数字9的低频852Hz和高频1477Hz叠加wavplay(y,8192) %产生拨号音space=zeros(1,100); %100个0模拟静音信号global NUMphone=[NUM,y];% 循环储存NUM=[phone,space]; %储存连续的拨号音信号NoCtrl=x;NoCtrl=[NoCtrl,'9'];set(handles.text1,'string',[NoCtrl]);end% --- Executes on button press in pushbutton17. function pushbutton17_Callback(hObject, eventdata, handles)x=get(handles.text1,'string'); %把数字显示在屏幕上if(length(x)>15)errordlg('Sorry . The number you have input is too long !','Input Error•','modal')elsen=[1:1000];每个数字1000个采样点y=sin(0.7217*n)+sin(1.0247*n);% 对应行频列频时域叠加,数字0的低频941Hz和高频1336Hz叠加wavplay(y,8192) %产生拨号音space=zeros(1,100); %100个0模拟静音信号global NUMphone=[NUM,y];% 循环储存NUM=[phone,space]; %储存连续的拨号音信号NoCtrl=x;NoCtrl=[NoCtrl,'0'];set(handles.text1,'string',[NoCtrl]);end11,按键#号程序:% --- Executes on button press in pushbutton16. function pushbutton16_Callback(hObject, eventdata, handles)set(handles.text1,'string',['']);set(handles.tbutton,'visible',['off']);set(handles.tbutton,'value',[0]);clear all12,按键*的程序:% --- Executes on button press in pushbutton18. function pushbutton18_Callback(hObject, eventdata, handles)set(handles.text1,'string',['']);set(handles.tbutton,'visible',['off']);set(handles.tbutton,'value',[0]);clear all13,回删键的程序:% --- Executes on button press in pushbutton20. function pushbutton20_Callback(hObject, eventdata, handles)x=get(handles.text1,'string');% 把数字显示在屏幕上if(isempty(x))errordlg('Please input the phone No.','Input error','modal')elsexll=length(x);x(xll)=[];%去掉末尾号在面板上的显示set(handles.text1,'string',[x]);global NUMll=length(NUM);%删除末尾在拨号音信号中的储存for i=ll-1100+1:llNUM(ll)=[];ll=length(NUM);endend14,拨号键的程序:% --- Executes on button press in pushbutton21. function pushbutton21_Callback(hObject, eventdata, handles)x=get(handles.text1,'string'); % 把数字显示在屏幕上xx=str2num(x);if(isempty(NUM))errordlg('Please input the phone No.','Input error','modal')elsewavplay(NUM,8192);msgbox('拨号成功!若需再次拨号请按#号复位!','Done','help')set(handles.tbutton,'visible',['on']);set(handles.text1,'string',['Dieling Done.']); end14,关闭键的程序:% --- Executes on button press in pushbutton22. function pushbutton22_Callback(hObject, eventdata, handles)clear allclose all15,解码的程序:% --- Executes on button press in tbotton.function tbotton_Callback(hObject, eventdata, handles)L=length(NUM);n=L/1100;number='';for i=1:nj=(i-1)*1100+1;d=NUM(j:j+999); %截取出每个数字f=fft(d,2048); %以N=2048作FFT变换a=abs(f);p=a.*a/10000; %计算功率谱num(1)=find(p(1:250)==max(p(1:250))); % 找行频通过计算得出数值围num(2)=300+find(p(300:380)==max(p(300:380))); % 找列频通过计算得出数值围if (num(1) < 180) row=1; % 确定行数elseif (num(1) < 200) row=2;elseif (num(1) < 220) row=3;else row=4;endif (num(2) < 320) column=1; %确定列数elseif (num(2) < 340) column=2;else column=3;endz=[row,column]; % 确定数字if z==[4,2] tel=0; %0在4行2列elseif z==[1,1] tel=1; %1在1行1列elseif z==[1,2] tel=2; %2在1行2列elseif z==[1,3] tel=3; %3在1行3列elseif z==[2,1] tel=4; %4在2行1列elseif z==[2,2] tel=5; %5在2行2列elseif z==[2,3] tel=6; %6在2行3列elseif z==[3,1] tel=7; %7在3行1列elseif z==[3,2] tel=8; %8在3行2列elseif z==[3,3] tel=9; %9在3行3列endt(i)=tel;c=strcat(number,int2str(tel));number=c;i=i+1;endset(handles.text1,'string',['解码中...']);h = waitbar(0,'Decoding...Please wait...'); steps = 1500;for step = 1:steps% computations take place herewaitbar(step / steps)endclose(h);set(handles.text1,'string',number);% hObject handle to tbotton (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)三,运行以上程序调出如下图界面:即可以进行仿真拨号。
北京邮电大学MATLAB实验报告
DSP--MATLAB实验报告实验名称:MATLAB第一次上级实验学生姓名:班级:班内序号:学号:日期:1.实验要求(1) 常用数字信号序列的产生:熟悉Matlab 产生数字信号的基本命令,加深对数字信号概念的理解,并能够用Matlab 产生和绘制出一些常用离散信号序列。
请用Matlab 画出下列序列的波形(-10<n<10):a) δ(n)b) 单位阶跃序列2 u(n-5)c) 矩形序列R(n)d) y(n)=2sin(0.3πn)+ 0.5cos2(0.6πn)(2)加、减、尺度(乘除)和移位是数字信号处理中最基本的算术运算,将上述基本序列进行这些基本运算,得到多个序列构成的组合序列。
(3)请用您的计算机声卡采用一段您自己的声音x(n),长度为45秒,单声道,取样频率44.1kHz,16bit/样值,然后与给定的一段背景音乐y(n) 按下式叠加为一个声音信号z(n):z(n) = 0.7x(n) + 0.3y(n)要求在同一个Figure 中,画出采集声音x(n)、背景音乐y(n)和混音z(n) 的时域波形;2关键算法分析产生δ(n),单位阶跃序列 2 u(n-5),矩形序列R(n),y(n)=2sin(0.3πn)+ 0.5cos2(0.6πn)序列,首先在matlab中新建一个m文件,将各种序列的定义写进去,再在命令窗口中写入命令语句,便可得到。
单位取样序列x=impseq(0,-20,120);n=[-20:120]; >> plot(n,x)单位阶跃序列2 u(n-5) :x=stepseq(5,-20,120),n=[-20:120];plot(n,2*x)矩形序列R(n):x1=stepseq(-10,-10,60),n1=[-10:60],x2==stepseq(10,-10,60),n2=[-10:60],y=x1-x2,n= [-10:60],plot(n,y)y(n)=2sin(0.3πn)+ 0.5cos2(0.6πn):n=[0:0.1:20];x=2*sin(0.3*pi*n)+0.5*cos(2*0.6*pi*n);plot(n,x)加法:δ(n)+ 2 u(n-5):x1=impseq(0,-20,120);n=[-20:120];x2=2*stepseq(5,-20,120),n=[-20:120];y=x1+x2,plot(n,y)减法:δ(n)- 2 u(n-5):x1=impseq(0,-20,120);n=[-20:120]; x2=2*stepseq(5,-20,120),n=[-20:120];y=x1-x2,plot(n,y)乘法: δ(n)- 2 u(n-5): x1=impseq(0,-20,120);n=[-20:120]; x2=2*stepseq(5,-20,120),n=[-20:120];y=x1.*x2,plot(n,y)一个figure中显示多个波形:[y,fs,bits]=wavread('我的声音'),t1=(0:length(y)-1)/fs;[x,fs,bits]=wavread('天空之城'),t2=(0:length(x)-1)/fs;subplot(2,2,1),plot(t1,y);subplot(2,2,2),plot(t2,x);3. 程序运行结果单位取样序列单位阶跃序列2 u(n-5)矩形序列:y(n)=2sin(0.3πn)+ 0.5cos2(0.6πn)::加法:δ(n)+ 2 u(n-5) 乘法: u(n)*R5:移位:一个figure中显示多个波形:4. 总结通过这次实验,我对MATLAB的使用了解了许多,尤其是在对声音和图像的处理方面。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
n=0:204; for i=1:10 a1=[0,a10(i)];a2=[0,a20(i)];b1=[1,b11(i),1];b2=[1,b21(i),1]; y(i,:)=filter(a1,b1,h)+filter(a2,b2,h); %两个冲激响应相叠加 end tone=y(d+1,:); %tone 为相应的按键音(正弦函数) figure(1) for t=1:10 subplot(5,2,t) plot(n/205,y(t,:));title(strcat('数字键',num2str(t-1))); end
end disp('双音多频信号已生成并发出') disp('接收端检测到的号码: ') disp(setstr(d_out)) 程序调试截图
信号频谱图:
观察上面的频谱图,说明接收信号正好是‘78934620’ ,输入输出一致,程序运 行无误 实验总结 这次 matlab 实验明显比之前的有难度, 在掌握了第四章 IIR 数字滤波器设计相关 知识的基础上又有了新的拓展和延伸。过程中出现了一些问题,比如 GOERTZEL 函数实现, 矩阵长度不匹配导致程序不断报错,在自己的研究和同学的帮助下总 算完成了实验,对于 matlab 编程有了深入的了解
DTMF 信号检测(GOERTZEL 算法)
VK X(n) z-1 yK(n)
z-1 z-1
MATLAB 代码 f=[697 770 852 941 1209 1336 1477 1633]; fs=8000; fn=fs/N; k=f/fn; x=[ysin,zeros(1,N)]; tic;%timer start Vk(1)=0;Vk(2)=0; for i1=1:8 w=2*cos(2*pi*k(i1)/N); for j1=3:N Vk(j1)=w.*Vk(j1-1)-Vk(j1-2)+x(j1); end Xk(i1)=Vk(N).^2+Vk(N-1).^2-w*Vk(N)*Vk(N-1); end X=Xk/100; 主程序 N=205; tm=[49,50,51;52,53,54;55,56,57;0,48,0]; f=[697 770 852 941 1209 1336 1477 1633]; d_in=input('请输入电话号码: ','s'); %输入信号 d_in for l=1:8 d=d_in(l)-48; d_tone=dsin(d); %产生拨号音 sound(d_tone,8000); %播放拨号音 pause(0.2) X=GOERT(d_tone,N); % GOERT 算法求出接收端信号的频率分量 value=abs(X); figure(2) subplot(4,2,l) stem(f,value,'.');grid; set(gca,'XTick',f); title('FFT x(n)');xlabel('频率 k/Hz');ylabel('幅度|X(k)|'); limit=50; %设置门限值 for s=5:8 if value(s)>limit break; %高频门限检测 end end for r=1:4 if value(r)>limit break; %低频门限检测 end end d_out(l)=tm(r,s-4); %还原信号
实验 双音多频拨号系统 matlab 实现
xxxxxxxxxx 班 xx 号大学霸
实验内容: 把八位电话号码通过 DTMF 编码生成调制信号,并在接收端检测。 技术指标: 根据 ITU Q.23 建议,DTMF 信号的技术指标是:传送/接收率为每秒 10 个号码,或每个号码 100ms。 每个号码传送过程中,信号存在时间至少 45ms,且不多于 55ms,100ms 的其余时间是静音。 在每个频率点上允许有不超过 1.5%的频率误差。任何超过给定频率 3.5% 的信号,均被认为是无效的,拒绝接收。 (其中关键是不同频率的正弦波的产生。 可以使用查表方式模拟产生两个不同频率的 正弦波。正弦表的制定要保证合成信号的频率误差在 1.5%以内,同时是取样点数尽 量少) dtmf 信号产生: 双音多频调制 DTMF 实质是将两个不同频率的正弦波予以混合相加即可得到, 所 以只要能够产生两个不同点的正弦波的函数值,再相加就可以了
δ(n) Z-1
a10 -b11 -b21
Z-1 Z-1
DAC
产生低频音 的 IIR DF
1 -b22
Z-1 Z-1
产生高频音 的 IIR DF
DTMF 生成器 其中 b21=b22=1 Matlab 代码 m=zeros(1,205);y=[m;m;m;m;m;m;m;m;m;m]; a10=[0.6736 0.5204 0.5204 0.5204 0.5686 0.5686 0.5686 0.6203 0.6203 0.6203]; a20=[0.8671 0.8131 0.8671 0.9168 0.8131 0.8671 0.9168 0.8131 0.8671 0.9168]; b11=[-1.4782 -1.7077 -1.7077 -1.7077 -1.6453 -1.6453 -1.6453 -1.5687 -1.5687 -1.5687]; b21=[-0.9964 -1.1641 -0.9964 -0.7986 -1.1641 -0.9964 -0.7986 -1.1641 -0.9964 -0.7986]; h=impseq(0,0,204); %长度为 205 的单位冲激函数