pls help me shortened my code.. i really need your help. .Especially in the if elseif statement.

조회 수: 5 (최근 30일)
here's what i have.
Fs = 8000;
t = 0.25;
n =1:ceil(t*Fs);
tone1 = sin(2*pi*(697/Fs)*n) + sin(2*pi*(1209/Fs)*n); %tone1=key one(1)
tone2 = sin(2*pi*(697/Fs)*n) + sin(2*pi*(1336/Fs)*n); %tone2=key two(2)
tone3 = sin(2*pi*(697/Fs)*n) + sin(2*pi*(1477/Fs)*n); %tone3=key three(3)
tone4 = sin(2*pi*(770/Fs)*n) + sin(2*pi*(1209/Fs)*n); %tone4=key four(4)
tone5 = sin(2*pi*(770/Fs)*n) + sin(2*pi*(1336/Fs)*n); %tone5=key five(5)
tone6 = sin(2*pi*(770/Fs)*n) + sin(2*pi*(1477/Fs)*n); %tone6=key six(6)
tone7 = sin(2*pi*(852/Fs)*n) + sin(2*pi*(1209/Fs)*n); %tone7=key seven(7)
tone8 = sin(2*pi*(852/Fs)*n) + sin(2*pi*(1336/Fs)*n); %tone8=key eight(8)
tone9 = sin(2*pi*(852/Fs)*n) + sin(2*pi*(1477/Fs)*n); %tone9=key nine(9)
tone0 = sin(2*pi*(941/Fs)*n) + sin(2*pi*(1336/Fs)*n); %tone0=key zero(0)
tone10 = sin(2*pi*(941/Fs)*n) + sin(2*pi*(1209/Fs)*n); %tone10=key asterisk(*)
tone11 = sin(2*pi*(941/Fs)*n) + sin(2*pi*(1477/Fs)*n); %tone11=key number sign(#)
v=input('Number of keys to enter: ');
display('KEY0 = 0');
display('KEY1 = 1');
display('KEY2 = 2');
display('KEY3 = 3');
display('KEY4 = 4');
display('KEY5 = 5');
display('KEY6 = 6');
display('KEY7 = 7');
display('KEY8 = 8');
display('KEY9 = 9');
display('KEY* = 10');
display('KEY# = 11');
w=input('Enter key/s: ' ,'s');
x=str2num(w); %#ok<ST2NM>
y=length(x);
while y ~= v;
display ('Error''Check the entered number');
w=input('Enter key/s again: ' ,'s');
x=str2num(w);
y=length(x);
end
if v==1; %when the number of key/s entered is/are one(1)
a=x(1,1);
if a==0;subplot(4,3,11);plot(tone0); sound(tone0);xlabel('KEY0');
elseif a==1;subplot(4,3,1); plot(tone1); sound(tone1);xlabel('KEY1');
elseif a==2; subplot(4,3,2);plot(tone2);sound(tone2);xlabel('KEY2');
elseif a==3;subplot(4,3,3);plot(tone3); sound(tone3);xlabel('KEY3');
elseif a==4;subplot(4,3,4);plot(tone4); sound(tone4);xlabel('KEY4');
elseif a==5;subplot(4,3,5);plot(tone5); sound(tone5);xlabel('KEY5');
elseif a==6;subplot(4,3,6);plot(tone6); sound(tone6);xlabel('KEY6');
elseif a==7;subplot(4,3,7);plot(tone7); sound(tone7);xlabel('KEY7');
elseif a==8;subplot(4,3,8);plot(tone8); sound(tone8);xlabel('KEY8');
elseif a==9;subplot(4,3,9);plot(tone9); sound(tone9);xlabel('KEY9');
elseif a==10;subplot(4,3,10);plot(tone10);sound(tone10);xlabel('KEY*');
elseif a==11;subplot(4,3,12);plot(tone11);sound(tone11);xlabel('KEY#');
end
elseif v==2; %when the number of key/s entered is/are tw0(2)
a=x(1,1);
if a==0;subplot(4,3,11);plot(tone0); sound(tone0);xlabel('KEY0');
elseif a==1;subplot(4,3,1); plot(tone1); sound(tone1);xlabel('KEY1');
elseif a==2; subplot(4,3,2);plot(tone2);sound(tone2);xlabel('KEY2');
elseif a==3;subplot(4,3,3);plot(tone3); sound(tone3);xlabel('KEY3');
elseif a==4;subplot(4,3,4);plot(tone4); sound(tone4);xlabel('KEY4');
elseif a==5;subplot(4,3,5);plot(tone5); sound(tone5);xlabel('KEY5');
elseif a==6;subplot(4,3,6);plot(tone6); sound(tone6);xlabel('KEY6');
elseif a==7;subplot(4,3,7);plot(tone7); sound(tone7);xlabel('KEY7');
elseif a==8;subplot(4,3,8);plot(tone8); sound(tone8);xlabel('KEY8');
elseif a==9;subplot(4,3,9);plot(tone9); sound(tone9);xlabel('KEY9');
elseif a==10;subplot(4,3,10);plot(tone10);sound(tone10);xlabel('KEY*');
elseif a==11;subplot(4,3,12);plot(tone11);sound(tone11);xlabel('KEY#');
end
pause(0.5);
b=x(1,2);
if b==0;subplot(4,3,11);plot(tone0); sound(tone0);xlabel('KEY0');
elseif b==1;subplot(4,3,1); plot(tone1); sound(tone1);xlabel('KEY1');
elseif b==2; subplot(4,3,2);plot(tone2);sound(tone2);xlabel('KEY2');
elseif b==3;subplot(4,3,3);plot(tone3); sound(tone3);xlabel('KEY3');
elseif b==4;subplot(4,3,4);plot(tone4); sound(tone4);xlabel('KEY4');
elseif b==5;subplot(4,3,5);plot(tone5); sound(tone5);xlabel('KEY5');
elseif b==6;subplot(4,3,6);plot(tone6); sound(tone6);xlabel('KEY6');
elseif b==7;subplot(4,3,7);plot(tone7); sound(tone7);xlabel('KEY7');
elseif b==8;subplot(4,3,8);plot(tone8); sound(tone8);xlabel('KEY8');
elseif b==9;subplot(4,3,9);plot(tone9); sound(tone9);xlabel('KEY9');
elseif b==10;subplot(4,3,10);plot(tone10);sound(tone10);xlabel('KEY*');
elseif b==11;subplot(4,3,12);plot(tone11);sound(tone11);xlabel('KEY#');
end
pause(0.5);
elseif v==3; %when the number of key/s entered is/are three(3)
a=x(1,1);
if a==0;subplot(4,3,11);plot(tone0); sound(tone0);xlabel('KEY0');
elseif a==1;subplot(4,3,1); plot(tone1); sound(tone1);xlabel('KEY1');
elseif a==2; subplot(4,3,2);plot(tone2);sound(tone2);xlabel('KEY2');
elseif a==3;subplot(4,3,3);plot(tone3); sound(tone3);xlabel('KEY3');
elseif a==4;subplot(4,3,4);plot(tone4); sound(tone4);xlabel('KEY4');
elseif a==5;subplot(4,3,5);plot(tone5); sound(tone5);xlabel('KEY5');
elseif a==6;subplot(4,3,6);plot(tone6); sound(tone6);xlabel('KEY6');
elseif a==7;subplot(4,3,7);plot(tone7); sound(tone7);xlabel('KEY7');
elseif a==8;subplot(4,3,8);plot(tone8); sound(tone8);xlabel('KEY8');
elseif a==9;subplot(4,3,9);plot(tone9); sound(tone9);xlabel('KEY9');
elseif a==10;subplot(4,3,10);plot(tone10);sound(tone10);xlabel('KEY*');
elseif a==11;subplot(4,3,12);plot(tone11);sound(tone11);xlabel('KEY#');
end
pause(0.5);
b=x(1,2);
if b==0;subplot(4,3,11);plot(tone0); sound(tone0);xlabel('KEY0');
elseif b==1;subplot(4,3,1); plot(tone1); sound(tone1);xlabel('KEY1');
elseif b==2; subplot(4,3,2);plot(tone2);sound(tone2);xlabel('KEY2');
elseif b==3;subplot(4,3,3);plot(tone3); sound(tone3);xlabel('KEY3');
elseif b==4;subplot(4,3,4);plot(tone4); sound(tone4);xlabel('KEY4');
elseif b==5;subplot(4,3,5);plot(tone5); sound(tone5);xlabel('KEY5');
elseif b==6;subplot(4,3,6);plot(tone6); sound(tone6);xlabel('KEY6');
elseif b==7;subplot(4,3,7);plot(tone7); sound(tone7);xlabel('KEY7');
elseif b==8;subplot(4,3,8);plot(tone8); sound(tone8);xlabel('KEY8');
elseif b==9;subplot(4,3,9);plot(tone9); sound(tone9);xlabel('KEY9');
elseif b==10;subplot(4,3,10);plot(tone10);sound(tone10);xlabel('KEY*');
elseif b==11;subplot(4,3,12);plot(tone11);sound(tone11);xlabel('KEY#');
end
pause(0.5);
c=x(1,3);
if c==0;subplot(4,3,11);plot(tone0); sound(tone0);xlabel('KEY0');
elseif c==1;subplot(4,3,1); plot(tone1); sound(tone1);xlabel('KEY1');
elseif c==2; subplot(4,3,2);plot(tone2);sound(tone2);xlabel('KEY2');
elseif c==3;subplot(4,3,3);plot(tone3); sound(tone3);xlabel('KEY3');
elseif c==4;subplot(4,3,4);plot(tone4); sound(tone4);xlabel('KEY4');
elseif c==5;subplot(4,3,5);plot(tone5); sound(tone5);xlabel('KEY5');
elseif c==6;subplot(4,3,6);plot(tone6); sound(tone6);xlabel('KEY6');
elseif c==7;subplot(4,3,7);plot(tone7); sound(tone7);xlabel('KEY7');
elseif c==8;subplot(4,3,8);plot(tone8); sound(tone8);xlabel('KEY8');
elseif c==9;subplot(4,3,9);plot(tone9); sound(tone9);xlabel('KEY9');
elseif c==10;subplot(4,3,10);plot(tone10);sound(tone10);xlabel('KEY*');
elseif c==11;subplot(4,3,12);plot(tone11);sound(tone11);xlabel('KEY#');
end
end

채택된 답변

Stephen23
Stephen23 2015년 9월 17일
편집: Stephen23 2015년 9월 17일
Here is the entire functionality in about twenty lines:
Fs = 8000;
t = 0.25;
N = 1:ceil(t*Fs);
% define DTMF:
R = [697,770,852,941]; % Hz, rows
C = [1209,1336,1477]; % Hz, columns
[Ra,Ca] = meshgrid(R,C); % Hz, all
Rb = 2*pi*(Ra(:)/Fs);
Cb = 2*pi*(Ca(:)/Fs);
T = sin(Rb*N) + sin(Cb*N);
% get user input:
J = '123456789*0#'; % subplot is by row
I = input('Enter keys/s [0:9*#]: ','s');
assert(all(ismember(I,J)),'An invalid key was entered')
% plot and play:
for k = 1:numel(I)
X = strfind(J,I(k));
subplot(4,3,X);
plot(T(X,:));
xlabel(sprintf('KEY%s',I(k)))
sound(T(X,:));
pause(0.5);
end
  댓글 수: 3
Stephen23
Stephen23 2015년 9월 17일
편집: Stephen23 2015년 9월 17일
Easy, just replace the assert line with these three lines:
while ~all(ismember(I,J))
I = input('An invalid character was used. Enter all keys/s [0:9*#]: ','s');
end
Note that the only way to exit this loop is to enter only correct characters. You might want to consider some "quit" option as well.
chrys
chrys 2015년 9월 17일
how about if the program wants to ask the user first,how many number of keys he/she wants to enter then the program ask to enter the key, how should i do that. can you help me again.pls

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Walter Roberson
Walter Roberson 2015년 9월 17일
I recommend that you learn to use cell arrays. Or 2 dimensional arrays.
tone(1+0,:) = sin(2*pi*(941/Fs)*n) + sin(2*pi*(1336/Fs)*n); %tone0=key zero(0)
tone(1+1,:) = sin(2*pi*(697/Fs)*n) + sin(2*pi*(1209/Fs)*n); %tone1=key one(1)
tone(1+2,:) = sin(2*pi*(697/Fs)*n) + sin(2*pi*(1336/Fs)*n); %tone2=key two(2)
tone(1+3,:) = sin(2*pi*(697/Fs)*n) + sin(2*pi*(1477/Fs)*n); %tone3=key three(3)
and so on
then
sound(tone(1+c,:))

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by