⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dtmf2.m

📁 利用MATLAB对DTMF信号的产生与检测进行模拟仿真
💻 M
字号:
function DTMF2
s=input( '请输入欲检测的数字个数:');%输入数字个数
l= input( '请输入欲加在数据前面的0值样点数:');
out = zeros(1600*s+1,1);
tab = [ 941 1336;697 1209;697 1336;697 1477;770 1209;770 1336;
770 1477 ;852 1209;852 1336;552 1477];%建立表矩阵
for i=1:s
k=input( '请输入数字(O-9)');%输人具体的数字
fl=tab(k +1,1)/8000;%对信号取样
f2=tab(k+1,2)/8000;
for j=1:800
z=sin(fl*j*2*pi)+sin(f2*j*2*pi);%两信号叠加
out(1600*(i-1)+j+1,1)=z;
out(1600*(i-1)+j+800+1,1)=0;
end
end
out=out./2;
subplot(211);plot(out);
n=256;
r=zeros(8*s,n/4);
a=out;
subplot(212);plot(a);
for i=1:8*s
x=a((i-1)*200+1:i*200);
y=fft(x,n);%作FFT分析
p=abs(y);%计算幅频谱,abs求绝对值(幅值)
r(i,:)=p(1:n/4)';
end
for i=1:8*s%以下是根据FFT分析结果,对信号解码
c=r(i,:);
z=find(c<40);
c(z)=zeros(size(z));
b=nnz(c);%求向量中不为0的数值的个数
if (b==2)
q=find(c);
if (q(1)==23)
if (q(2)==40)
res(i)=1;
elseif(q(2)==44)
res(i)=2;
elseif (q(2)==48)
res(i)=3;
end
elseif(q(1)==26)
if(q(2)==40)
res(i)=4;
elseif(q(2)==44)
res(i)=5;
elseif(q(2)==48)
res(i)=6;
end
elseif(q(1)==28)
if(q(2)==40)
res(i)=7;
elseif(q(2)==44)
res(i)=8;
elseif q(2)==48
res(i)=9;
end
elseif q(1)==31
if(q(2)==44)
res(i)=0;
end
end
else
res(i)=NaN;
end
end
res=res
    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -