给下面代码加上判断输入第一个数字为0,输出第一个也记得加0的代码tm = [1, 2 ,3, 65; 4, 5, 6, 66; 7, 8, 9, 67; 42, 0, 35, 68]; N = 205; K = [18, 20, 22, 24, 31, 34, 38, 42]; f1 = [697, 770, 852, 941]; f2 = [1209, 1336, 1477, 1633]; TN0 = input('输入6个号码:','s'); TN = str2num(TN0); len = length(TN0); TNr = 0; first_flag = 0; if len == 6 %判断是否为6为号码,不为6位则报错输出 for m=1:6 d = fix(TN/10^(6-m)); TN = TN-d*10^(6-m); 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 n = 0:1023; x = sin(2*pi*n*f1(p)/8000)+sin(2*pi*n*f2(q)/8000); sound(x, 8000); pause(0.1) X=goertzel(x(1:N),K+1); val = abs(X); subplot(3, 2, m);stem(K, val, '.');grid;xlabel('k');ylabel('|X(k)|'); axis([10 50 0 120]); limit = 80; for s=5:8 if val(s)>limit,break,end end for r=1:4 if val(r)>limit,break,end end TNr=TNr+tm(r,s-4)*10^(6-m); end disp('接收端检测到的号码为') disp(TNr) else disp("ERROR:输入号码不为6位"); end
时间: 2023-11-17 11:04:49 浏览: 22
tm = [1, 2 ,3, 65; 4, 5, 6, 66; 7, 8, 9, 67; 42, 0, 35, 68];
N = 205;
K = [18, 20, 22, 24, 31, 34, 38, 42];
f1 = [697, 770, 852, 941];
f2 = [1209, 1336, 1477, 1633];
TN0 = input('输入6个号码:','s');
TN = str2num(TN0);
len = length(TN0);
TNr = 0;
first_flag = 0;
if len ~= 6 % 判断是否为6位号码,不为6位则报错输出
disp("ERROR:输入号码不为6位");
else
for m=1:6
d = fix(TN/10^(6-m));
TN = TN-d*10^(6-m);
if m == 1 && d == 0 % 判断第一个数字是否为0,如果是,在结果中也要加上0
first_flag = 1;
end
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
n = 0:1023;
x = sin(2*pi*n*f1(p)/8000)+sin(2*pi*n*f2(q)/8000);
sound(x, 8000);
pause(0.1)
X=goertzel(x(1:N),K+1);
val = abs(X);
subplot(3, 2, m);stem(K, val, '.');grid;xlabel('k');ylabel('|X(k)|');
axis([10 50 0 120]);
limit = 80;
for s=5:8
if val(s)>limit,break,end
end
for r=1:4
if val(r)>limit,break,end
end
TNr=TNr+tm(r,s-4)*10^(6-m);
end
if first_flag == 1 % 如果第一个数字是0,则在结果中也加上0
TNr = TNr + 1000000;
end
disp('接收端检测到的号码为')
disp(TNr)
end