Codi per a generar els arxius de test DTMF
DTMF_signal_test3.m
— 4.3 KB
Continguts del fitxer
% Generation of a DTMF test signal
% (pause between pulse=t_p (ms), tone pulse duracion=t_t (ms))
% with noise and interferences
% ready to use with octave
% to use with MATLAB you must replace play_so.m by sound.m
%
% March 17th 2017
close 'all',clear,clc
%% parameters
for test=[0:12]
% test 3Vpp
% noise Vpp
An=0;
% others Vp
Ab=0;Ar=0;Ad=0;
% amplitude of each DTMF tone
amp=(1-An/2-Ab-Ar-Ad)/2;
switch test
case 0,t_p=100;t_t=10000;tone=['1'];leng=zeros(size(tone));leng(:)=t_t;leng(tone==" ")=t_p;leng=leng*1e-3;An=0;Ab=0;Ar=0;Ad=0;amp=(1-An/2-Ab-Ar-Ad)/2;
case 1,t_p=100;t_t=100;tone=[' 7 6 3 1 0'];leng=zeros(size(tone));leng(:)=t_t;leng(tone==" ")=t_p;leng=leng*1e-3;
An=0;Ab=0;Ar=0;Ad=0;amp=(1-An/2-Ab-Ar-Ad)/2;
case 2,t_p=100;t_t=100;tone=[' 7 6 3881 0'];leng=zeros(size(tone));leng(:)=t_t;leng(tone==" ")=t_p;leng=leng*1e-3;
An=0;Ab=0;Ar=0;Ad=0;amp=(1-An/2-Ab-Ar-Ad)/2;
case 3,t_p=25;t_t=25;tone=[' 7 6 3 1 0 '];leng=zeros(size(tone));leng(:)=t_t;leng(tone==" ")=t_p;leng=leng*1e-3;
An=0;Ab=0;Ar=0;Ad=0;amp=(1-An/2-Ab-Ar-Ad)/2;
case 4,t_p=10;t_t=10;tone=[' 7 6 3 1 0'];leng=zeros(size(tone));leng(:)=t_t;leng(tone==" ")=t_p;leng=leng*1e-3;
An=0;Ab=0;Ar=0;Ad=0;amp=(1-An/2-Ab-Ar-Ad)/2;
case 5,t_p=100;t_t=100;tone=[' 7 6 3 1 0'];leng=zeros(size(tone));leng(:)=t_t;leng(tone==" ")=t_p;leng=leng*1e-3;
An=0;Ab=0;Ar=0;Ad=0;amp=(1-An/2-Ab-Ar-Ad)/2;
amp=amp*.3;
case 6,t_p=100;t_t=100;tone=[' 1 2 3 4 5 6 7 8 9 0 A B C D * # b r d'];leng=zeros(size(tone));leng(:)=t_t;leng(tone==" ")=t_p;leng=leng*1e-3;
An=0;Ab=0;Ar=0;Ad=0;amp=(1-An/2-Ab-Ar-Ad)/2;
case 7,t_p=100;t_t=100;tone=[' 1 2 3 4 5 6 7 8 9 0 A B C D * #'];leng=zeros(size(tone));leng(:)=t_t;leng(tone==" ")=t_p;leng=leng*1e-3;
An=1;Ab=0;Ar=0;Ad=0;amp=(1-An/2-Ab-Ar-Ad)/2;
case 8,t_p=100;t_t=100;tone=[' 1 2 3 4 5 6 7 8 9 0 A B C D * #'];leng=zeros(size(tone));leng(:)=t_t;leng(tone==" ")=t_p;leng=leng*1e-3;
An=1;Ab=0;Ar=0.25;Ad=0;amp=(1-An/2-Ab-Ar-Ad)/2;%amp=.125
case 9,t_p=100;t_t=100;tone=[' 1 2 3 4 5 6 7 8 9 0 A B C D * #'];leng=zeros(size(tone));leng(:)=t_t;leng(tone==" ")=t_p;leng=leng*1e-3;
An=1;Ab=0;Ar=0;Ad=0.25;amp=(1-An/2-Ab-Ar-Ad)/2;
case 10,t_p=100;t_t=100;tone=[' 1 2 3 4 5 6 7 8 9 0 A B C D * #'];leng=zeros(size(tone));leng(:)=t_t;leng(tone==" ")=t_p;leng=leng*1e-3;
An=1;Ab=0.25;Ar=0;Ad=0;amp=(1-An/2-Ab-Ar-Ad)/2;
case 11,t_p=100;t_t=100;tone=[' 7 7 3 0 8'];leng=zeros(size(tone));leng(:)=t_t;leng(tone==" ")=t_p;leng=leng*1e-3;
An=0;Ab=0;Ar=0;Ad=0;amp=(1-An/2-Ab-Ar-Ad)/2;
case 12,t_p=50;t_t=50;tone=['AAAAAAAAAAAAAAAA'];leng=zeros(size(tone));leng(:)=t_t;leng(tone==" ")=t_p;leng=leng*1e-3;
An=0;Ab=0;Ar=0;Ad=0;amp=(1-An/2-Ab-Ar-Ad)/2;
end
% show parameters
test,amp,An,others=Ab+Ar+Ad
Fs=48e3;
t=0:1/Fs:sum(leng)-1/Fs;
% DTMF synthesis
f_col=[697 770 852 941 425]';
f_row=[1209 1336 1477 1633];
% Matrices
M=['1','2','3','A';
'4','5','6','B';
'7','8','9','C';
'*','0','#','D';
'b','r','d'," "];
F1=repmat(f_col,1,4);
F2=repmat(f_row,5,1);
A1=amp*ones(5,4);A1(5,4)=0;
A2=amp*ones(5,4);A2(5,:)=0;
leng2=[0 leng];
%% signal synthesis
x=0*t;
for i=1:length(tone)
f1=F1(M==tone(i));
f2=F2(M==tone(i));
a1=A1(M==tone(i));
a2=A2(M==tone(i));
tin=sum(leng2(1:i));
tfin=tin+leng(i);
ti=t(t>=tin&t<tfin);
x(t>=tin&t<tfin)=a1*cos(2*pi*f1*ti)+a2*cos(2*pi*f2*ti);
end
%% noise synthesis
n=rand(size(x));n=n-mean(n);n=An*n;
%% others
% ring invitation to call (Ab)
b=Ab*cos(2*pi*F1(M=='b')*t);
% error (Ar)
d_r=200e-3;
d_r2=2*d_r;
T_r=1200e-3;N_r=round(T_r*Fs);
ir=t<d_r|(t>d_r2&t<d_r2+d_r);in=1:length(t);ir=in(ir);
ir2=0:N_r:length(t)-N_r;Ir=repmat(ir,1,length(ir2))';
Ir2=repmat(ir2,length(ir),1);Ir2=Ir2(:);in=Ir+Ir2;
r=0*t;r(in)=Ar*cos(2*pi*F1(M=='b')*t(in));
% occupied (Ad)
d_r=200e-3;
d_r2=2*d_r;
T_r=4*d_r;N_r=round(T_r*Fs);
ir=t<d_r|(t>d_r2&t<d_r2+d_r);in=1:length(t);ir=in(ir);
ir2=0:N_r:length(t)-N_r;Ir=repmat(ir,1,length(ir2))';
Ir2=repmat(ir2,length(ir),1);Ir2=Ir2(:);in=Ir+Ir2;
d=0*t;d(in)=Ad*cos(2*pi*F1(M=='b')*t(in));
%% addition of signal, noise and others
y=x+n+b+r+d;
y=y*1;
play_so(y,Fs),pause
%name=['test',num2str(test),'.wav'];
%wavwrite(y,Fs,name)
end
