📄 bysj.m
字号:
function edit_ystart_Callback(hObject, eventdata, handles)% hObject handle to edit_ystart (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of edit_ystart as text_phase_diff% str2double(get(hObject,'String')) returns contents of edit_ystart as a double% --- Executes during object creation, after setting all properties.function edit_xend_CreateFcn(hObject, eventdata, handles)% hObject handle to edit_xend (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc set(hObject,'BackgroundColor','white');else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));endfunction edit_xend_Callback(hObject, eventdata, handles)% hObject handle to edit_xend (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of edit_xend as text_phase_diff% str2double(get(hObject,'String')) returns contents of edit_xend as a double% --- Executes during object creation, after setting all properties.function edit_yend_CreateFcn(hObject, eventdata, handles)% hObject handle to edit_yend (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc set(hObject,'BackgroundColor','white');else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));endfunction edit_yend_Callback(hObject, eventdata, handles)% hObject handle to edit_yend (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of edit_yend as text_phase_diff% str2double(get(hObject,'String')) returns contents of edit_yend as a double% --- Executes on button press in pb_calc_parameters.function pb_calc_parameters_Callback(hObject, eventdata, handles)% hObject handle to pb_calc_parameters (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)calc_parameter();calc_impedance();% 我的自定义函数 % eileen I love you!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%计算函数function calc_parameter()%全局变量声明global eel cf1 att1_db cf2 att2_db xstart xend ystart yend R11 R12 R13 C1 L1 R21 R22 R23 C2 L2 m_add_state %取得累加器状态 %能取到最新的值%以下是获取输入参数% popupmenu2 == eel ; % default eel=1;popup_eel_index = get(findobj('Tag','popupmenu2'),'value');switch popup_eel_index case 1 eel = 1; case 2 eel = 2;endif eel == 1 cf1_temp = get(findobj('tag','slider_cf1'),'value'); cf1 = cf1_temp * 1000; att1_db = get(findobj('tag','slider_att1'),'value'); %转化分贝数为数字 att1 = 10^(att1_db/10);else cf1_temp = get(findobj('tag','slider_cf1'),'value'); cf1 = cf1_temp * 1000; att1_db = get(findobj('tag','slider_att1'),'value'); cf2_temp = get(findobj('tag','slider_cf2'),'value'); cf2 = cf2_temp * 1000; att2_db = get(findobj('tag','slider_att2'),'value'); %转化分贝数为数字 att1 = 10^(att1_db/10); att2 = 10^(att2_db/10);end%对某些参数调整omega0 = 2*pi*cf1; omega1 = 2*pi*cf2;%计算电阻电容电感的值 %均是国际单位制%显示电阻电容电感的值 %进行单位调整if m_add_state==1 %累加状态时 一阶均衡不可用 strR11 = 'R1 = '; set(findobj('tag','textR11'),'string','invalid'); strR12 = 'R2 = '; set(findobj('tag','textR12'),'string','invalid'); strR13 = 'R3 = '; set(findobj('tag','textR13'),'string','invalid'); strC1 = 'C = '; set(findobj('tag','textC1'),'string','invalid'); strL1 = 'L = '; set(findobj('tag','textL1'),'string','invalid'); %只计算二阶均衡 %计算 R22 = 50; R21 = (att2-1) * R22; R23 = R22 / (att2-1); C2 = sqrt(att2) / ( omega0 * (att2-1) * R22); L2 = R22 * R22 * C2; %显示 strR21 = 'R1 = '; set(findobj('tag','textR21'),'string',[strR21,sprintf('%6.4g\',R21)]); strR22 = 'R2 = '; set(findobj('tag','textR22'),'string',[strR22,sprintf('%6.4g\',R22)]); strR23 = 'R3 = '; set(findobj('tag','textR23'),'string',[strR23,sprintf('%6.4g\',R23)]); strC2 = 'C = '; set(findobj('tag','textC2'),'string',[strC2,sprintf('%6.4g\',C2)]); strL2 = 'L = '; set(findobj('tag','textL2'),'string',[strL2,sprintf('%6.4g\',L2)]);else if eel==1 %计算 R12 = 50; R11 = (att1-1) * R12; R13 = R12 / (att1-1); C1 = sqrt(att1) / ( omega0 * (att1-1) * R12 ); L1 = R12 * R12 * C1; %显示 strR11 = 'R1 = '; set(findobj('tag','textR11'),'string',[strR11,sprintf('%5.5g\',R11)]); strR12 = 'R2 = '; set(findobj('tag','textR12'),'string',[strR12,sprintf('%6.5g\',R12)]); strR13 = 'R3 = '; set(findobj('tag','textR13'),'string',[strR13,sprintf('%6.5g\',R13)]); strC1 = 'C = '; set(findobj('tag','textC1'),'string',[strC1,sprintf('%6.5g\',C1)]); strL1 = 'L = '; set(findobj('tag','textL1'),'string',[strL1,sprintf('%6.5g\',L1)]); strR21 = 'R1 = '; set(findobj('tag','textR21'),'string',strR21); strR22 = 'R2 = '; set(findobj('tag','textR22'),'string',strR22); strR23 = 'R3 = '; set(findobj('tag','textR23'),'string',strR23); strC2 = 'C = '; set(findobj('tag','textC2'),'string',strC2); strL2 = 'L = '; set(findobj('tag','textL2'),'string',strL2);else %计算 R12 = 50; R11 = (att1-1) * R12; R13 = R12 / (att1-1); C1 = sqrt(att1) / ( omega0 * (att1-1) * R12 ); L1 = R12 * R12 * C1; R22 = 50; R21 = (att2-1) * R22; R23 = R22 / (att2-1); C2 = sqrt(att2) / ( omega1 * (att2-1) * R22); L2 = R22 * R22 * C2; %显示 strR11 = 'R1 = '; set(findobj('tag','textR11'),'string',[strR11,sprintf('%6.4g\',R11)]); strR12 = 'R2 = '; set(findobj('tag','textR12'),'string',[strR12,sprintf('%6.4g\',R12)]); strR13 = 'R3 = '; set(findobj('tag','textR13'),'string',[strR13,sprintf('%6.4g\',R13)]); strC1 = 'C = '; set(findobj('tag','textC1'),'string',[strC1,sprintf('%6.4g\',C1)]); strL1 = 'L = '; set(findobj('tag','textL1'),'string',[strL1,sprintf('%6.4g\',L1)]); strR21 = 'R1 = '; set(findobj('tag','textR21'),'string',[strR21,sprintf('%6.4g\',R21)]); strR22 = 'R2 = '; set(findobj('tag','textR22'),'string',[strR22,sprintf('%6.4g\',R22)]); strR23 = 'R3 = '; set(findobj('tag','textR23'),'string',[strR23,sprintf('%6.4g\',R23)]); strC2 = 'C = '; set(findobj('tag','textC2'),'string',[strC2,sprintf('%6.4g\',C2)]); strL2 = 'L = '; set(findobj('tag','textL2'),'string',[strL2,sprintf('%6.4g\',L2)]);endend%测试使用% set('test','string',sprintf('R1 = %d(欧姆)',R1));% sprintf('The array is %dx%d.',2,3) The array is 2x3%测试使用%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function calc_impedance()global eel cf1 att1_db cf2 att2_db xstart xend ystart yend R11 R12 R13 C1 L1 R21 R22 R23 C2 L2 m_add_state %能取到最新的值if m_add_state==1 set(findobj('tag','text_l2r'),'string','invalid but match')else %计算左到右的阻抗 看看是否匹配 ------ 用复数计算 if eel==1 %计算一阶均衡的输入阻抗 omega1 = 2*pi*cf1; wcr1_1 = omega1*C1*R11; %实时角频率--omega1 %替代符号wcr1 = omega * C * R1 Z1_real = R11 / (1+wcr1_1^2); Z1_imag = -(wcr1_1*R11 / (1+wcr1_1^2)); Z1 = complex(Z1_real,Z1_imag); Z3_real = R13; Z3_imag = omega1 * L1; Z3 = complex(Z3_real,Z3_imag); Zin1_fenzi = Z1*Z3 + (Z1+Z3)*R12 + R12^2; Zin1_fenmu = Z1 + Z3 + 2*R12; Zin1 = Zin1_fenzi / Zin1_fenmu; set(findobj('tag','text_l2r'),'string',num2str(Zin1)); else %计算二阶均衡的输入阻抗 应该从后级开始计算 %先计算第二级衰减网络 omega2 = 2*pi*cf2; wcr1_2 = omega2*C2*R21; %实时角频率--omega2 %替代符号wcr1 = omega * C * R1 Z21_real = R21 / (1+wcr1_2^2); Z21_imag = -(wcr1_2*R21 / (1+wcr1_2^2)); Z21 = complex(Z21_real,Z21_imag); Z23_real = R23; Z23_imag = omega2 * L2; Z23 = complex(Z23_real,Z23_imag); Zin2_fenzi = Z21*Z23 + (Z21+Z23)*R22 + R22^2; Zin2_fenmu = Z21 + Z23 + 2*R22; Zin2 = Zin2_fenzi / Zin2_fenmu; %从第二级看过去的输入阻抗 就是第一级衰减网络的负载 Zin2_real = real(Zin2); %由于虚部太小 实际计算结果都是在 e-15 的数量级 忽略掉虚部! 这里有个问题 实部不是50 而是50 + 1.4211e-14 if 1 %实部大概是 50 + 1.4211e-14 略大于50 就是匹配的 所以无条件执行 %计算第一级衰减网络 omega1 = 2*pi*cf1; wcr1_1 = omega1*C1*R11; %实时角频率--omega1 %替代符号wcr1 = omega * C * R1 Z1_real = R11 / (1+wcr1_1^2); Z1_imag = -(wcr1_1*R11 / (1+wcr1_1^2)); Z1 = complex(Z1_real,Z1_imag); Z3_real = R13; Z3_imag = omega1 * L1; Z3 = complex(Z3_real,Z3_imag); Zin1_fenzi = Z1*Z3 + (Z1+Z3)*R12 + R12^2; Zin1_fenmu = Z1 + Z3 + 2*R12; Zin1 = Zin1_fenzi / Zin1_fenmu; set(findobj('tag','text_l2r'),'string',num2str(Zin1)); else set(findobj('tag','text_l2r'),'string','can not matching'); end endend%计算左到右阻抗 看看是否匹配 ------ 用复数计算%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function put_slider_set()% 将数据刷进slider的设置里面 %需要先输入Max值,再输入Min值% 因为M语句是解释性语句,读一句,执行一句,如果先输入Min值,检查时很可能出现错误!% central frequency level 1% maxcf_1_end_string = get(findobj('tag','edit_slider_cf1_end'),'string'); cf_1_end = str2num(cf_1_end_string); set(findobj('Tag','slider_cf1'),'Max',cf_1_end);%将现在输入的初始值放到slider的value属性中 1:先找到值 2:set值于value属性%为什么要缩小1000倍? 因为slider_bar只能处理整数类型,最大值是2^31=2147483647=2.14GHz 太小了value_temp = str2num(get(findobj('Tag','edit_cf_1'),'string'));slider_value = value_temp / 1000;set(findobj('Tag','slider_cf1'),'Value',slider_value);% mincf_1_start_string = get(findobj('tag','edit_slider_cf1_start'),'string'); cf_1_start = str2num(cf_1_start_string); set(findobj('Tag','slider_cf1'),'Min',cf_1_start);% central attenuation level 1% maxatt_1_end_string = get(findobj('tag','edit_slider_att1_end'),'string'); att_1_end = str2num(att_1_end_string); set(findobj('Tag','slider_att1'),'Max',att_1_end);%将现在输入的初始值放到slider的value属性中 1:先找到值 2:set值于value属性set(findobj('Tag','slider_att1'),'Value',str2num(get(findobj('Tag','edit_att_1'),'string')));% minatt_1_start_string = get(findobj('tag','edit_slider_att1_start'),'string'); att_1_start = str2num(att_1_start_string);set(findobj('tag','slider_att1'),'Min',att_1_start);% central frequency level 2% maxcf_2_end_string = get(findobj('tag','edit_slider_cf2_end'),'string'); cf_2_end = str2num(cf_2_end_string); set(findobj('Tag','slider_cf2'),'Max',cf_2_end);%将现在输入的初始值放到slider的value属性中 1:先找到值 2:set值于value属性%为什么要缩小1000倍? 因为slider_bar只能处理整数类型,最大值是2^31=2147483647=2.14GHz 太小了value_temp = str2num(get(findobj('Tag','edit_cf_2'),'string'));slider_value = value_temp / 1000;set(findobj('Tag','slider_cf2'),'Value',slider_value);% mincf_2_start_string = get(findobj('tag','edit_slider_cf2_start'),'string'); cf_2_start = str2num(cf_2_start_string); set(findobj('Tag','slider_cf2'),'Min',cf_2_start);% central attenuation level 2% maxatt_2_end_string = get(findobj('tag','edit_slider_att2_end'),'string'); att_2_end = str2num(att_2_end_string); set(findobj('Tag','slider_att2'),'Max',att_2_end);%将现在输入的初始值放到slider的value属性中 1:先找到值 2:set值于value属性set(findobj('Tag','slider_att2'),'Value',str2num(get(findobj('Tag','edit_att_2'),'string')));% minatt_2_start_string = get(findobj('tag','edit_slider_att2_start'),'string'); att_2_start = str2num(att_2_start_string); set(findobj('Tag','slider_att2'),'Min',att_2_start);% 把初始值放进后面的静态文本里面%注意那个1000倍的关系%单位是kHz set(findobj('tag','slider_cf1_value'),'string',num2str(get(findobj('tag','slider_cf1'),'value')));set(findobj('tag','slider_att1_value'),'string',num2str(get(findobj('tag','slider_att1'),'value')));set(findobj('tag','slider_cf2_value'),'string',num2str(get(findobj('tag','slider_cf2'),'value')));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -