📄 one_dimensional_psd.m
字号:
%%%%%此程序为处理一维PSD基本程序,包含汉宁窗口,多线平均算法%%%%%%%%%%
clear;close;%清内存,关闭图
load data_lg.dat;%读AFM数据,之前应先去除文件头的说明文字,仅剩数据
L=20; %取样长度,请先设定
Z_scale=14.93652; %根据文件头的说明文字找出相应的值
sen_Z_scale=3.948723; %根据文件头的说明文字找出相应的值
N=256; %根据文件头的说明文字找出相应的采样点数
%计算实际高度
z=data_lg*Z_scale*sen_Z_scale./65535;%计算z向实际高度
%****************计算实际高度结束*******************%
%绘制二维灰度图
x=linspace(0,L,N);%画出x轴坐标点
[x,y] = meshgrid(x); %生成x,y轴坐标点矩阵
set_height=z-min(min(z)); %最小值置零
colormap(gray); %使用灰度色图
surf(x,y,set_height) ;
shading interp;
view(2);
h=colorbar;
set(h,'Ylim',[0,50]);
set(h,'YTickLabel',{'0nm','','10','','20','','30','','40','','50nm'}); %设置颜色棒
xlabel('μm'),ylabel('μm'),zlabel('nm');
%****************二维灰度图绘制结束*******************%
%以下是X向&Y向循环采样
%%%%%注意:缺省情况下,为X向取样,如果进行Y向取样,需要设置
%%%%% L, y=linspace...,z_1,plot(x,zero_1),xlabel('Y , μm')
figure(2);
start_line=30;%起始采样线
lines=20; %行数,max_lines=(N-start_line)/intv+1
intv=10; %行间隔多少点
x=linspace(0,L,N);%画出x轴坐标点
% y=linspace(0,L,N);%画出y轴坐标点
for i=1:lines
z_1=z(start_line,:);%读取x向取
% z_1=z(:,start_line);%读取y向取样
plot(x,z_1,'r');
hold on;
start_line=start_line+intv;
end
zero_1=zeros(1,length(x));%水平零线
plot(x,zero_1);hold off;
title('Multiple Profiles-values');
xlabel('X , μm'),ylabel('Height , nm');
%*************X向&Y向循环采样结束,绘制轮廓图结束***************%
%以下计算个采样线的PSD
%%%%%%注意:缺省情况下,为X向取样,如果进行Y向取样,需要设置
%%%%%%z_1=z(:,start_line),z_1'转换为z_1, px1=px1',采样点数N;
figure(3);
start_line=50;%对初始采样点进行重新赋值
k=1; %多线PSD矩阵初始值
window=hann(N).*sqrt(8/3);%使用能量已经归一化的汉宁窗
for i=1:lines
z_1=z(start_line,:);%读取x向取样
% z_1=z(:,start_line);%读取y向取样
px1=2*(L/(N-1))*abs(fft(z_1'.*window)).^2/N;
% px1=2*(L/(N-1))*abs(fft(z_1)).^2/N;
% px1=px1'; %y向PSD,由列向量转换成行向量
px1_vector(k,:)=px1;
spfr1=(0:length(z_1)/2)/L;%进行对应的频率转换
loglog(spfr1,px1(1:length(z_1)/2+1),'c');
hold on;
start_line=start_line+intv;
k=k+1;
end
grid ;
title('Multiple 1D PSDs');
xlabel('Spatial Frequency (1/μm)'),ylabel('One-dimensional PSD (nm^2μm)');
hold off;
%*****************计算多条采样线的PSD结束******************%
%计算平均PSD
figure(4)
px1_average=sum(px1_vector)/(k-1);
spfr1=(0:length(z_1)/2)/L;%进行对应的频率转换
loglog(spfr1,px1_average(1:length(z_1)/2+1),'r');
xlabel('Spatial Frequency (1/μm)'),ylabel('One-dimensional PSD (nm^2μm)');
grid ;
%***************计算多条采样线的平均PSD结束****************%
%调取AFM自带软件PSD分析结果,绘制对比图
hold on;
load afm_la_1dpsd.txt;
spfr1=(1:length(z_1)/2)/L;%进行对应的频率转换
loglog(spfr1,afm_la_1dpsd(:,2).*0.001,'b');
title('Comparison of AFM & Self-developed Program ');
h = legend('Self-developed','AFM',1);
set(h,'Interpreter','none');
save('ave_psd','px1_average','-ascii');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -