MATLAB实现OFET数据处理

        有机半导体器件的应用日益广泛,而OFET(Organic field-effect transistor,有机场效应晶体管)领域的研究也面临着大量的数据处理,虽然这些工作使用EXCEL和Origin也可以完成,但是面对大量数据未免有些不便。

        使用matlab可以实现运算和回归、作图一体的批量操作:

        输出曲线(Output Curve)作图的代码如下:

clc,
clear
close all
%在‘’中输入路径
addpath('U:\2021\data')
filename = 'O-3-1-5um.csv'
A = xlsread(filename)
if A(1:41,5)<0
    current1 = -A(1:61,5)
    current2 = -A(62:122,5)
    current3 = -A(123:183,5)
    current4 = -A(184:244,5)
    current5 = -A(245:305,5)
    current6 = -A(306:366,5)
    current7 = -A(367:427,5)
    current8 = -A(428:488,5)
    l = length(current1)
voltage = A(1:l,4)
vm = max(voltage)
vn = min(voltage)
cm = max(current8)
cm2 = max(current7)
cm3 = max(current6)
cm4 = max(current5)
cm5 = max(current4)
cm6 = max(current3)
cm7 = max(current2)
cm8 = max(current1)
plot(voltage,current1,voltage,current2,voltage,current3,voltage,current4,voltage,current5,voltage,current6,voltage,current7,voltage,current8)
xlim([vn-15,vm])
ylim([-0.1*cm,1.1*cm])
set(gca,'XDir','reverse')
title('Output Curve')
xlabel('V_D_S/V')
ylabel('-I_D_S/A')
text(-62,cm,('V_G_S = 60 V'))
text(-62,cm2,('50 V'))
text(-62,cm3,('40 V'))
text(-62,cm4,('30 V'))
text(-62,cm5,('20 V'))
text(-62,cm6,('-10~20 V'))
else
    current1 = A(1:81,5)
    current2 = A(82:162,5)
    current3 = A(163:243,5)
    current4 = A(244:324,5)
    current5 = A(325:405,5)
    current6 = A(406:486,5)
    current7 = A(487:567,5)
    current8 = A(568:648,5)
    l = length(current1)
voltage = A(1:l,4)
vm = max(voltage)
vn = min(voltage)
cm = max(current8)
cm2 = max(current7)
cm3 = max(current6)
cm4 = max(current5)
cm5 = max(current4)
cm6 = max(current3)
cm7 = max(current2)
cm8 = max(current1)
plot(voltage,current1,voltage,current2,voltage,current3,voltage,current4,voltage,current5,voltage,current6,voltage,current7,voltage,current8)
xlim([vn,vm+15])
ylim([-0.1*cm,1.1*cm])
title('Output Curve')
xlabel('V_D_S/V')
ylabel('-I_D_S/A')
text(62,cm,('V_G_S = 60 V'))
text(62,cm2,('50 V'))
text(62,cm3,('40 V'))
text(62,cm4,('30 V'))
text(62,cm5,('20 V'))
text(62,cm6,('-10~20 V'))
end

转移曲线(Transfer Curve)的作图代码如下(For循环可以自动判别器件属于N型半导体还是P型半导体):

clc,
clear
close all
%在‘’中输入路径
addpath('U:\2021\ZFJ Group\退火')
%在‘’中输入文件名
filename = '40L802.csv';
A = xlsread(filename);
%扫了几圈?
t = 1
w = A(:,3);
Q = size(w);
q = Q(1,1)/t;
%沟道长度
L = 50;
%沟道宽度
W = 5000;
C = 11E-9;
%回归起点(第几行)
ini = round(0.3*q);
%回归终点(第几行)
off = round(0.4*q);
if A(4,4)<0
    current =  abs(A(1:q,5));
    voltage =  -A(1:q,7);
    sqrt = A(1:q,10);
    M = max(current);
    N = min(current);
    MM = max(sqrt);
    NN = min(sqrt);
    mv = max(voltage);
    O = M/N;
    OFF = vpa(O,2);
    OOFF = eval(OFF);
    Gvol =  abs(A(5,4));
        if Gvol<30
            m = A(ini:off,5);
            n = A(ini:off,7);
            P = polyfit(n,m,1);
            k = P(1,1);
            b = P(1,2);
            V = -b/k;
            u = k*L/(W*C*Gvol);
            semilogy(voltage,current);
            ylim([0.1*N,3*M]);
            title('Linear Regime')
            xlabel('- V_G_S/V');
            ylabel('-I_D_S/A');
            text(-8,9*M,['\mu = ' num2str(u)  'cm^2V^{-1}s^{-1}'])
            text(-8,3*M,['V_D_S = ' num2str(round(A(5,4))) 'V' ])
            text(-8,1*M,['V_t_h = ' num2str(round(V,2)) 'V '])
        else
            m = A(ini:off,7);
            n = A(ini:off,10);
            P = polyfit(m,n,1);
            k = P(1,1);
            b = P(1,2);
            V = b/k;
            u = 2*k*k*L/(W*C);
            yyaxis left
            semilogy(voltage,current)
            ylim([0.1*N,2*M])
            title('Saturation Regime')
            xlabel('- V_G_S/V')
            ylabel('-I_D_S/A') % left y-axis 
            yyaxis right
            plot(voltage,sqrt)
            ylabel('|I_{DS}|^{1/2}/A^{1/2}')
            xlim([-10,60])
            ylim([-0.1*MM,1.1*MM])
            text(-8,0.98*MM,['\mu = ' num2str(u)  'cm^2V^{-1}s^{-1}'])
            text(-8,0.88*MM,['V_D_S = ' num2str(round(A(5,4))) 'V' ])
            text(-8,0.78*MM,['V_t_h = ' num2str(round(V,2)) 'V'])
            %添加箭头
            annotation('textarrow',[0.25 0.15],[0.618 0.618])
            annotation('textarrow',[0.75 0.85],[0.618 0.618])
        end

else
    current =  abs(A(1:q,5));
    voltage =  A(1:q,7);
    sqrt = A(1:q,10);
    M = max(current);
    N = min(current);
    MM = max(sqrt);
    NN = min(sqrt);
    mv = max(voltage);
    O = M/N;
    OFF = vpa(O,2);
    OOFF =eval(OFF);
    Gvol =  abs(A(5,4));
    if Gvol<30
        m = A(ini:off,5);
        n = A(ini:off,7);
        P = polyfit(n,m,1);
        k = P(1,1);
        b = P(1,2);
        V = b/k;
        u = k*L/(W*C*Gvol);
        semilogy(voltage,current)
        ylim([0.01*N,3*M])
        title('Linear Regime')
        xlabel('- V_G_S/V')
        ylabel('-I_D_S/A') % left y-axis 
        text(-8,9*M,['\mu = ' num2str(u)  'cm^2V^{-1}s^{-1}'])
        text(-8,3*M,['V_D_S = ' num2str(round(A(5,4))) 'V'  ])
        text(-8,1*M,['V_t_h = ' num2str(round(V,2)) 'V'])
    else
        %饱和区
        m = A(ini:off,7);
        n = A(ini:off,10);
        P = polyfit(m,n,1);
        k = P(1,1);
        b = P(1,2);
        V = b/k;
        u = 2*k*k*L/(W*C);
        yyaxis left
        semilogy(voltage,current)
        ylim([0.01*N,2*M])
        title('Saturation Regime')
        xlabel('- V_G_S/V')
        ylabel('-I_D_S/A') % left y-axis 
        yyaxis right
        plot(voltage,sqrt)
        ylabel('|I_{DS}|^{1/2}/A^{1/2}')
        xlim([-10,60])
        ylim([-0.1*MM,1.1*MM])
        text(-8,0.98*MM,['\mu = ' num2str(u)  '  cm^2V^{-1}s^{-1}'])
        text(-8,0.88*MM,['V_D_S = ' num2str(round(A(5,4))) ' V'  ])
        text(-8,0.78*MM,['V_t_h = ' num2str(round(V,2))  ' V'])
        annotation('textarrow',[0.2 0.15],[0.618 0.618])
        annotation('textarrow',[0.8 0.85],[0.618 0.618])
    end
end
ON_OFF = abs(OOFF);
table(u,V,ON_OFF)

从转移曲线还可以得到迁移率、阈值电压等信息:(这里的迁移率采用的是分段回归,最后取最大值的方法)

clc,
clear
close all
%在‘’中输入路径
addpath('U:\2021\21.9.26')
%在‘’中输入文件名
filename = 'NDI T S3.csv';
A = xlsread(filename);
%扫了几圈?
t = 1
w = A(:,3);
Q = size(w);
q = Q(1,1)/t;
%沟道长度/um
L = 5;
%沟道宽度/um
W = 1400;
%电容/F
C = 11E-9;
%回归起点(起点行数与一个周期的行数之比)
ini = round(0.1*q);
%回归终点(终点行数与一个周期的行数之比)
off = round(0.3*q);
if A(4,4)<0
    current =  abs(A(1:q,5));
    voltage =  -A(1:q,7);
    sqrt = sqrt(current);
    M = max(current);
    N = min(current);
    MM = max(sqrt);
    NN = min(abs(sqrt));
    mv = max(voltage);
    O = M/N;
    Gvol =  abs(A(5,4));
        if Gvol<30
            m = A(ini:off,5);
            n = A(ini:off,7);
            P = polyfit(n,m,1);
            k = P(1,1);
            b = P(1,2);
            V = -b/k;
            u = k*L/(W*C*Gvol);
        else
            m = A(ini:off,7);
            n = sqrt(ini:off);
            P = polyfit(m,n,1);
            k = P(1,1);
            b = P(1,2);
            V = b/k;
            u = 2*k*k*L/(W*C);
        end
else
    current =  abs(A(1:q,5));
    voltage =  A(1:q,7);
    sqrt = sqrt(current);
    M = max(current);
    N = min(current);
    MM = max(sqrt);
    NN = min(sqrt);
    mv = max(voltage);
    O = M/N;
    Gvol =  abs(A(5,4));
    if Gvol<30
        m = A(ini:off,5);
        n = A(ini:off,7);
        P = polyfit(n,m,1);
        k = P(1,1);
        b = P(1,2);
        V = b/k;
        u = k*L/(W*C*Gvol);
    else
        %饱和区
        m = A(ini:off,7);
        n = A(ini:off,10);
        P = polyfit(m,n,1);
        k = P(1,1);
        b = P(1,2);
        V = b/k;
        u = 2*k*k*L/(W*C);
    end
end
mu1 = abs(u)
%回归起点(起点行数与一个周期的行数之比)
ini = round(0.2*q);
%回归终点(终点行数与一个周期的行数之比)
off = round(0.4*q);
if A(4,4)<0
    Gvol =  abs(A(5,4));
        if Gvol<30
            m = A(ini:off,5);
            n = A(ini:off,7);
            P = polyfit(n,m,1);
            k = P(1,1);
            u = k*L/(W*C*Gvol);
        else
            m = A(ini:off,7);
            n = sqrt(ini:off);
            P = polyfit(m,n,1);
            k = P(1,1);
            u = 2*k*k*L/(W*C);
        end
else
    Gvol =  abs(A(5,4));
    if Gvol<30
        m = A(ini:off,5);
        n = A(ini:off,7);
        P = polyfit(n,m,1);
        k = P(1,1);
        u = k*L/(W*C*Gvol);
    else
        %饱和区
        m = A(ini:off,7);
        n = A(ini:off,10);
        P = polyfit(m,n,1);
        k = P(1,1);
        u = 2*k*k*L/(W*C);
    end
end
mu2 = abs(u)
%回归起点(起点行数与一个周期的行数之比)
ini = round(0.3*q);
%回归终点(终点行数与一个周期的行数之比)
off = round(0.5*q);
if A(4,4)<0
    Gvol =  abs(A(5,4));
        if Gvol<30
            m = A(ini:off,5);
            n = A(ini:off,7);
            P = polyfit(n,m,1);
            k = P(1,1);
            u = k*L/(W*C*Gvol);
        else
            m = A(ini:off,7);
            n = sqrt(ini:off);
            P = polyfit(m,n,1);
            k = P(1,1);
            u = 2*k*k*L/(W*C);
        end
else
    Gvol =  abs(A(5,4));
    if Gvol<30
        m = A(ini:off,5);
        n = A(ini:off,7);
        P = polyfit(n,m,1);
        k = P(1,1);
        u = k*L/(W*C*Gvol);
    else
        %饱和区
        m = A(ini:off,7);
        n = A(ini:off,10);
        P = polyfit(m,n,1);
        k = P(1,1);
        u = 2*k*k*L/(W*C);
    end
end
mu3 = abs(u)
%回归起点(起点行数与一个周期的行数之比)
ini = round(0.4*q);
%回归终点(终点行数与一个周期的行数之比)
off = round(0.6*q);
if A(4,4)<0
    Gvol =  abs(A(5,4));
        if Gvol<30
            m = A(ini:off,5);
            n = A(ini:off,7);
            P = polyfit(n,m,1);
            k = P(1,1);
            u = k*L/(W*C*Gvol);
        else
            m = A(ini:off,7);
            n = sqrt(ini:off);
            P = polyfit(m,n,1);
            k = P(1,1);
            u = 2*k*k*L/(W*C);
        end
