学习策划完全

学习目的

初步构建“计算机学习”的一个基本体系,更为熟练的掌握matlab,并用于3D-GO快速设计模块与超大规模FSS自适应建模模块2个高效插件的开发。

学习重点

Code-CAE - 图1

学习资源

课堂PPT

教学视频

  1. matlab基础培训视频

点击查看【bilibili】

阅读材料

  1. matlab基础视频学习笔记
  2. 人月神话
  3. 计算几何

    学习总计划

    计划利用一个月:

  4. 完成matlab学习笔记的温故,并完成自己学习笔记

  5. 完成《人月神话》与《计算几何》的学习,并形成读书笔记
  6. 完成3D-GO快速设计模块的开发,并形成技术文档和用户手册
  7. 刷12道编程题

    20210523

    计划

    | 任务名称 | 任务量 | 计划完成时间 | 怎么做 | | —- | —- | —- | —- | | 《人月神话》 | 13章~19章 | 5h | 晚回阅读 | | 《matlab学习笔记》 | 1章~3章 | 3h | 晚回/早起学习与整理 | | 编程题 | 3题 | 3h | 早起刷题 |

执行

[20210523~20210523] 学习策划
[20210523~20210523] 人月神话
[20210523~20210523] 编程题
[20210525~20210525] 人月神话
[20210525~20210525] 学习笔记
[20210526~20210526] 人月神话
[20210526~20210526] 编程题
[20210527~20210527] 人月神话
[20210527~20210527] matlab基础
[20210527~20210527] 编程题

结果

matlab学习

  • 编程题1:依据电视寸数及长宽比,求电视长和宽。

题目虽不难,但是需要按照给定的格式进行输出,对于手残的我来说着实费了很大的劲。通过这个题的解决,学习了:1)MATLAB 显示输出数据的三种方式;2)matlab里面如何保留小数特定位数的方法。

  • 编程题2:判断3点是否共线

想到两种方法:1)两边之和是否等于第三边;2)计算相邻边夹角是否为0或180,判断第二种方法代码量应该会少一点。通过这个问题也暴露了:1)计算几何的基本数学知识比较生疏;2)逻辑运算的使用生疏;3)向量的相关运算生疏。

  • 编程题3:求向量夹角

题目比较简单,直接利用求夹角公式进行计算,即可。

读书

完成《人月神话》的阅读,书中的经典摘抄与感悟已记录于“时光序”,读书笔记尽快整理。

笔记学习

为进行系统学习

改进

本周完成了3到编程练习题以及《人月神话》的阅读,但是3D-GO模块的开发却并没有推进和matlab基础笔记的学习并没有推进,其中模块开发主要因为出差和项目比较忙的原因,原本计划晚上依托同事的帮助加速开发也一直没有抽出时间,这与自己过于依赖外来帮助和畏难情绪较重有关。下周需要克制畏难情绪,花大量的时间,静下心来力图取得一些明显的进展,同时依据《人月神话》中倡导的原则,注意程序的注释和自文档建设,项目编程进度的推进是编程能力精进最重要的手段。

20210530

计划

任务名称 任务量 计划完成时间 怎么做
3D-GO 功能实现
注释完善
6h 加班协同开发,晚回+早起优化
《人月神话》 笔记整理 1h 早起整理
《matlab学习笔记》 1章~2章 2h 晚回/早起学习与整理
编程题 3题 3h 早起刷题

执行

[20210523~20210523] 学习策划
[20210523~20210523] 人月神话
[20210523~20210523] 编程题
[20210525~20210525] 学习笔记
[20210531~20210531] 人月神话
[20210531~20210531] 项目开发
[20210531~20210531] 编程题

结果

读书

完成《人月神话》阅读以及笔记整理

编程

时间分配少,同时也因为一道题卡住了,未完成计划要求。

项目推进

笔记学习

精力较为分散,无法集中时间开展编程技能方面的学习。

20210614(结构化编程)

笔记学习

完成第2章和第3章的学习,对结构化编程以及数据类型进行回顾。

20210722(计算机基础)

点击查看【bilibili】
完成前5个视频学习

20210822(测试数据提取与后处理)

完成了方向图测试数据的批处理程序
背景为:有个项目的方向图数据的处理,最主要的问题为测试数据过多(每个产品有4个天线,每个天线有2个测试平面,每个平面又有3个频点,一次测试9套产品,总共数据有200多组),然后还要对测试数据后处理,计算得到方向图,9套产品测试数据全部处理,总共花费了7-8小时,极其耽误时间。通过matlab代码,是的总处理时间缩短到10min~20min。
这个算法的实质就是数据的输入/输出(I/O),主要涉及两个点:1)文本与数据混合的.csv文件的批量读取;2).xlsx文件的写操作等。
第一个主要利用textscan函数来实现,函数的具体使用场景和使用方法见:
第二个使用xlswrite函数和excle操作语句来实现,具体可见:
代码如下:

  1. clc;clear all;close all;
  2. %%
  3. %读取该目录下的所有.csv文件
  4. Gain0_1=[40 40 40 50 50 50];%定标天线不同频点增益(由低到高)待测天线增益(dB)=待测天线功率(dB)-定标天线功率(dB)+定标天线增益(dB
  5. path = 'C:\Users\em.liu\Desktop\测试(公开)\009\';%文件夹路径
  6. xlsx_name='009test.xlsx';%汇总结果的表格名称
  7. %PS:'*.csv'和dir用法
  8. namelist = dir([path,'*.csv']);
  9. l = length(namelist);
  10. P = cell(1,l);%定义一个细胞数组,用于存放所有txt文件
  11. namelist(1).name;%这里获得的只是该路径下的文件名,如1.txt是相对路径
  12. for i = 1:l
  13. filename{i} = [path,namelist(i).name];%通过字符串拼接获得的就是绝对路径了
  14. fid=fopen(filename{i});
  15. if namelist(i).name(6)=='1'
  16. Gain0=Gain0_1(1:3);
  17. else
  18. Gain0=Gain0_1(4:6);
  19. end
  20. % PS:'%*[^\n]'和textscan的用法
  21. f1=textscan(fid,'%f%f%f%f%f%*[^\n]','Delimiter',',','headerlines',12);%读取第1个频点的数据('%*[^\n]'和textscan的用法)
  22. f1=cell2mat(f1);%将元胞数组变换成矩阵形式
  23. Gain_f1=[f1(:,2),f1(:,4)+Gain0(1)];%提取角度和增益幅度数据
  24. f2=textscan(fid,'%f%f%f%f%f%*[^\n]','Delimiter',',','headerlines',2);%读取第2个频点的数据
  25. f2=cell2mat(f2);%将元胞数组变换成矩阵形式
  26. Gain_f2=[f2(:,2),f2(:,4)+Gain0(2)];%提取角度和增益幅度数据
  27. f3=textscan(fid,'%f%f%f%f%f%*[^\n]','Delimiter',',','headerlines',2);%读取第3个频点的数据
  28. f3=cell2mat(f3);%将元胞数组变换成矩阵形式
  29. Gain_f3=[f3(:,2),f3(:,4)+Gain0(3)];%提取角度和增益幅度数据
  30. xlswrite([path,xlsx_name],Gain_f1,i,'A2');
  31. xlswrite([path,xlsx_name],Gain_f2,i,'D2');
  32. xlswrite([path,xlsx_name],Gain_f3,i,'G2');
  33. %%
  34. %excle中新增sheet,并重命名
  35. e = actxserver('Excel.Application'); % 打开excle应用
  36. ewb = e.Workbooks.Open([path,xlsx_name]); % 打开相应excle文件
  37. ewb.Worksheets.Item(i).Name = namelist(i).name(5:8); % # 重命名第i个sheet
  38. ewb.Save; % # 保存
  39. ewb.Close(false);
  40. end

20211020(计算机系统)

搭建一个计算机系统的知识体系,同时深入数据结构与算法,同时能解决一个棘手的项目问题。

计算机的知识体系十分庞大,想要仅仅利用两个月的时间就完成整个计算机领域的知识体系的搭建是十分天真的。

我们必须要有侧重点的先插个旗,同时要将理论于实践相结合,在理论知识学习和知识体系搭建的同时,完成项目开发。

CAE设计的过程是否需要计算机的介入?最先进的设计理念和方法如何融入CAE的设计?仅仅依赖于设计人员的手动调参或CAE软件的低级扫参能否继续支持CAE的卓越设计?

所以我们要深入学习计算机知识,了解并熟练掌握最前沿的技术,软件与硬件的结合会怎样深刻的改变这个行业,可以拭目以待。

拟选择与CAE设计最为相关的《数据结构与算法》为起点,开始系统学习和整理,同时解决任意形状电磁结构的快速自动建模设计的项目。

学习资源

.arch深入理解计算机系统(中文清晰).pdf
点击查看【bilibili】
[20211021~20211021] 4节视频《计算机速成课》
[20211021~20211021] 计算机是如何跑起来的20p
[20211031~20211031] 至此,完成《计算机是怎样跑起来》一书的阅读
从10月21日开始,至10月31日结束,在观看《计算机速成课》教学视频的同时,完成了《计算机是怎样跑起来》一书的阅读,该书为科普读物,系统简要的阐述了有关计算硬件和软件的一些基础知识,第一遍阅读,有些地方理解还不到位,全书的大致结构为:
Code-CAE - 图2
目前对于计算机技术组成的各个分技术以及它们之间的联系还不是很清楚,体系还不够细化,后续需要通过阅读和视频学习,进一步深化理解,细化基础理论体系。

202111007(计算机系统)

目前已经阅读了矢泽久雄的第二本书《程序是怎么跑起来》一半有余,以及《计算机速成课》p34的学习,学习过程中涉及到概念有:

  • CPU的组成与工作原理
  • 二进制
  • 存储器(内存/磁盘)
  • 压缩原理与方法
  • 运行环境(操作系统+硬件)

下周计划完成《程序是怎么跑起来的》与《计算机速成课》的学习,细化知识体系,并进入算法+数据结构的学习(书籍+视频)。
image.png

20211114(计算机系统)

目前完成了《计算机是怎么跑起来的》以及《程序是怎么跑起来》两本教材以及视频《计算机速成课》的学习。
Code-CAE - 图4
Collage_20211212_225159.jpgCollage_20211212_225429.jpgCollage_20211212_225502.jpg

20211121(算法与数据结构)

目前,快要完成《算法图解》一书的阅读,书中对于各种算法的介绍浅显易懂,但是由于基础薄弱,有关狄克斯特拉算法还是不太理解,这边要尽快完成《图解算法》和《大话数据结构》两本书的阅读,同时要看计算机系统更加深入的学习视频《深入理解计算机系统》(配合教材),并利用3D-GO算法作为项目联系动手能力。

以下为GO-3D程序的主程序1.0版本,我们希望通过近一段实践的理论学习以及动手实践,完成该模块,实现三维罩体的快速自动化建模。
优化参考:

  1. clear;clc;close all;
  2. freq=35;%频率(GHz
  3. lambda=300/freq;%波长(mm
  4. Er=3.1;%介质介电常数
  5. %%
  6. %**********创建泰勒分布的天线口面***************
  7. R=20;%口径
  8. dR=2;%采样点间隔
  9. [X,Y]=meshgrid(-R:dR:R,-R:dR:R);
  10. flg=find(X.^2+Y.^2<=R^2); %取圆口径分布
  11. % figure(1);.
  12. % scatter(X(flg),Y(flg),'.')
  13. nbar=4; %有nbar个等副瓣
  14. SLL=-35; %副瓣电平
  15. Ix=taylorwin(length(-R:dR:R),nbar,SLL); %x方向泰勒分布
  16. Iy=taylorwin(length(-R:dR:R),nbar,SLL); %y方向泰勒分布
  17. Ixy=Ix*Iy.';
  18. Pxy=Ixy.^2;
  19. % figure(2);
  20. % scatter3(X(flg),Y(flg),Pxy(flg),'.')
  21. %%
  22. %读取网格
  23. [geomesh]=read_meshfile_nas();
  24. geomesh.inc_pos=1000*geomesh.inc_pos;
  25. geomesh.Nodes=1000.*geomesh.Nodes; %罩体尺寸单位设置
  26. geomesh.norm_outter=-geomesh.norm_outter; %面元外法向量
  27. figure(3);%外型面绘图
  28. scatter3(geomesh.inc_pos(1,:),geomesh.inc_pos(2,:),geomesh.inc_pos(3,:),'+');
  29. %%
  30. %*************天线口面发出的射线对罩体三角元进行遍历*******************
  31. theta1=zeros(1,length(geomesh.Triangles));%划分空间,存储不同面元处的平均入射角
  32. thick=zeros(1,length(geomesh.Triangles)); %划分空间,存储不同面元处的壁厚
  33. th_sum=zeros(1,length(geomesh.Triangles));%划分空间,记录每个三角面元的总入射角(按功率加权)
  34. p_sum=zeros(1,length(geomesh.Triangles)); %划分空间,记录每个三角面元的总入射功率
  35. %大外循环为天线波束指向的扫描
  36. for theta=0:5:10
  37. for phi=0:90:360
  38. Rot_y=[cos(theta*pi/180) 0 sin(theta*pi/180);0 1 0;sin(theta*pi/180) 0 cos(theta*pi/180)];%绕y轴旋转theta的旋转矩阵
  39. Rot_z=[cos(phi*pi/180) -sin(phi*pi/180) 0;sin(phi*pi/180) cos(phi*pi/180) 0; 0 0 1];%绕z轴旋转phi的旋转矩阵
  40. Inc_Tri = zeros(21,21); %临时存放与相应管线相交的三角面元编号
  41. Inc_theta =zeros(21,21);%临时存放与相应管线相交面元的入射角
  42. % 外循环为点源阵列的遍历
  43. for i=1:1:length(Ix)
  44. for j=1:1:length(Iy)
  45. r_source=[Ix(i),Iy(j),0]*Rot_y*Rot_z;%天线源转动
  46. k_source=[0,0,1]*Rot_y*Rot_z;%天线源发出的管线转动
  47. % 内循环为网格面元的遍历
  48. for m=1:1:length(geomesh.Triangles)
  49. % 判断当天线照射方向为k_source时,源点r_source的射线与三角面元是否有交点
  50. flg=isinner(r_source,k_source,(geomesh.Nodes(:,geomesh.Triangles(1,m)))',(geomesh.Nodes(:,geomesh.Triangles(2,m)))',(geomesh.Nodes(:,geomesh.Triangles(3,m)))',(geomesh.norm_outter(:,m))');
  51. if flg == 1
  52. Inc_Tri(i,j)=m; %计算
  53. Inc_theta(i,j) = acosd(dot(k_source,geomesh.norm_outter(:,m))); %入射角为管线与面元法向的夹角
  54. p_sum(m)=p_sum(m)+Pxy(i,j);%当管线与三角面元相交时,功率累加
  55. th_sum(m)=th_sum(m)+ Pxy(i,j)*Inc_theta(i,j);%当管线与三角面元相交时,入射角累加(加权)
  56. break;%每条管线只会与一个面元相交,一旦找到相交面元,跳出面元搜索
  57. end
  58. end
  59. end
  60. end
  61. end
  62. end
  63. %%
  64. %计算平均入射角并生成内型面散点geomesh
  65. inner_pos=zeros(3,m);%划分空间,存放内型面数据
  66. for m=1:length(geomesh.Triangles)
  67. if p_sum(m)~=0 %入射功率非零,利用公式计算壁厚
  68. theta1(m)=th_sum(m)/p_sum(m); %计算入射角的加权平均
  69. end
  70. thick(m)=1*lambda/(2*sqrt(Er-(sin(theta1(m)))^2)); %依据平均入射角,按照公式计算最优壁厚
  71. inner_pos(:,m)=geomesh.inc_pos(:,m)-thick(m).*geomesh.norm_outter(:,m);%平移生成内型面散点
  72. end
  73. figure(4);%内型面绘图
  74. scatter3(inner_pos(1,:),inner_pos(2,:),inner_pos(3,:),'o');
  75. %优化方向:
  76. %1)目前射线和罩体有交点,但交点数太少,不符合实际情况;
  77. %2)架构还很混乱,循环太多,速度太慢,需要进行去耦和模块化;
  78. %3)网格读取函数需要设置变量,可读取任意网格数据;
  79. %4)添加可视化的功能,将管线照射到的面元可视化,2种图:1)颜色与照射密度有关;2)颜色与入射角有关;
  80. %思路:
  81. %使用连续分布的天线管束与天线罩求交,通过计算面元中点到管束中线的距离,判断面元是否被照射到,这样作的好处是比管线拥有更高的精度,同时速度减少了循环搜索的层级数,速度大幅提高。

通过将离散的源分布编程连续的源分布,大幅减少了循环的层数,使得运算时间大幅减少(降低3个数量级),得到了GO_3D的2.0版本。

  1. %*********************************软件需求********************************
  2. %3)网格读取函数需要设置变量,可读取任意网格数据;
  3. %4)具备可视化的功能,将管束照射到的面元可视化,2种图:1)颜色与照射密度有关;2)颜色与入射角有关;
  4. %6)具备异形夹层结构天线罩的快速建模;
  5. %***********************************存在问题******************************
  6. %2)架构还很混乱,循环太多,速度太慢,需要进行去耦和模块化;
  7. %*************************************************************************
  8. clear;clc;close all;
  9. %%
  10. %*************求解设置**************
  11. freq=35;%频率(GHz
  12. lambda=300/freq;%波长(mm
  13. Er=3.1;%介质介电常数
  14. R=20;%天线口径
  15. a=0.1;%天线孔径面边缘照射系数
  16. %%
  17. %读取网格
  18. [geomesh]=read_meshfile_nas(); %读取网格信息(triangle:每个三角面元的节点编号;...
  19. ...nodes:每个节点的坐标;tri_area:三角面元的面积;
  20. ...inc_pos:三角面元的中心点坐标;normal_outter:
  21. ...三角面元法向量坐标)
  22. geomesh.inc_pos=1000*geomesh.inc_pos; %三角面元中心点坐标等比例放大
  23. geomesh.Nodes=1000.*geomesh.Nodes; %三角面元节点尺寸等比列放大
  24. Reverse=[1;1;1]*geomesh.norm_outter(3,:)./abs(geomesh.norm_outter(3,:));%定义网格法向变换矩阵
  25. geomesh.norm_outter=geomesh.norm_outter.*Reverse; %将三角面元法向量统一为外法向量
  26. % figure(3);%外型面绘图
  27. % scatter3(geomesh.inc_pos(1,:),geomesh.inc_pos(2,:),geomesh.inc_pos(3,:),'+');
  28. %%
  29. %*************天线口面发出的管束对罩体三角元进行遍历*******************
  30. theta1=NaN*ones(1,length(geomesh.Triangles));%划分空间,存储不同面元处的平均入射角
  31. thick=zeros(1,length(geomesh.Triangles)); %划分空间,存储不同面元处的壁厚
  32. th_sum=zeros(1,length(geomesh.Triangles));%划分空间,记录每个三角面元的总入射角(按功率加权)
  33. p_sum=zeros(1,length(geomesh.Triangles)); %划分空间,记录每个三角面元的总入射功率
  34. %外循环为天线波束指向的扫描
  35. th_max=zeros(1,533);%检查管线与面元法向量夹角是否满足要求
  36. t=0;
  37. for theta=0:1:40
  38. for phi=0:30:360
  39. Rot_y=[cos(theta*pi/180) 0 sin(theta*pi/180);0 1 0;sin(theta*pi/180) 0 cos(theta*pi/180)];%绕y轴旋转theta的旋转矩阵
  40. Rot_z=[cos(phi*pi/180) -sin(phi*pi/180) 0;sin(phi*pi/180) cos(phi*pi/180) 0; 0 0 1];%绕z轴旋转phi的旋转矩阵
  41. P=zeros(1,length(geomesh.Triangles));%划分空间,临时存放每个三角面元的在不同扫描角下的功率
  42. inc_theta=zeros(1,length(geomesh.Triangles));%划分空间,临时存放每个三角面元不同扫描角下的入射角下(按功率加权)
  43. k_source=[0,0,1]*Rot_y*Rot_z;%天线源发出的管线转动
  44. %内循环为三角面元的遍历
  45. x1=[0 0 0]; %取管束中线上的两个点x1,x2
  46. x2=k_source;
  47. for m=1:1:length(geomesh.Triangles)
  48. x0=[geomesh.inc_pos(1,m) geomesh.inc_pos(2,m) geomesh.inc_pos(3,m)];%取三角面元上中点为线外点
  49. d=norm(cross((x0-x1),(x0-x2)))/norm(x2-x1);
  50. if d<=R&&dot((x0-x1),(x2-x1))>0
  51. P(m)=(a+(1-a)*(sin(pi/2*(1-d/R)))^2)^2;
  52. inc_theta(m) = acosd(dot(k_source,geomesh.norm_outter(:,m)));
  53. end
  54. end
  55. % if max(inc_theta)>=90
  56. % [ii,jj]=[theta,phi];
  57. % end
  58. p_sum=p_sum+P;%不同扫描角下的三角面元照射功率累加
  59. th_sum=th_sum+ P.*inc_theta;%不同扫描角下的三角面元入射角累加(加权)
  60. end
  61. end
  62. [thh_max,p]=max(th_max);
  63. %%
  64. %计算平均入射角并生成内型面散点geomesh
  65. inner_pos=zeros(3,m);%划分空间,存放内型面数据
  66. for m=1:length(geomesh.Triangles)
  67. if p_sum(m)~=0 %入射功率非零,利用公式计算壁厚
  68. theta1(m)=th_sum(m)/p_sum(m); %计算入射角的加权平均
  69. end
  70. thick(m)=1*lambda/(2*sqrt(Er-(sin(theta1(m)*pi/180))^2)); %依据平均入射角,按照公式计算最优壁厚
  71. inner_pos(:,m)=geomesh.inc_pos(:,m)-thick(m).*geomesh.norm_outter(:,m);%平移生成内型面散点
  72. end
  73. meshplot(geomesh.Triangles,geomesh.Nodes,theta1);
  74. meshplot(geomesh.Triangles,geomesh.Nodes,p_sum);
  75. meshplot(geomesh.Triangles,geomesh.Nodes,thick);
  76. xlabel('x');
  77. ylabel('y');
  78. zlabel('z');
  79. figure(4);%内型面绘图
  80. scatter3(inner_pos(1,:),inner_pos(2,:),inner_pos(3,:),'o');

20211212(计算机组成原理)

最近完成了《图解算法》的学习,讲解的非常通俗易懂,但是对于:1)广度优先算法;2)狄克斯特拉算法;3)贪婪算法;4)动态规划算法四种算法的实现机理还是不太理解,需要后续深入阅读。

然后开始阅读CSAPP以及《大话数据结构》这两本书,本想配合CSAPP作者的课堂视频进行学习,终究因为语言的问题而放弃。而后转向王道考研的视频课程《计算机组成原理》,发现讲的特别好,通俗易懂。目前已经学习到了课程的第二大部分——二进制,该部分内容较多,是现代计算机软件理论的基础,其构造了一个“二进制”的世界,并介绍了其与“十进制”世界的联系,通过原码、反码、补码、移码等的介绍,将四则运算转化为加法运算,降低了硬件成本。
Code-CAE - 图8

计算机组成概述

Collage_20211212_222043.jpg

二进制

Code-CAE - 图10

  • 定点数与浮点数的区别
  • 原码、反码、补码是什么,有什么用,运算规则
  • 浮点数的表示、运算法则
  • 电路如何实现加法运算

    20211225(理清思路)

    计算机系统学习了2月有余,读完了三本书书,看完1一个系统教学视频,脑海里积累的东西太多,有点混乱,影响了后续学习开展,需要及时理清思路,有的放矢。
    Code-CAE - 图11
    这个结构是按照408计算机考研所确定的范围,其实应该还包括:数据库、汇编、设计模式,这些话题与上述知识结构的关系还需要进一步理清。

学习的深度应该是:1)针对计算机系统的各个方面进行科普式的学习,通过一些简单易懂的书籍和视频来进行学习,学习强度★;2)针对计算机组成原理,其为计算机系统的硬件部分,需要更深入的学习,更加全面、深刻的理解程序的硬件实现的机理,还需要进一步的通过一些专业培训视频和更加深刻的书记进行学习,学习强度★★;3)针对数据结构与算法,这是日常编程所依靠的最直接基础,直接决定着后续编程能力提升的高度,需要更为深刻的学习,还需要补充一些学术文献的针对性阅读,学习强度★★★。

20211228(计算机组成原理)

利用两天的时间重新将《计算机是怎么跑起来的》和《程序是怎么跑起来》两本书的硬件部分进行了重温,经过近两个月的一轮学习加上仔细重温,对于“计算机组成原理”这部分的知识有了更为透彻的理解,知识体系也日渐明晰。

所谓计算机组成原理,主要介绍了所编写程序的硬件实现,主要包括:二进制,CPU,内存,I/O

20220109(计算机组成原理)

花了近一个月的时间,终于完成了王道考研的培训视频《计算机组成原理》(共67P)的学习,全篇共分为7章:1)计算机组成概览;2)数据的表示与运算;3)存储系统;4)指令系统;5)CPU;6)总线;7)I/O。

第一章 计算机组成概览

第一章系统的介绍了计算机的组成,其中信息世界的组成如图所示:
image.png
具体到每个计算机,其组成为:硬件+软件,其中“计算机组成原理”作为我们构建计算机系统的第一站,将主要介绍程序实现的硬件基础,其构成主要为:CPU+存储器+总线+I/O设备。
image.png
第一章.pdf

第二章 数据表示与运算

第二章.pdf
数据是如何在计算机中表示的,运算器又是如何实现数据的算术和逻辑运算的?第二章将给出答案。

第二章介绍的重点为二进制,其为信息世界的最底层基础,就正如十进制之于数学大厦。该章的内容分为三部分:1)定点数的表示与运算;2)浮点数的表示与运算;3)电路实现。将介绍:什么是定点数,什么是浮点数 ,定点数中的原码、反码以及补码又是什么;他们的作用是是什么;它们的运算性质有哪些,以及相关运算的如何通过电路实现。

  • 定点数与浮点数的区别
  • 原码、反码、补码是什么,有什么用,运算规则
  • 浮点数的表示、运算法则
  • 电路如何实现加法运算

Code-CAE - 图14

第三章 存储系统

第三章.pdf
存储系统的层次结构:
image.png
将着重介绍主存、闪存、寄存器等几种存储设备以及它们的运行方式。
第四章.pdf

第五章 CPU

功能和基本结构

总概
第五章.pdf
image.png
现代计算机结构:
image.png
其中CPU由运算器和控制器组成,其中运算器的作用:实现算术运算(加、减、乘、除)、逻辑运算(与或非),即数据加工。
控制器:取指令、分析指令、执行指令、中断处理。
image.pngimage.png
image.png
计算机的工作过程:
image.png
运算器
两种结构形式:1)专用数据通路方式(性能高,结构复杂,成本高);2)内部单总线方式(性能低,结构简单,成本低)
image.png image.png
单总线结构的CPU基本结构形式
image.png
归纳一下:
image.png
抽象一下:
image.png
image.png

指令执行过程

image.png
指令周期:每个指令的任务不同,指令周期也不同
指令周期的数据流:取址周期,间址周期,执行周期,中断程序
指令执行方案:1)单指令周期(所有指令都选用相同的执行时间来完成);2)多指令周期(不同类型的指令选用不同的执行步骤来完成);3)流水线(尽量让多条指令同时运行,但各自处在不同的执行步骤中)。
image.png image.png
汇总一下:
image.png

数据通路的功能和基本结构

数据通路:数据在功能部件之间传递的路径。
image.png
数据通路的基本结构:1)CPU内部的单总线方式;2)CPU内部的多总线方式;3)专用数据通路方式。
image.png
image.png image.png

控制器的功能和工作原理

控制器的设计:1)硬布线(速度快,电路复杂,成本高,适用于RISC);2)微程序(电路简单,成本低,速度相对较慢)。
image.png

微指令的编码方式

第六章.pdf
第七章.pdf

20220730(写工具-方向图分析程序)

针对批量的方向图(宽波束)数据,需要对方向图一定角度范围内的平均值,极大值等进行分析和提取。

  1. clc;
  2. clear all;
  3. path='C:\Users\em.liu\Desktop\测试数据(公开)\汇总\'; %设置文件夹路径
  4. Filesname=dir(strcat(path,'*.xlsx'));%找到当前文件下的所有.xlsx后缀文件
  5. Length=length(Filesname); %计算文件夹里xls文档的个数
  6. name_location=1; %记录产品名称存放位置
  7. theta_scale=[-8,4]; %视场角范围
  8. gain_line=6;
  9. th_la=181+theta_scale*2; %视场角起始/终点位置行号
  10. for i=1:Length %批量读取文件的内容并保存
  11. file_name=Filesname(i).name;
  12. [status, sheets]=xlsfinfo(file_name);
  13. gain_avg=zeros(length(sheets),3);
  14. gain_max=zeros(length(sheets),3);
  15. gain_min=zeros(length(sheets),3);
  16. gain_over=zeros(length(sheets),3);
  17. for j=1:length(sheets) %批量读取每个sheets的内容
  18. xls_data=xlsread(strcat(path,Filesname(i).name),j);
  19. [m,n]=size(xls_data);
  20. %求每个频点视场角范围内的平均增益
  21. eval(['gain_avg(',num2str(j),',',num2str(1),')=',num2str(mean(xls_data(th_la(1):th_la(2),2)))]);
  22. eval(['gain_avg(',num2str(j),',',num2str(2),')=',num2str(mean(xls_data(th_la(1):th_la(2),5)))]);
  23. eval(['gain_avg(',num2str(j),',',num2str(3),')=',num2str(mean(xls_data(th_la(1):th_la(2),8)))]);
  24. %求每个频点视场角范围内的最大增益
  25. eval(['gain_max(',num2str(j),',',num2str(1),')=',num2str(max(xls_data(th_la(1):th_la(2),2)))]);
  26. eval(['gain_max(',num2str(j),',',num2str(2),')=',num2str(max(xls_data(th_la(1):th_la(2),5)))]);
  27. eval(['gain_max(',num2str(j),',',num2str(3),')=',num2str(max(xls_data(th_la(1):th_la(2),8)))]);
  28. %求每个频点视场角范围内的最小值
  29. eval(['gain_min(',num2str(j),',',num2str(1),')=',num2str(min(xls_data(th_la(1):th_la(2),2)))]);
  30. eval(['gain_min(',num2str(j),',',num2str(2),')=',num2str(min(xls_data(th_la(1):th_la(2),5)))]);
  31. eval(['gain_min(',num2str(j),',',num2str(3),')=',num2str(min(xls_data(th_la(1):th_la(2),8)))]);
  32. %求每个频点视场角范围阈值以上角度占比
  33. gain_t=[xls_data(th_la(1):th_la(2),2),xls_data(th_la(1):th_la(2),5),xls_data(th_la(1):th_la(2),8)];
  34. g1=(gain_t-gain_line)./abs(gain_t-gain_line);
  35. g2=g1/2+abs(g1)/2;
  36. g3=sum(g2)/(th_la(2)-th_la(1)+1);
  37. eval(['gain_over(',num2str(j),',',num2str(1),')=',num2str(g3(1))]);
  38. eval(['gain_over(',num2str(j),',',num2str(2),')=',num2str(g3(2))]);
  39. eval(['gain_over(',num2str(j),',',num2str(3),')=',num2str(g3(3))]);
  40. end
  41. [filepath,name,suffix]=fileparts([path,Filesname(i).name]);
  42. xlswrite(strcat(path,'汇总2.xlsx'),{name},'方向图',['B',num2str(name_location)]); %将产品名称录入表格
  43. %将频率信息录入表格
  44. xlswrite(strcat(path,'汇总2.xlsx'),{'f-','f0','f+',' ','f-','f0','f+',' ','f-','f0','f+',' ','f-','f0','f+'},'方向图',['B',num2str(name_location+1)]);
  45. %将方向图名称录入表格
  46. xlswrite(strcat(path,'汇总2.xlsx'),sheets','方向图',['A',num2str(name_location+2)]);
  47. %将平均增益数据如路表格
  48. xlswrite(strcat(path,'汇总2.xlsx'),gain_avg,'方向图',['B',num2str(name_location+2)]);
  49. %将最大增益数据如路表格
  50. xlswrite(strcat(path,'汇总2.xlsx'),gain_max,'方向图',['F',num2str(name_location+2)]);
  51. %将最小增益数据如路表格
  52. xlswrite(strcat(path,'汇总2.xlsx'),gain_min,'方向图',['J',num2str(name_location+2)]);
  53. %将阈值以上增益占比数据如路表格
  54. xlswrite(strcat(path,'汇总2.xlsx'),gain_over,'方向图',['N',num2str(name_location+2)]);
  55. name_location=name_location+length(sheets)+3; %产品名称存放位置移置下一个文件名位置
  56. end