📄 dtmf.m
字号:
d=input('键入一位电话号码= ','s'); %输入一个号码符号
symbol=abs(d); %求它的ASCII码
tm=[49,50,51,65;52,53,54,66;55,56,57,67;42,48,35,68]; %16个ASCII码
for p=1:4;
for q=1:4;
if tm(p,q)==abs(d);break,end %检测码相符的列号
end
if tm(p,q)==abs(d);break,end %检测码相符的行号
end
f1=[697,770,852,941]; %行频率向量
f2=[1209,1336,1477,1633]; %列频率向量
n=0:2040;
x1=sin(2*pi*n*f1(p)/8000)+sin(2*pi*n*f2(q)/8000); %构成双频信号
subplot(4,1,1),plot(x1),title('yuanshi');
y = awgn(x1,4) ; %加高斯噪声
subplot(4,1,2),plot(y),title('jiazao');
sound(x1)
disp('双频信号已经生成并发出')
%
N=205; %样本长度
k=[18 20 22 24 31 34 38 42]; %DFT样本序号
Y=goertzel(y(1:N),k+1); %计算八点DFT
val=abs(Y);
subplot(4,1,3) %列出八点DFT向量
%绘图
stem(k,val,'r.');
grid on;
xlabel('k');ylabel('∣Y(k)∣');
set(gcf,'color','w');
shg,disp('图上显示的是检测到的八个近似基频的DFT幅度');
%
x2=sin(2*pi*n*2*f1(p)/8000)+sin(2*pi*n*2*f2(q)/8000);
y1 = awgn(x2,4) ;
N=201;
k1=[35 39 43 47 61 67 74 82];
Y1=goertzel(y1(1:N),k1+1);
val=abs(Y1);
subplot(4,1,4)
stem(k1,val,'o');
grid on;
xlabel('k1');ylabel('∣Y1(k1)∣');
set(gcf,'color','w');
shg,disp('图上显示的是检测到的二次八个近似基频的DFT幅度');
limit=80; %规定检测门限
for s=5:8;
if val(s)>limit,break,end %查找列号
end
for r=1:4
if val(r)>limit,break,end %查找行号
end
disp(['接收端检测到的号码为',setstr(tm(r,s-4))]) %显示接收到的字符
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -