本人没有MATLAB的基础…这是师兄给我的一个处理测试数据的程序,我想要了解一下这个程序的每一句讲的是什么东西
%FN noise
format short
clear
clc
close all
% filepath='E:\研究主题\窄线宽激光器\测试\HUST 20220504\FNnoise';
% filename1='10G-50us-1547.74_';
filepath='D:\文件夹\读研\任务\2021.09-2022.07 研二\2022.06.16 大功率1.5DFB、不同光源线宽测试\305线宽测试系统';
filename1='DLu-DFB-450mA_';
% filepath='E:\研究主题\窄线宽激光器\测试';
% filename1='10G-100us-J1-60_';
filetype='bin';
% filename=[filepath,'',filename1,'.Wfm.',filetype];
num=10;
Reb=zeros(num,2);
f1=1e8;
f2=2e8;
ymin=4e3;
ymax=1e8;
pt=9;
parfor ii=1:num
filename=[filepath,'',filename1,num2str(ii),'.',filetype];
switch filetype
case 'csv'
a=dlmread(filename,',',0,0);
fs=1e10;%sample rate,预先设置,读取bin文件时会被替换
re=a(1:floor(end/1),1);
im=a(1:floor(end/1),2);
case 'bin'
[re,im,fs]=RTOReadBin(filename);
end
% re=re((pt*floor(end/50)+1):(pt+1)floor(end/50));
% im=im((ptfloor(end/50)+1):(pt+1)*floor(end/50));
data=complex(re,im);
[LNF(:,ii),LN(:,ii),LNF2(:,ii),LN2(:,ii)]=FMnoiseSpec5(data,fs);
end
for ip=1:num
f=LNF(:,ip);
svp3=LN(:,ip);
ff=LNF2(:,ip);
svp4=LN2(:,ip);
tt1=find(f>f1 & f<f2);
% linewidthFFT=10^(mean(svp2(tt1)))*pi/1e6;
linewidthFFT=mean(svp3(tt1))*pi;
tt1=ff>f1 & ff<f2;
linewidthPwelch=mean(svp4(tt1))*pi;
Reb(ip,:)=[linewidthFFT,linewidthPwelch];
% figure (2*ip-1)
col1=fix((ip-1)/3);%前面有几列
row1=mod(ip-1,3);%位于第几行
% if row1==0;row1=3;end
set(figure,'Position',[480col1,340(row1)+120,500,340]);%前两项左下角坐标,后两项宽和高,默认像素
% subplot(1,2,1)
% loglog(f,svp3);
% axis ([-inf inf,ymin ymax]);
% grid on;
% xlabel('Frequency (Hz)');
% ylabel('FM-noise spectral density (Hz^2/Hz)');
% hold;
% plot([f(2),f(end)],[linewidthFFT/pi,linewidthFFT/pi],'Color','r','LineWidth',2)
% text(f(3),0.7*linewidthFFT/pi,[num2str(linewidthFFT/pi/1e3),'kHz'],'fontsize',15);
% hold off;
% figure (2*ip)
% subplot(1,2,2)
loglog(ff,svp4);grid on;
axis ([-inf inf,ymin ymax]);
xlabel('Frequency (Hz)');
ylabel('FM-noise spectral density (Hz^2/Hz)');
hold;
plot([ff(2),ff(end)],[linewidthPwelch/pi,linewidthPwelch/pi],'Color','r','LineWidth',2)
text(ff(3),0.7linewidthPwelch/pi,[num2str(round(linewidthPwelch10/1e3)/10),' kHz'],'fontsize',15);
hold off;
end
LNfin=Reb/1e6
fprintf(['FFT平均线宽是 ',num2str(mean(Reb(:,1))/1e6),'MHz\n']);
fprintf(['PWE平均线宽是 ',num2str(mean(Reb(:,2))/1e6),'MHz\n']);
%去掉极大极小值后求平均
[LND,LNP]=sort(LNfin(:,1));
% LND
LNave=mean(LND(3:end-2,1));
% set(gca,'xscale','linear')%x轴线性坐标
% set(gca,'xLim',[0,1e9])%x轴范围
% set(gca,'yLim',[-inf,inf])%y轴范围
这个歌程序运行是没有问题的,我已经处理完数据了。只是希望可以知道每一个语句的含义(就像英语翻译那样,每一行语句对应一句解释),谢谢!
%%
%FN noise %FN噪声
%% 准备
format short %变量采用format short 5字长定点数
clear %清除工作空间的所有变量
clc %清空命令行窗口内容
close all %关闭所有的Figure窗口
% filepath='E:\研究主题\窄线宽激光器\测试\HUST 20220504\FNnoise'; %文件路径
% filename1='10G-50us-1547.74_'; %文件名
filepath='D:\文件夹\读研\任务\2021.09-2022.07 研二\2022.06.16 大功率1.5DFB、不同光源线宽测试\305线宽测试系统';
filename1='DLu-DFB-450mA_';
% filepath='E:\研究主题\窄线宽激光器\测试';
% filename1='10G-100us-J1-60_';
filetype='bin'; %文件类型为二进制文件
% filename=[filepath,'',filename1,'.Wfm.',filetype];
%% 初始化数据
num=10; %变量num为10
Reb=zeros(num,2); %创建一个num行2列的全0矩阵Reb
f1=1e8; %变量f1为(1乘以10的8次方)
f2=2e8; %变量f2为(2乘以10的8次方)
ymin=4e3; %变量ymin为(4乘以10的3次方)
ymax=1e8; %变量ymax为(1乘以10的8次方)
pt=9; %变量pt为9
%%
parfor ii=1:num %运用parfor将循环体作为整体分到到一个个处理器中,从而一次性进行多组运算
filename=[filepath,'',filename1,num2str(ii),'.',filetype]; %文件名==文件路径+文件名1+序号+','+文件类型
switch filetype %如果文件类型
case 'csv' %是csv文件(存储表和电子表格信息的纯文本文件)
a=dlmread(filename,',',0,0); %由filename指定读取有分隔符','的ASCII文件到矩阵a。'0,0'表示从左上角第一个值开始
fs=1e10; %sample rate,预先设置,读取bin文件时会被替换,定义变量fs为(1乘以10的10次方)
re=a(1:floor(end/1),1); %变量re为a(1:floor(end/1),1)
im=a(1:floor(end/1),2); %变量im为a(1:floor(end/1),2)
case 'bin' %是二进制文件
[re,im,fs]=RTOReadBin(filename); %输入filename调用RTOReadBin函数获取re,im,fs变量的值
end
% re=re((pt*floor(end/50)+1):(pt+1)floor(end/50));
% im=im((ptfloor(end/50)+1):(pt+1)*floor(end/50));
data=complex(re,im); %创建复数data,返回值为re+im*i
[LNF(:,ii),LN(:,ii),LNF2(:,ii),LN2(:,ii)]=FMnoiseSpec5(data,fs); %data,fs调用FMoinseSpec5函数获取LNF(:,ii),LN(:,ii),LNF2(:,ii),LN2(:,ii)的值
end
%%
for ip=1:num %ip从1-num循环
f=LNF(:,ip); %定义变量f=LNF(:,ip);
svp3=LN(:,ip); %定义变量svp3=LN(:,ip);
ff=LNF2(:,ip); %定义变量ff=LNF2(:,ip);
svp4=LN2(:,ip); %定义变量svp4=LN2(:,ip);
tt1=find(f>f1 & f<f2); %寻找f中满足f>f1 & f<f2条件的元素并返回其在矩阵f中的位置给ttl。
% linewidthFFT=10^(mean(svp2(tt1)))*pi/1e6; %变量linewidthFFT为linewidthFFT=10^(mean(svp2(tt1)))*pi/1e6
linewidthFFT=mean(svp3(tt1))*pi; %变量linewidthFFT为mean(svp3(tt1))*pi
tt1=find(ff>f1 & ff<f2); %寻找ff中满足ff>f1 & ff<f2条件的元素并返回其在矩阵ff中的位置给ttl
linewidthPwelch=mean(svp4(tt1))*pi; %变量linewidthPwelch为(svp4(tt1)的平均值乘与pi)
Reb(ip,:)=[linewidthFFT,linewidthPwelch]; %变量Reb(ip,:)为[linewidthFFT,linewidthPwelch]
%figure (2*ip-1) %创建2*ip-1窗口
col1=fix((ip-1)/3); %前面有几列返回给coll
row1=mod(ip-1,3); %位于第几行返回给rowl
% if row1==0;row1=3;end %如果row1==0,则row1=3
set(figure,'Position',[480col1,340(row1)+120,500,340]); %前两项左下角坐标,后两项宽和高,默认像素
% subplot(1,2,1) % 图形1
% loglog(f,svp3); % x,y轴都为对数形式,x轴为f,y轴svp3
% axis ([-inf inf,ymin ymax]); %定义y的范围
% grid on; %打开网格
% xlabel('Frequency (Hz)'); %x轴为Frequency (Hz)
% ylabel('FM-noise spectral density (Hz^2/Hz)'); %y轴为FM-noise spectral density (Hz^2/Hz)
% hold on; %使当前轴及图形保持而不被刷新,准备接受此后将绘制的图形,多图共存
% plot([f(2),f(end)],[linewidthFFT/pi,linewidthFFT/pi],'Color','r','LineWidth',2)%绘制[f(2),f(end)],[linewidthFFT/pi,linewidthFFT/pi]图像
% text(f(3),0.7*linewidthFFT/pi,[num2str(linewidthFFT/pi/1e3),'kHz'],'fontsize',15);%标记f(3),0.7*linewidthFFT/pi,[num2str(linewidthFFT/pi/1e3),'kHz'],'fontsize
% hold off; % 使当前轴及图形不在具备被刷新的性质,新图出现时,取消原图
% figure (2*ip) %创建2*ip窗口
% subplot(1,2,2) % 图形2
loglog(ff,svp4); % x,y轴都为对数形式,x轴为ff,y轴svp4
grid on; %打开网格
axis ([-inf inf,ymin ymax]); %定义y的范围
xlabel('Frequency (Hz)'); %x轴为Frequency (Hz)
ylabel('FM-noise spectral density (Hz^2/Hz)'); %y轴为'FM-noise spectral density (Hz^2/Hz)
hold on; %使当前轴及图形保持而不被刷新,准备接受此后将绘制的图形,多图共存
plot([ff(2),ff(end)],[linewidthPwelch/pi,linewidthPwelch/pi],'Color','r','LineWidth',2)%绘制[ff(2),ff(end)],[linewidthPwelch/pi,linewidthPwelch/pi]图像
text(ff(3),0.7linewidthPwelch/pi,[num2str(round(linewidthPwelch10/1e3)/10),' kHz'],'fontsize',15);%标记为ff(3),0.7linewidthPwelch/pi,[num2str(round(linewidthPwelch10/1e3)/10
hold off; %% 使当前轴及图形不在具备被刷新的性质,新图出现时,取消原图
end
%%
LNfin=Reb/1e6 %变量LNfin为Reb/1000000
fprintf(['FFT平均线宽是 ',num2str(mean(Reb(:,1))/1e6),'MHz\n']); %输出'FFT平均线宽是 ',num2str(mean(Reb(:,1))/1e6),'MHz\n'
fprintf(['PWE平均线宽是 ',num2str(mean(Reb(:,2))/1e6),'MHz\n']); %输出'PWE平均线宽是 ',num2str(mean(Reb(:,2))/1e6),'MHz\n'
%% 去掉极大极小值后求平均
[LND,LNP]=sort(LNfin(:,1)); %给LNfin(:,1)从小到大排序并赋给[LND,LNP]
LNave=mean(LND(3:end-2,1)); %去掉最大和最小值后取平均附给Lnave
% set(gca,'xscale','linear') %x轴线性坐标
% set(gca,'xLim',[0,1e9]) %x轴范围为0-1000000000
% set(gca,'yLim',[-inf,inf]) %y轴范围负无穷大——无穷大
每句注释?
声明变量这种的就没必要翻译了吧!