- 博客(247)
- 收藏
- 关注
原创 射频测试中对功放的测试
将 PA 输入端连接到 IQVIEW 的 VSG 端口,控制 VSG 发送 11b 1M 调制信号,功率为前面测试到的 11b 1M 的最大功率值。PA 的输出端连接频谱仪,在频谱仪输入端连接至少 10dB 衰减器,设计 RBW=VBW=1MHz,设置频谱为 11b 1M 信号中心频谱的 2 倍和 3 倍频,记录功率大小2。使用 IQVIEW 或 IQXEL 完成。设置 IQ 仪器 VSG 发送 11b 1Mbps 调制信号,起始功率为 - 20dBm,打开 VSA 窗口,设置频谱掩膜测试图形。
2024-12-13 20:37:08
838
原创 射频组件测试的内容
测试射频组件在电磁环境中的兼容性,包括对外部电磁干扰的抗扰度以及自身的电磁发射是否符合相关标准,确保其在复杂的电磁环境中能正常工作且不干扰其他设备。:指在射频组件工作过程中,除了有用信号外,在其他频率上产生的不必要的发射信号,这些杂散信号可能会对其他通信系统产生干扰。:通过长时间的连续工作或加速寿命试验,评估射频组件的使用寿命和可靠性,检测其在长期使用过程中是否会出现性能下降或故障。:衡量射频组件在发射有用信号时,对相邻信道的泄漏功率大小,通常用 dB 表示。射频组件测试一般都测哪些内容。
2024-12-13 20:22:41
788
原创 射频组件的一些性能指标
指在射频组件工作过程中,除了有用信号外,在其他频率上产生的不必要的发射信号,这些杂散信号可能会对其他通信系统产生干扰。:衡量射频组件在发射有用信号时,对相邻信道的泄漏功率大小,通常用 dB 表示。
2024-12-13 20:18:58
299
原创 射频电源CEX功能
射频模块各部分之间的CEX 射频信号,可以将两个或两个以上的电源锁定输出到同一个负载。将电源锁定在一起,可使锁定的电源以相同的频率运行,并使其输出保持固定的相位关系。电弧同步可与一个系统中的所有电源相匹配,从而使得所有部件对电弧作出反应,即使只有一个部件感测到了电弧。下图显示了在没有使用CEX时会出现的阴极之间的串扰,并产生波形的电位差。使用T 型接头将主电源或公共波形发生器的CEX 输出接头,与至多三个从电源的CEX 输。注:连接装置所用电缆的长度会影响到射频电源之间的相位关系。使用规定的CEX 互连。
2024-07-22 13:01:32
916
原创 均匀无耗传输线的工作状态:行波,驻波,行驻波
对于均匀无耗传输线,终端接不同负载时的三种工作状态,主要区别在于入射波与。当电压开始下降时,电流才开始上升,所以电压超前,所以阻抗呈感性。电容和电感的电抗符号相反,所以电容和电感串联时,总电抗抵消为。电容和电感并联时,总电抗为∞。负载阻抗和特性阻抗是相等的。行驻波状态拍出来,排除了。
2024-07-21 18:30:27
2598
原创 传输线的传输功率,效率和损耗
实际上,入射波功率、反射波功率和传输功率可直接由下式计算。的实部为0,虚部不一定为0,但计算功率需要的是实部。电压反射系数和电流反射系数,值相等,符号正好相反。上的前向电压(从电源到负载)为。设传输线均匀,且传播常数。,则传输线上的反射系数为。,则传输线上的反射系数为。设负载处的反射系数为。设负载处的反射系数为。
2024-07-20 15:16:39
1162
原创 散射矩阵的一些知识
均匀无耗传输线上任一点z处的电压和电流可以表示为U+和U-可能为复数,Zc为实数,6.74可以推出将电压和电流对Zc归一化,可得记分别为归一化入射波和归一化反射波,可得记可得进一步可得传输线上任意一点的传输功率为 :若以各端口参考面上的归一化入射波来表示归一化反射波,则有用矩阵表示为:简写为:
2024-07-18 21:59:31
424
原创 分贝 回波损耗和插入损耗
工程上,功率值常用分贝来表示,这需要选择一个功率单位作为参考,常用的。回波损耗定义为入射波功率与反射波功率之比,通常以分贝来表示,即。插入损耗定义为入射波功率与传输功率之比,以分贝来表示为。参考《微波技术与天线》西电,20页。作为参考,则分贝表示为。作为参考,则分贝表示为。
2024-07-18 17:53:23
423
原创 Smith圆图和阻抗匹配
对负载串联一个电容,再并联一个电容,经过一番计算,发现两个电容和负载串并联之后,总阻抗变成了50Ω。还有一类等反射系数圆,没有在圆图上画出。等反射系数,也就意味着等驻波比。电抗圆,上面为感抗,下面为容抗。
2024-07-18 17:30:35
969
原创 电容的容抗和电感的感抗
可以看到电容器两极板之间的电压和极板电荷Q同相,电流是电荷对时间求导,每求导一次,就会乘以一次 jω 所以电流的相位将超前π/2。对于电感来说,电流对时间求导得到电压,所以电压超前π/2。设电容器极板上的电荷为Q,则有。线圈内部产生的自感电动势为。
2024-07-18 17:10:29
308
原创 《白话C++》第10章 Page136 常用容器 10.6.5 std::set和std::multiset (未完待续)
这很好理解,因为一个元素要插在sets(复数,表示set和multiset,下同)中的哪个位置,这是调用者控制不了的。回忆vector,list等容器,它们的insert都还有一个“pos”的入参,用于只是新元素插在哪个位置上,前面使用的sets的insert函数没有这个指示。前面看到multiset的insert操作,返回插入的位置(迭代器),set不允许插入比较结果相同的元素,调用insert就有可能失败,set如果插入新元素失败,那么返回中的“second”值为false.
2024-03-04 01:22:48
410
原创 《白话C++》第10章 Page133 常用容器 10.6.5 std::set和std::multiset
vector,deque,list 这类容器内部的元素的(逻辑)存储次序, 由各元素插入选择的位置共同决定,调用一个push_back()插入新元素,新元素就肯定是在容器的尾部,除非事后我们调用sort操作。如果想让学生从高排到低,粗暴的做法是认为地将 Student 中的 “<” 操作符返回 “反逻辑” ,符号是“小于号”,但比较结果是 “大于” 的判断。不行,sets不会聪明到你写一个大于比较符重载,它就自动在内部改用大于判断,我们还是需要写一个判断式,作为第二个模板参数传入。
2024-03-03 22:58:21
435
原创 《白话C++》第10章 Page126 常用容器 10.6.4 std::list
因为,采用额外的指针维护前后关系,所以列表节点的内存完全不需要连续,这就让节点的插入,删除,甚至链表的合并操作,变得简单。要合并两个vector,需要在第一个vector开辟一大块连续内存,而合并两个列表,只需要让前一列表最后一个节点的“下一节点指针”,指向第二个列表的首指针,再让后者的“前一节点指针”,指向前者即可。另外一点,list胜出的是:vector和deque由于内存是连续的,当变化之后,容易造成所有数据移位,结果原来代码中使用的迭代器,指针,引用等,很多情况下会失效,需要重新指向。
2024-03-03 21:18:52
907
原创 《白话C++》第10章 Page124 常用容器 10.6.3 std::deque
这些家伙都允许你使用[i]访问数据,是时候了,认真复习,对比,归纳,整理这些工具之间的同与异,长处短处,适用面,如何配合?再次强调:访问元素时,除了at(index)会做检查越界,并在越界时抛出out_of_ranges异常之外,其他通过[ ]、front()、back()操作,都不做越界检查。std::vector的特点是内存连续,好处是提供随机访问,坏处是除了在尾部插入或删除数据,在其他地方插入数据或删除数据,都很低效。可见,内存连续带来了“随机访问”的好处,但也带来前面提及的低性能的坏处。
2024-03-03 18:14:58
760
原创 《白话C++》第10章 Page120 常用容器 10.6.2 std::vector
也就是说,vector分配的内存,往往要比实际存储的元素所占用的内存要大。则可以向一个合法的位置插入元素,当然,相比push_back,它的性格会慢上许多,当然,哪怕是push_back,由于需要保证在内存连续的前提下分配内存,所以没办法100%保障行。std::vector号称“动态数组”,支持构建时动态指定元素个数(并且分配相应的连续内存),那是基本功(这一点是std::array所不具备的)。vector最大的特点是所存储的数据在内存上是连续的,可以通过第0个元素取址,获得数据的起始内存地址。
2024-03-03 09:25:51
857
原创 《白话C++》第10章 Page119 常用容器 10.6.1 std::array
再加上size(),empty()等操作,array 比 vector 高效,比原生数组安全和方便,做C++语言中有个性的数组类型,它做到了。除非我们一开始定义的是一个大小为0的 array 对象,否则通过 std::array 对象调用empty(),总是返回 false,它的存在只是为了让 std::array 可以更好地参与标准库的基于容器的算法。std::array 看着远处舞台上风光的 std::vector,心里暗自说:“人们都说我在模仿他,其实我要做一个和它不同的数组!
2024-03-02 20:43:16
411
原创 《白话C++》第10章 Page115 10.5.2 迭代器辅助操作
支持逆向遍历的容器,通常都提供了rbegin()和rend(),作用就像begin()和end(),只不过rbegin()其实是容器的尾端,而rend()是容器的开端。rbegin()的位置相当于end(),但透过rbegin()访问一个数据,访问到的是其前面的那个元素(因为我们不能在end()位置上访问数据),如图10-13所示。正向迭代器表里如一,表现和实际指向的都是同一个节点。如果这个容器是空的,那么begin()和end()是相等的,所以for循环的判断条件在空容器的情况下,也是适用的。
2024-03-02 18:19:55
977
原创 《白话C++》第10章 Page109 10.5.1 迭代器基本分类
随机访问迭代器”也是一种“双向访问迭代器”,事实上它可以想访问容器哪个元素,就直接跳去访问这个元素(这里的随机和随机数意义不同,更多是随心所欲的一是)。以上主要以“流迭代器”为例说明输入和输出迭代器,千万别误以为纯正的容器,比如vector,list等没有输入输出迭代器(倒是“流迭代器”从实现的角度上看,算不得“纯正”的迭代器,它们更像某种适配器)。在标准库中,它是一个类模板。迭代器以只读型迭代器居多,但也有一些写入型迭代器,它会在迭代过程中,改变容器内部数据,造成正在访问该容器的其他迭代器失效。
2024-03-02 15:03:50
871
原创 《白话C++》第10章 Page63 10.3.5 boost::lexical_cast
把前面测试boost::lexical_cast的代码,相关内容改为“my::lexical_cast”,看到的测试效果一致,虽然还是山寨班子,但所用的技术却和原厂的lexical_cast基本一致。都是利用了C++的“输入输出流”,可以“吃入”多种类型的数据,再以另外一种类型“吐”出来的基础(有点像魔术盒子),来实现数据在不同类型之间的转换。boost::lexical_cast所使用的流,为了严格起见,主动关闭了 std::ios::skipws参数。居然成功了,顺利的将s转换成pt2。
2024-03-02 00:27:55
412
原创 《白话C++》第10章 Page58 10.3.4 string的武器库③
最后,split 还有一个“token_compress_mode_type”类型的参数,它表明如果分割符连续挨在一起,是否要跳过中间空的内容,设母串是“123, 456, 7”,若 type 取 token_compress_on,则空子串被抛弃,默认值是 token_compress_off。有一个字符串内容为“56, 37, 120, 90”,我们希望得到中间的4个数字求和,这就需要将数字从字符串中“抠”出来。它将存储在容器中的字符串,依序拼接成一个新串,并且可以指定连接的分隔符;
2024-03-01 22:47:24
376
原创 《白话C++》第10章 Page58 10.3.4 string的武器库②
find_nth”可以查找母串中第N次(N从0开始)出现的子串的位置,但假设已经找到了第N个,则查找第 N+1 次出现的高效做法,应该是从上次查找的位置之后找起。从代码中可以看到,boost::iterator_range提供了转换为bool值的重载,用与判断是否找到,还提供了到字符串转换的重载,会输出其一对迭代器范围内的内容,如果找到的话,就是子串。注意,既然结果中的两个迭代器都指向母串身上的位置,所以如果在查找之后,母串内容被修改了,那么这两个迭代器就会失效,不应再访问!在母串中连续查找子串的实现。
2024-03-01 21:39:05
400
原创 《白话C++》第10章 Page55 10.3.4 string的武器库①
所谓“判断式(predicate)”,通常就是一个函数或函数对象,返回值是bool值,而入参则是调用者所要求提供判断的数据,在string_algo中,它是广义上的“字符”类型。,用于传递各国的本地化处理,中国字符由于涉及宽字符等,所以mingw环境下没有实现,但欧洲主要语言的字符的类型判断,确实可以通过本国locate参数实现,如果什么都不传,那么默认其就是纯C的环境,基本可认为就是英美字符体系。等函数,事实上创建了另外一个对象(正好也是一个函数对象),然后再调用那个临时对象的括号重载操作;
2024-03-01 18:26:35
921
原创 《白话C++》第10章 Page52 10.3.3 字符串格式化
%w.p”中,w表示输出总长度,浮点数包含小数点占1位,实际长度不足则如前述补位,实际长度超过,则取实长。p表示精度的表达长度,例子中100.2被输出为100.200,因为精度被指示为最少3为,实际精度不足自动补0,实际精度超过则以“四舍五入”原则截断!这里可以看出,并不是C++为“取余操作符(%)”提供了新的功能,而是boost为format这个类,重载了(%)操作符。“格式符控制串”,采用和printf基本一致的控制符表示法,比如s%表示这里需要一个字符串,d%表示需要一个整数。
2024-03-01 15:51:05
896
原创 《白话C++》第10章 Page51 10.3 字符串处理 大小(Size)与容量(Capacity) std::wstring(宽字符串)
(并不改变字符串的size()值),需要分配的元素个数使用n表示,如果n为0(默认值)并不是清空,事实上只要n比当前元素个数小,reserve就和shrink_to_fit()函数一个作用。返回是否是空字符串,size()或length()为零,但远比调用后二者再和0判断的操作来的高效。重新设置字符串长度,如果新长度较大,则新出现的字符内容,要么为随机,要么为指定入参c字符的值。std::wstring用于处理宽字符串,宽字符类型为wchar_t。注意,为了性能,std::string在。
2024-03-01 11:08:50
477
原创 《白话C++》第10章 Page50 10.3 字符串处理 转换为C风格字符串 复制子串(可能有问题)
但事实上pstr所指向的内容有可能是空,也有可能是远洋,也有可能已经错乱了。因为,现在“...”的位置,可能是空行,但以后说不定就有哪位不听话的家伙,在那里插入一堆代码(不知不觉地毁掉pstr指针)。c_str()返回的是const char*,所以调用者不能通过它修改std::string的字符内容。在C++11中,data()和c_str()干一模一样的活,同样返回补上 '\0' 的C风格的。无论是c_str()还是data(),在原string对象调用了非常量的成员操作之后,就失效了。
2024-03-01 09:39:41
446
原创 《白话C++》第10章 Page49 10.3 字符串处理 求子串 字符串拼接
使用+和+=拼接字符串,虽然方便,但效率不高,另外也不方便拼接其他类型,比如整数,更常用的方法是使用标准库的。substr得到当前串从pos位置开始,长度为len范围内的子串,参数采用默认值则相当于复制原串。自加操作“+=”也有意义直观的支持。
2024-02-29 21:43:49
417
原创 《白话C++》第10章 Page46 10.3 字符串处理 查找 比较大小
如果要按汉字的拼音甚至笔划排序,效率好的需要操作系统特定API支持,或者将Unicode转换为GBK编码比较勉强有些效果(在Windows下,可将源代码设置为“系统默认”,然后使用std::string存储并比较,有相同效果)。另外,compare的返回值,仅可作大于零,等于零,小于零判断其意义,不能依赖于其具体的返回的大小,比如在某环境下,返回4785,在另一环境下,可能只返回1。英文字符一句在ASCII表中的次序比较,靠前的较小,如果前面字符都一致,但一方还有未出场的队员,则该方为大。
2024-02-29 20:53:58
931
原创 《白话C++》第10章 Page44 10.3 字符串处理 插入,删除,清除,替换
一种是size_t类型,表示。插入字符,位置有两种表达,从0计起的字符串索引。
2024-02-29 17:02:51
448
原创 《白话C++》第10章 Page43 10.3 字符串处理 std::string
assign的名字如果取成“assign_from”也许更好一些,后面还有个家伙,我们希望它取名为“copy_to”,二者有一定的对应关系。STL中大量使用“[first, last)”表达从first到last,但不含last的区间。,但在std::string看来,这个字符串的内容,就是5个'\0'。下面是部分构造函数的演示代码,请查找对应调用的构造函数。时,第二个整数入参代表的,分别是。后续许多操作的接口都存在这一差异化。s保存了5个连续的“结束符”,不仅构造函数如此,(并且很大程度依赖)
2024-02-29 15:20:30
404
原创 《白话C++》第10章 Page41 10.3 字符串处理 std::string
不过,std::string没有直接提供不区分大小写的比较,没关系,后面还会有第三方扩展提供的强大字符串武器库。尽管std::string用于代替纯C字符串,但在实现上,(比如加密或压缩算法处理之后的“字符串”。全套包括大于,小于,大于等于,小于等于,不等于等等。是一个定义在std::string类中的。npos用于表示取到最后一个字符的长度。std::string 提供了。自我内存管理,重载了判断操作符。它统一了字符串和字符组的处理。表达字符串的长度数据的类型。”时,返回此值,代表“
2024-02-29 13:46:27
465
原创 《白话C++》第10章 Page39 10.3 字符串处理 纯C字符串
执行以上代码,通常程序会挂掉,除了const问题之外,还需要理解代码中,ppp是指向一段静态数据段,而ppp2则是在栈中分配内存,再从静态数据段中复制字符串内容……所以,如果程序中有大量字符处理,特别是修改字符串内容的操作,请自行或从别人那里搞一套字符串管理工具,通常都给予复杂的后果。这是个绝妙的穿凿,不过也有坏处,比如有时字符串并不一定都是可视字符,如果不可视的内容含有‘\0’会难办;纯C语言使用char * 处理字符串,会自动在字符串最尾部,添加一个零字符‘\0’表示字符串的结束。
2024-02-29 12:08:03
420
原创 《白话C++》第10章 Page37 10.2.8 比较操作自动推导
”,“大于判断>”,“大于或等于判断>=”和“小于或等于判断<=”。不过正如前面代码注释,使用“<”推出“==”判断,会造成后者性能有所损失(因为变成两次判断),所以STL要求的是为类提供“<”和“==”判断符重载即可,其他的由它来推导出。为类定义对象之间的大小关系判断是很常见的需求,STL为了减少自己写一整套大小关系判断操作符的重载,提供了一套“比较操作自动推导”工具。(1)023行和028行,两个函数声明为“常量成员函数”是必须的,因为参与做大小比较的左右两个对象,往往是常量;这套小工具位于头文件“
2024-02-28 23:02:51
433
原创 《白话C++》第10章 Page36 10.2.7 std::ref/cref
这当然是个低级错误,当'&'作用在变量上,是‘取址’操作;作用在类型之后,才表示“引用”。(见同一行代码中的 'int&')。【小提示】:为什么需要“ref”
2024-02-28 21:41:46
356
原创 《白话C++》第10章 Page34 10.2.6 std::pair和tuple
想象以下,如果要制造一个“10-tuple”的对象,光写它的类型名称,就有够长的了,所以stl分别提供了make_tuple和make_pair函数,方便我们直接造出一个tuple或pair对象。这段代码编译不能通过,make_pair函数生成的对象类型是 pair<int, double>, 而不是tmp类型, 这就需要学习STL提供的“引用”小工具。map容器可称为“映射表”或“键值对”,它的每一个元素都由两个成员组成,第一个成员作为“KEY”,第二个成员称为“(VALUE)值”。
2024-02-28 21:25:38
973
原创 《白话C++》第10章 Page31 10.2.5 Std::any
可以解决这个问题。any的转换(转回原类型)发挥了C++强类型的优点,它会帮你检查类型兼容,如果转换出错,就抛出异常,如果不处理这个异常,程序就直接挂掉。一,是如果让any包装一个指针,则它并不会在其自身生命周期结束时,自动释放所持有的指针,这和STL的容器设计理念一致。C++是一门强类型的语言,意味着一个“数据”的出现,必然要伴随着它有一个确定的类型。面对一个any类型的数据,要得到它原来的类型是什么,这只有靠强大的记忆力了。,然后再new出不同的对象,这其中又有两种做法,一是C语言风格,存储一个“
2024-02-28 17:33:41
840
原创 《白话C++》第10章 Page25 10.2.4 命令行参数(未完成)
得到的参数保存在argv数组中,argc是切分后的个数,但是固定包含程序的名称,所以如果argc是5,则argv的元素也是5,但实际从命令行传入的参数是4个,按次序存储在argv[1]~argv[4]中,而argv[0]则是程序的名称(包含路径)。一个命令行参数都不传,但argc固定位1,而屏幕输出argv[0]的内容,正是程序的完整路径文件名。参数被传入时,全部变成字符串对待,使用空格切分,但如果。运行后,输出个数是6个,分别是。多个子串使用一对双引号扩住。,则只当成一个参数。
2024-02-28 15:01:37
377
原创 《白话C++》第10章 Page24 10.2.3 boost::UUID
换句话,就是一个(理论上)在全球空间和整个人类史的时间范围内,都不重复的字符串。,即128位0,通常用于表示一个无效的UUID,类似C++中的nullptr值对应空指针变量。它可长可短,为了在“不重复”这件事上更有保障,通常使用128位数,采用十六进制表达(这样可以看起来短一点)一,利用网卡号的唯一性来辅助生成(boost暂未提供),另外一种方法就是使用随机数。首先查看上例的输出效果,然后使用C++11的随机功能,模拟产生UUID字符串。函数实现uuid到字符串(或宽字符串)的转换。
2024-02-28 13:27:46
364
原创 《白话C++》第10章 Page20 10.2.2 随机数
播种之后,C运行库就会依据该种子的指,生成一系列的数值,而后程序第一次调用rand(),就得到该系列中的第一个数,第二次调用就得到系列中的第二个数……“熵”指系统整体熵的信息混乱度,比如内存剩余多少,当前有几个进程,磁盘上最后一次读出的内容是什么,键盘刚刚哪个键被按下等等的变化数据,以某种算法计算出一个随机种子。这除非有个硬件设备,比如可以采集周边光线、噪声、WIFI强度、微博头条等等随机数据,以便在每次运行时,生成一个真正的随机数,否则软件模拟的结果,“伪随机”就是“伪随机”更多解释请上网查阅“。
2024-02-28 11:25:40
894
原创 《白话C++》第10章 Page18 10.2.1 non-copyable不可复制类
相比为每个不需要复制功能的类写下复制构造和赋值操作的“delete”声明,来自boost的noncopyable可以让我们写更少的代码,并且在语义上,“noncopyable”这个词表一更加清楚。不过,如果因此引入boost库,可能会感觉代价有点答,为什么不直接学着实现一个呢?从boost::noncopyable派生,只是为了让当前类拥有基类中已“私有化”的,或已声明为“被删除”的复制构造和赋值操作符重载,所以非常适合使用“私有派生”方式。“面向对象”章节为了让某类对象不可被复制,方法是将其。
2024-02-28 07:53:55
365
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人