多语言展示
当前在线:1810今日阅读:27今日分享:41

Matlab读取S2P文件

本Matlab脚本读取S2P文件的S参数和噪声系数,目前仅支持输出相幅参数的幅度,以及复数形式的文件,阻抗50欧姆
工具/原料

Matlab

方法/步骤
1

请查看S2P文件是否如下格式# hz S ma R 50# HZ S RI R 50

2

保存以下脚本function [FRE S11 S21 S12 S22 noise] = ReadS2P(filename)    file = fopen(filename);    file_temp_s = fopen('.s_parameter_temp.t', 'w');    file_temp_n = fopen('.noise_temp.t', 'w');    status = 0;    sParameter_context = [];    nNoise_context = [];    paramete_type = '';    while 1        line = fgetl(file);        if(length(line) == 0) continue; end;        if(~ischar(line)) break;end        if(status == 0 && line(1) == '#')            status = 1;            paramete_type = line;            continue;        end        if((status == 1 || status == 2) && line(1) ~= '!')            status = 2;            %sParameter_context = strcat(sParameter_context, line);            fprintf(file_temp_s, '%s\n', line);        end        if(status == 2 && line(1) == '!')            status = 3;        end        if(status == 3 && line(1) ~= '!')            %nNoise_context = strcat(nNoise_context, line);            fprintf(file_temp_n, '%s\n', line);        end    end    fclose(file_temp_n);    fclose(file_temp_s);    file_temp_s = dlmread('.s_parameter_temp.t');    file_temp_n = dlmread('.noise_temp.t');        para_list = split(paramete_type, ' ');    FRE = file_temp_s(:,1);    if(strcmp(para_list(4), 'MA') || strcmp(para_list(4), 'ma'))        temp = 2;        S11 = file_temp_s(:,temp); temp = temp + 2;        S21 = file_temp_s(:,temp); temp = temp + 2;        S12 = file_temp_s(:,temp); temp = temp + 2;        S22 = file_temp_s(:,temp); temp = temp + 2;    end    if(strcmp(para_list(4), 'RI') || strcmp(para_list(4), 'ri'))        temp = 2;        S11 = sqrt(file_temp_s(:,temp).*file_temp_s(:,temp) + file_temp_s(:,temp+1).*file_temp_s(:,temp+1));temp = temp + 2;        S12 = sqrt(file_temp_s(:,temp).*file_temp_s(:,temp) + file_temp_s(:,temp+1).*file_temp_s(:,temp+1));temp = temp + 2;        S21 = sqrt(file_temp_s(:,temp).*file_temp_s(:,temp) + file_temp_s(:,temp+1).*file_temp_s(:,temp+1));temp = temp + 2;        S22 = sqrt(file_temp_s(:,temp).*file_temp_s(:,temp) + file_temp_s(:,temp+1).*file_temp_s(:,temp+1));temp = temp + 2;   end    if(strcmp(para_list(4), 'DB') || strcmp(para_list(4), 'db'))        temp = 2;        S11 = file_temp_s(:,temp); temp = temp + 2;        S21 = file_temp_s(:,temp); temp = temp + 2;        S12 = file_temp_s(:,temp); temp = temp + 2;        S22 = file_temp_s(:,temp); temp = temp + 2;    end    noise = file_temp_n;end

3

测试代码[S1_FRE S1_S11 S1_S21 S1_S12 S1_S22 S1_Noise] = ReadS2P('data.s2p');

注意事项

可以根据自己情况修改

推荐信息