错误使用 semilogy
数据必须为单个 y 值输入或者一对或多对 x 和 y 值。
clc;clear;
lamda=1550e-9; % 发射激光脉冲1550 nm
fs=500e6; % 采样频率500 MHz
T=400e-9; % 发射激光的脉冲宽度400 ns
N=[100 1000 10000];% 1000,10000
CNR=-40:5:10; % -40~10 dB
M=T*fs; % M为采样点数
W=sqrt(log(2))/(pi*T*sqrt(2)); w=W/fs; % 归一化谱宽
CNR1=linspace(-40,10,50); % -40~10 dB
CNR=10.^(CNR1/10);
V_cr1=zeros(1,50);
a=lamda*fs*w/(2*sqrt(N(1)*M));
for index=1:50
u =@(f) (f./w).^2./(1+((CNR(index)./(w*(2*pi).^0.5)).*exp(-f.^2./(2*w.^2))).^(-1)).^2;
q = integral(u,-1/2,1/2);
V_cr1(index)=a*q.^(-1/2);
end
V=V_cr1;
semilogy(CNR1,V,line);
title('V_crl with CNR');
ylabel('V_crl(m/s)');
xlabel('CNR(dB)');
ylim([1e-3,1e1]);
参考GPT和自己的思路:
semilogy函数要求输入的数据必须是单个y值或一对或多对x和y值,但在代码中的第22行,输入的line参数是错误的,应该改为'-o'或其他符合要求的参数。修改后的代码如下:
1. clc;clear;
2. lamda=1550e-9; % 发射激光脉冲1550 nm
3. fs=500e6; % 采样频率500 MHz
4. T=400e-9; % 发射激光的脉冲宽度400 ns
5. N=[100 1000 10000];% 1000,10000
6. CNR=-40:5:10; % -40~10 dB
7. M=T\*fs; % M为采样点数
8. W=sqrt(log(2))/(pi\*T\*sqrt(2)); w=W/fs; % 归一化谱宽
9.
10. CNR1=linspace(-40,10,50); % -40~10 dB
11. CNR=10.^(CNR1/10);
12. V\_cr1=zeros(1,50);
13. a=lamda\*fs\*w/(2\*sqrt(N(1)\*M));
14.
15. for index=1:50
16. u =@(f) (f./w).^2./(1+((CNR(index)./(w\*(2\*pi).^0.5)).\*exp(-f.^2./(2\*w.^2))).^(-1)).^2;
17. q = integral(u,-1/2,1/2);
18. V\_cr1(index)=a\*q.^(-1/2);
19.
20. end
21. V=V\_cr1;
22. semilogy(CNR1,V,'-o');
23.
24. title('V\_crl with CNR');
25. ylabel('V\_crl(m/s)');
26. xlabel('CNR(dB)');
27. ylim([1e-3,1e1]);
这样就可以正常使用semilogy函数来绘制CN值与V_crl的关系曲线了。
CNR1=linspace(-40,10,50);
这里怎么返回的,调试输出下