else
    Gvol =  abs(A(5,4));
    if Gvol<30
        m = A(ini:off,5);
        n = A(ini:off,7);
        P = polyfit(n,m,1);
        k = P(1,1);
        u = k*L/(W*C*Gvol);
    else
        %饱和区
        m = A(ini:off,7);
        n = A(ini:off,10);
        P = polyfit(m,n,1);
        k = P(1,1);
        u = 2*k*k*L/(W*C);
    end
end
mu4 = abs(u)
%回归起点(起点行数与一个周期的行数之比)
ini = round(0.5*q);
%回归终点(终点行数与一个周期的行数之比)
off = round(0.7*q);
if A(4,4)<0
    Gvol =  abs(A(5,4));
        if Gvol<30
            m = A(ini:off,5);
            n = A(ini:off,7);
            P = polyfit(n,m,1);
            k = P(1,1);
            u = k*L/(W*C*Gvol);
        else
            m = A(ini:off,7);
            n = sqrt(ini:off);
            P = polyfit(m,n,1);
            k = P(1,1);
            u = 2*k*k*L/(W*C);
        end
else
    Gvol =  abs(A(5,4));
    if Gvol<30
        m = A(ini:off,5);
        n = A(ini:off,7);
        P = polyfit(n,m,1);
        k = P(1,1);
        u = k*L/(W*C*Gvol);
    else
        %饱和区
        m = A(ini:off,7);
        n = A(ini:off,10);
        P = polyfit(m,n,1);
        k = P(1,1);
        u = 2*k*k*L/(W*C);
    end
end
mu5 = abs(u)
%回归起点(起点行数与一个周期的行数之比)
ini = round(0.6*q);
%回归终点(终点行数与一个周期的行数之比)
off = round(0.8*q);
if A(4,4)<0
    Gvol =  abs(A(5,4));
        if Gvol<30
            m = A(ini:off,5);
            n = A(ini:off,7);
            P = polyfit(n,m,1);
            k = P(1,1);
            u = k*L/(W*C*Gvol);
        else
            m = A(ini:off,7);
            n = sqrt(ini:off);
            P = polyfit(m,n,1);
            k = P(1,1);
            u = 2*k*k*L/(W*C);
        end
else
    Gvol =  abs(A(5,4));
    if Gvol<30
        m = A(ini:off,5);
        n = A(ini:off,7);
        P = polyfit(n,m,1);
        k = P(1,1);
        u = k*L/(W*C*Gvol);
    else
        %饱和区
        m = A(ini:off,7);
        n = A(ini:off,10);
        P = polyfit(m,n,1);
        k = P(1,1);
        u = 2*k*k*L/(W*C);
    end
end
mu6 = abs(u)
%回归起点(起点行数与一个周期的行数之比)
ini = round(0.7*q);
%回归终点(终点行数与一个周期的行数之比)
off = round(0.9*q);
if A(4,4)<0
    Gvol =  abs(A(5,4));
        if Gvol<30
            m = A(ini:off,5);
            n = A(ini:off,7);
            P = polyfit(n,m,1);
            k = P(1,1);
            b = P(1,2);
            u = k*L/(W*C*Gvol);
        else
            m = A(ini:off,7);
            n = sqrt(ini:off);
            P = polyfit(m,n,1);
            k = P(1,1);
            b = P(1,2);
            u = 2*k*k*L/(W*C);
        end
else
    Gvol =  abs(A(5,4));
    if Gvol<30
        m = A(ini:off,5);
        n = A(ini:off,7);
        P = polyfit(n,m,1);
        k = P(1,1);
        b = P(1,2);
        u = k*L/(W*C*Gvol);
    else
        %饱和区
        m = A(ini:off,7);
        n = A(ini:off,10);
        P = polyfit(m,n,1);
        k = P(1,1);
        b = P(1,2);
        u = 2*k*k*L/(W*C);
    end
end
mu7 = abs(u)
ON_OFF = abs(O);
mu = [mu1,mu2,mu3,mu4,mu5,mu6,mu7]
mumax = max(mu)
table(mumax,V,ON_OFF)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值