MATLAB中怎么编写出“找出函数与一直线相减后,从大于0到小于0过渡处的零点”比如下面这个程序

我生成一正弦衰减曲线y=(1+cos(20000*pi*2*t)).*exp(-5000*t),并设定一个阈值th,找出y-th 从大于0到小于0过渡处的零点,此零点触发一个宽度为160us的正脉冲。有如下程序
clf; clear; clc;
t=0:0.05*10^-6:0.4*10^-3;
y=1+cos(20000*pi*2*t);
s=exp(-5000*t);
y=y.*s; %生成衰减的正弦信号
th=0.05; %阈值设定
??? %找出从大于0到到小于0的过零点
??? %生成方波数据y1
hold on
t=t*10^6; %将s转换成us
??? %画竖向对齐线
plot(t,y,'g','LineWidth',1.5); %画正弦衰减曲线
text(30,1.7,'正弦衰减曲线','fontsize',14);
plot(t, th*ones(size(t)),'m','LineWidth',1.5); %画th线
text(10,th+0.1,'th','fontsize',14);
plot(t,0*ones(size(t)),'k'); %画横轴y=0
plot(t,y1,'LineWidth',1.5); %画方波曲线
grid on; box on;
ylim([-1.8,2]);
xlabel('时间 (\mus)','FontName','Times New Roman','FontWeight',
'normal','FontSize',17);
??? %坐标轴字体等设置,以及更改y轴刻度

请问那个过零点怎么求?就是第一个打问号的地方,感谢!
这是要得出的图

[a,b] = find((y-th)<0);
b(1)就是第一个过零点的对应的坐标追问

为什么程序里运算不出b(1)啊?
我运行这个>> b(1)=
b(1)=
|
Error: Expression or statement is incomplete or incorrect.

追答

b(1)= 你别加 = 这个符号啊。。。

追问

为什么算出来的值是四百多啊?我t的范围都没有那么大

追答

你看看a(1)是多少。。。主要这两个返回值a,b我记不太清楚哪一个对应的是序列号,哪一个对应的是幅值了。

追问

a都是1,b是从488一直加1加下去的值

你可以直接帮我做一下这个题吗?我自己在这边运行一下,看看结果

追答

clear; clc;
t=0:0.05*10^-6:0.4*10^-3;
y=1+cos(20000*pi*2*t);
s=exp(-5000*t);
y=y.*s; %生成衰减的正弦信号
th=0.05; %阈值设定
[a,b] = find((y-th)<0);
t(b(1)); %这个才是t对应的时间点

追问

那么用这个怎么生成方波数据呢?

追答

clear; clc;
t=0:0.05*10^-6:0.4*10^-3;
y=1+cos(20000*pi*2*t);
s=exp(-5000*t);
y=y.*s; %生成衰减的正弦信号
th=0.05; %阈值设定
%找出从大于0到到小于0的过零点
[a,b] = find((y-th)2
c = [c,b(num(i+1))];
end
end
%生成方波数据y1
y1 = -2*ones(1,length(y));
for i=1:205
y1(c+i-1) = -1;
end

hold on
t=t*10^6; %将s转换成us
for j=1:length(c)
plot([t(c(j)),t(c(j))],[y(c(j)),y1(c(j))],'r--')
end
plot(t,y,'g','LineWidth',1.5); %画正弦衰减曲线
text(30,1.7,'正弦衰减曲线','fontsize',14);
plot(t, th*ones(size(t)),'m','LineWidth',1.5); %画th线
text(10,th+0.1,'th','fontsize',14);
plot(t,0*ones(size(t)),'k'); %画横轴y=0
plot(t,y1,'LineWidth',1.5); %画方波曲线
grid on; box on;
ylim([-1.8,2]);
xlabel('时间 (\mus)','FontName','Times New Roman','FontWeight','normal','FontSize',17);

追问

虽然有些地方看不懂,但还是挺感谢你的!

温馨提示:答案为网友推荐,仅供参考
相似回答