标签目录:摩登3注册网站

摩登3测速代理_C语言结构体描述BMP的文件格式

关注+星标公众号,不错过精彩内容 编排 | strongerHuang 微信公众号 | strongerHuang BMP文件的结构其实非常简单,就是两个结构体+一个可选的调色板+位图数据。 第一个结构体是BITMAPFILEHEADER,第二个结构体是BITMAPINFOHEADER。然后就是可选的调色板(RGBQUAD数组)。最后是位图数据。 嵌入式专栏 1 第一个结构体 这里先讲讲第一个结构体位图文件头结构:BITMAPFILEHEADER 的详细结构。 先看看代码原型: typedef struct tagBITMAPFILEHEADER{ WORD bfType;        DWORD       bfSize; WORD bfReserved1; WORD bfReserved2;        DWORD       bfOffBits;} BITMAPFILEHEADER, *PBITMAPFILEHEADER; 其中: bfType: 文件的标识 ,值必须是0x4D42(也就是“BM”两个字符,注意是Little-Endian) bfSize: 是整个文件的大小 bfReserved1和bfReserved2 必须是0. bfOffBits :是位图数据在文件中的偏移。 嵌入式专栏 2 第二个结构体 位图信息头:BITMAPINFOHEADER。 typedef struct tagBITMAPINFOHEADER{        DWORD       biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount;        DWORD       biCompression;        DWORD       biSizeImage; LONG biXPelsPerMeter;        LONG        biYPelsPerMeter;        DWORD       biClrUsed;        DWORD       biClrImportant;} BITMAPINFOHEADER, *PBITMAPINFOHEADER; biSize: BITMAPINFOHEADER这个结构体的大小。必须为40(字节)。 biWidth: BMP位图的宽度。 biHeight: BMP位图的宽度。 这里需要说明一下的是,BMP位图数据有两种存储方式,通常是“底到上型”,也就是BMP位图数据的第一行其实是这个图片的最后一行。一种是“顶到下型”,BMP位图数据的第一行就是图片的第一行。 如果位图是“顶到下型”,那么biHeight的值是负的,位图的实际高度其实是(-biHeight),也就是它的相反数。 只有“底到上型”位图支持压缩。“底到上型”是目前最常见的位图类型。 PhotoShop在保存位图文件的时候,你可以设置让它输出“底到上型”或“顶到下型”。“顶到下型”就是“逆行序”。 biPlanes: 位图的“位面数”。这个值必须为1. biBitCount: 位图的“颜色位数”。表示位图数据中,几个二进制位表示一个像素。 颜色位数为1表示单色(其实是“双色”,通常是黑白,也可以是别的两个颜色。) 为2表示四色,也就是四种颜色。为4表示16种颜色。为8表示有256种颜色。 在表示256色以内的颜色数量的时候,这个BMP文件其实是作为使用调色板颜色的图像,因此在BITMAPINFOHEADER结构体的后面还有个调色板。 所谓调色板其实就是RGBQUAD结构体的数组。它的元素个数就是颜色数。 biCompression: 位图的压缩格式,值可以是BI_RGB(未压缩),BI_RLE8(8位RLE压缩),BI_RLE4(4位RLE压缩),BI_BITFIELDS(表示颜色表中,每个像素有3个DWORD的屏蔽位数据来指示红绿蓝成分。16位和32位位图可以使用这个。),BI_JPEG(位图数据其实是JPG格式的),BI_PNG(位图数据其实是PNG格式的) 当biCompression值为BI_RLE8的时候,biBitCount必须为8,表示这是个8位的256色索引颜色位图(有256个调色板),位图数据按照如下算法压缩: ·位图数据是每两个字节组成一个元素,这样的元素组成了一个数组。 ·每个元素,第一个字节表示重复的像素的数量,第二个字节是8位的调色板颜色索引。 ·如果元素的第一个字节为0,那么第二个字节有特殊的含义: 0:这行已经结束了。 1:这个位图已经结束了。 2:设置下一个像素的位置,后面的两个无符号字节分别指定了下一个像素的X、Y偏移。注意是无符号字节,意思是说,偏移只能是往后。 3到0xFF:表示后面有一段没有压缩的数据的长度,也就是连续的8位像素颜色索引数据的长度。但是数据必须是2字节对齐的。biCompression值为BI_RLE4的时候,biBitCount必须为4,表示这是个4位的16色索引颜色位图(有16个调色板)。 和BI_RLE8的区别只是每个元素的第二个字节如果表示颜色索引,它表示的是两个像素的颜色索引。第一个字节表示重复的数量,第二个字节表示两个像素的颜色。 举个例,假设调色板第0号色是黑色,第1号色是白色,元素的值是0x05,0x01,那么它表示“黑白黑白黑白黑白黑白”共10个像素出现在1行。 biSizeImage: 位图数据块的大小。以字节为单位。如果你的位图没有经过压缩,这个值可以是0. biXPelsPerMeter: 表示横向的每米的像素数。可以为0. biYPelsPerMeter: 表示纵向的每米的像素数。可以为0. biClrUsed: 位图实际使用过的调色板的颜色数。如果这个值为0,表示这个位图使用了整个调色板。只有8位以及8位以下的索引颜色位图才需要考虑这个值。对于16位以及16位以上的位图,无视这个值。biClrImportant表示重要的颜色数。如果为0,表示颜色都重要。通常它的值等于biClrUsed,或者等于0. 如果位图是8位以及8位以下的位图,后面是位图的调色板数据。否则没有调色板数据。 调色板就是简单的RGBQUAD数组。 后面就是位图数据了。如果位图是没有经过压缩的,那么位图数据的存储就是一行一行的,每行都是每XX个字节一个像素,取决于位图的位数(biBitCount),每一行都是4字节对齐的!多出来的部分用0补齐。这里必须注意。 因此,每行占用的字节数要按照以下公式计算:(其中的biBitCount指的是位图的位数,也就是BITMAPINFOHEADER的成员) 每行字节数 = ((图像宽度 – 1) * biBitCount / 32 + 1) * 4; 如果你是用VB编写读取位图的话,是这样写的: 每行字节数 = ((图像宽度 – 1) * biBitCount \ 32 +…

摩登3新闻554258:_揭秘功率半导体,芯片国产替代黄金赛道!

本文来源:智东西 功率半导体应用领域广泛,下游需求旺盛带动功率半导体市场规模持续增长。新能源车渗透率提升带动功率半导体需求增长,预计 2025 年中国新能源汽车用功率半导体市场规模将达 104 亿元。 配套充电桩数量增长叠加快速充电需求驱动充电桩功率提升,预计 2025 年充电桩用功率半导体市场空间将达 35 亿元。新能源发电市场规模持续扩张,预计 2025 年光伏逆变器用功率半导体市场空间约为 44 亿元。 5G 时代,基站数量扩充且功率提升,叠加云计算、雾计算扩容,加大功率半导体使用需求。家电变频化& 消费电子快充化,驱动功率半导体用量进一步增加。 据 Omdia 预测,全球功率半导体市场规模将从 2020 年的 430 亿美元增至 2024 年的 525 亿美元,复合增速约为 5%。 下游需求旺盛驱动功率半导体市场规模增长 1、功率半导体用途广泛,市场空间广阔 功率半导体用途广泛 。功率半导体为可起到功率转换、功率放大、功率开关、线路保护和整流等作用,其下游应用十分广泛,几乎用于所有的电子制造行业,传统应用领域包括消费电子、网络通信、电子设备等产业。随着社会经济的快速发展及技术工艺的不断进步,新能源汽车及充电桩、智能装备制造、物联网、新能源发电、轨道交通等新兴应用领域逐渐成为功率半导体的重要应用市场,带动功率半导体需求快速增长。 功率半导体 按类型可分为二极管、晶闸管、晶体管 。 1)功率二极管结构简单,有单向导电性,广泛用于消费电子中。 2)晶闸管体积小、可靠性高,多用于高压直流输电、轨道交通。 3)晶体管可进一步分类为 BJT\MOSFET\IGBT。BJT 有低导通压降特性,有电流放大和开关的作用,常用于家电和开关电路。MOSFET 有易于驱动、频率超高的特点,主要应用于手机充电器、移动电源、车载导航等。 IGBT 兼具 MOSFET 的高输入阻抗和双极型三极管 BJT 的低导通压降两方面的优点,开关速度高,易于驱动,频率高,损耗低,常用于 600V 以上的大功率装置,如电动汽车充电桩、逆变器等。 ▲功率半导体的应用领域 ▲功率半导体 按类型分类 全球及中国功率半导体市场空间广阔 。近年来,受益于社会经济、技术水平的进步以及应用领域的拓宽,功率半导体的市场空间稳步增长。2020 年全球功率半导体市场空间约为 430 亿美元,据 Omdia 预测到 2024 年将进一步增长至约 525 亿美元,未来 4 年 CAGR约为 5%。 另据 IHS 数据显示,2018 年中国功率半导体市场空间约为 138 亿美元,占全球市场份额的 35%,预计 2021 年中国功率半导体市场空间将增至 159亿美元,CAGR 约为5%。 ▲全球功率半导体市场空间 (亿美元)▲中国功率半导体市场空间(亿美元) 汽车电子、工业电子 、消费电子是功率半导体的主要应用领域。从全球功率半导体的下游应用领域占比来看,2019 年汽车电子占比最多,达 35.4%,工业电子、消费电子的占比分别为 26.8%和 13.2%,是第二、第三大应用领域。从中国功率半导体的下游应用领域来看,2019 年在汽车电子同样占比最多达 27.4%、其次是消费电子、工业和电力,占比分别为 23.1%和 18.6%。 ▲2019 年全球功率半导体下游应用领域占比▲2019 年中国功率半导体下游应用领域占比 2、新能源汽车产业发展提振功率半导体需求 政策、市场双导向,推动新能源汽车景气度上行。政策方面,多国二氧化碳限排政策、新能源汽车补贴政策双管齐下,以应对全球气候变暖压力,汽车电动化路线愈加明显。在欧盟,ACEA 汽车温室气体排放协议规定,到 2030 年以前,汽车二氧化碳排放量需低于每公里 59 克。 根据英飞凌测算,欧盟新能源汽车渗透率将在 2030 达到 40%。在中国,《新能源汽车产业发展规划(2021—2035年)》提出新能源汽车发展愿景,计划到2025年,国内新能源汽车渗透率达到 20%。 ▲全球主要国家二氧化碳排放管理与发展 汽车电动化大势所趋,功率半导体面临新的增长机遇。以电力系统作为动力源的新能源汽车,对电子元器件功率管理,功率转换能力提出了更高的要求。在传统汽车中,功率半导体主要应用于车辆启动,发电和安全领域,低压低功率电子元器件即可满足其工作需求。而在新能源汽车中,电池输出的高电压需要进行频繁的电压变换,电流逆变。这些电路大幅提高了汽车对 IGBT 、MOSFET、 双极晶体管 、二极管的需求,从而提升了单车功率半导体价值。 ▲纯电动汽车结构图 预计 2025 年中国新能源汽车用功率半导体市场规模将达 104 亿元。乘联会预计 2025年中国汽车销量将达…

摩登3新闻554258:_通信十大定律,最后一个扎心了……

01 摩尔定律 英特尔(Intel)创始人之一戈登·摩尔(Gordon Moore)提出摩尔定律:当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。 戈登·摩尔 摩尔定律的核心内容主要有三个: 一是集成更多的晶体管,每隔两年单芯片集成的晶体管数目翻一番; 二是实现更高的性能,每隔两年性能提高一倍; 三是实现更低的价格,单个晶体管的价格每隔两年下降一倍。 摩尔定律被称为“半导体行业的传奇定律”,它不仅揭示了信息技术进步的速度,更在接下来的半个世纪中,犹如一只无形大手般推动了整个半导体行业的变革。 02 梅特卡夫定律 1993年,乔治·吉尔德提出梅特卡夫定律:一个网络的价值等于该网络内的节点数的平方,而且该网络的价值与联网的用户数的平方成正比。 该定律表明,一个网络的用户数目越多,那么整个网络和该网络内的每台计算机的价值也就越大。 用公式再来说明一下: 网络设备之间可能连接数 网络可能连接数C可以表示为: C = n(n-1)/2 (1) 网络的经济价值V表示为: V=C2 (2) 互联性驱动经济价值,这就能明白万物互联对运营商等企业的价值了。 03 吉尔德定律 乔治·吉尔德(数字时代三大思想家之一)提出吉尔德定律(又称胜利者浪费定律):最为成功的商业运作模式是价格最低的资源将会被尽可能的消耗,以此来保存最昂贵的资源。 吉尔德定律被描述为:在未来25年,主干网的带宽每6个月增长一倍,其增长速度是摩尔定律预测的 CPU 增长速度的3倍并预言将来上网会免费。 网络速度提升、价格下降,这不就是提速降费的惠民政策吗? 摩尔定律、梅特卡夫定律和吉尔德定律的三大趋势,共同推动着通信网络和信息社会飞速发展。 04 库梅定律 2011年,斯坦福大学的教授乔纳森·库梅(Jonathan Koomey)发现了库梅定律:单位运算的电耗量,每一年半就降低一半,从计算机诞生开始,都会持续下去。 21世纪,摩尔定律和库梅定律具有同等重要的地位。 库梅定律 vs 摩尔定律 库梅指出,从1946年第一台电子计算机ENIAC诞生之日算起,相同的计算量所需能耗一降再降。 微软和英特尔曾经联手对ENIAC的峰值功耗进行了计算——每秒运行5000次加法,所需功耗为150千瓦。如今仅仅是ENIAC时期的四万分之一。 ENIAC (占地面积达170平方米,重30吨) 物联网的基础是数据,如何采集世界的数据? 其中一个解决方案是利用库梅定律,建立遍布于世界的传感器网络,和计算机进行连接,建立自动化获得世界信息的范式,更好地收集世界的数据。 我们要建立大思维,正如我们的五官等感官都在收集信息供给我们处理,你的大脑会不断比较,从而建立一个关于世界的图景。 05 尼尔森定律 1998年,嘉卡伯·尼尔森(Jakob Nielsen)提出互联网宽带的尼尔森定律:高端用户带宽将以平均每年50%的增幅增长,每21个月带宽速率将增长一倍。 这也是指数化增长的曲线,这也是为什么现在很多大的电信公司,价格一降再降,但是仍然可以从中获得丰厚利润的主要原因。回顾宽带用户的发展情况其增长趋势很好地与该定律吻合。 06 库帕定律 马丁·库帕(Martin Lawrence Cooper)提出库伯定律:无线网络容量每30个月增加一倍。 库帕大哥大的发明者,被称为移动电话之父。 马丁·库帕 有人说,“库伯定律”比“摩尔定律”更加经典,更加坚不可摧。 从1897 年吉列尔莫·马可尼( Guglielmo Marconi)用无线电报传递莫尔斯电码,到今天4G通信技术的应用,这个定律都被认为是正确的。 而且更酷的是,无线射频传递过程中的信息量,不同于芯片上的晶体管,它不存在物理空间的极限限制,只要架设更多的线路,更多的带宽,搭建更多的终端,信息传输量就会永无止境地向上递增。 07 Edholm带宽定律 菲尔·埃德霍尔姆(Phil Edholm)提出Edholm带宽定律:人们对于无线短距离通信的带宽需求基本每隔18个月翻一番;为了满足日益增长的带宽需求,可以采用更先进的调制技术提高频带利用率,或者通过采用多种复用方式来增加信道容量。 Edholm带宽定律 在未来,无线网络的传输效率会和有线网络的传输效率逐渐趋同,无线网络和有线网络相互融合,是通信技术发展到一定阶段后必然会有的结果。 08 巴尔特定律 巴特尔定律:从一根光纤中导出的数据量,每9个月就会翻一倍,这也意味着在光纤网络中,数据传输成本每9个月的时间就会下降一半。 09 香农定律 1948年,美国工程师克劳德·香农(Claude Elwood Shannon)提出香农定律:如果把网络带宽比喻为车道宽度,那么网速就好比汽车在车道上行驶的速度;汽车在车道上行驶得快或者不快,要受限于车道宽度的大小,车道上正有多少辆汽车在行驶等诸多干扰性因素。 香农定律的数学公式 克劳德·香农在工程和数学界是一位响当当的人物,在20世纪30-40年代的工作为他赢得了“信息时代之父”( father of the information age )的称号。 克劳德·香农 10 墨菲定律 墨菲定律是一种心理学效应,由爱德华·墨菲(Edward A. Murphy)提出:凡事只要有可能出错,那就一定会出错。 墨菲定律自被提出之日起便被广泛应用于各个行业的安全生产管理中,通信行业也不例外。 举几个扎心的例子: 凡是有可能停电的基站,那就一定会停电; 凡是有可能发生断网的日子,那就一定会断网; 凡是有可能发生安全事故的工程施工,那就一定会发生事故。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3内部554258_龙芯.NET正式发布 开源共享与开发者共成长

2020年12月19日,2020中国. NET开发者大会于苏州盛大开幕。本次大会以“开源、共享、创新”为主题,以线下城市苏州为中心,覆盖北京、上海、深圳、广州、长沙、成都、厦门、胶东等地区,是中国 .NET 开发者的大聚会,线上+线下参会人数达数十万人,覆盖城市达10+个。峰会共包含5大会场,近50场热点技术专题,数万名开发者将就各类“ .NET 开发和产品设计”相关的前沿技术话题展开深度交流。 此次开发者大会上,龙芯.NET项目及JVM负责人敖琪博士发表了《龙芯.NET到来》主题演讲,并正式发布龙芯.NET。这意味着国产龙芯已支持.NET,具备更为灵活的部署能力,也将进一步完善龙芯软件生态开发体系。会上,微软全球开发平台事业部资深副总裁Julia Liuson女士特别提到:“中国的.NET社区也积极为.NET开源项目做出了很多贡献,其中特别提一下,对龙芯平台的移植是一个非常大的工程,谢谢龙芯团队。” 此次发布的龙芯.NET 3基于.NET Core 3.1,支持该版本具备的所有主要功能,包括GC、AOT等。CoreCLR、CoreFX、ASP.NET Core等库的测试通过情况与x64/arm64相当。同时支持龙芯CPU家族,包括龙芯3A4000/3A3000/3A2000单路多路、龙芯2K1000等。支持多款操作系统,包括Loongnix、Debian、UOS、麒麟等。后续,龙芯将对龙芯. NET进行长期维护,并与社区同步。 从去年开始,龙芯将.NET作为一个重点项目持续跟进。2019年5月开始调研需求及版本。2019年8月构建成功,10月输出第一个Hello World,并完成虚拟机初始化、部分JIT和打印功能。2020年5月.NET Web应用启动,6月18日开源了龙芯版本的CoreCLR,7月发布早期试用版,12月推出发布候选版本。 未来龙芯将持续不断完善.NET产品质量,为用户提供更好的服务和使用体验。龙芯也将积极参与.NET社区建设,将龙芯的工作回馈给社区,并争取合入上游。同时号召.NET领域开发人员及国内爱好者一起参与.NET虚拟机的学习和研究,龙芯愿意帮助更多国内开发者了解底层技术,从CoreCLR等底层平台中获取更多土壤,也将有利于更好掌握.NET优秀技术。 感兴趣的开发者可通过龙芯提供的开源仓库自己动手编译,了解该版本的实际情况。

摩登3测速代理_数据处理,你不得不会的「正则表达式」

若要判断一个输入的QQ号是否有效,你会如何处呢? 首先你得分析一下其对应规则,依次列出: 长度大于5,小于等于11; 首位不能为0; 是否为纯数字? 规则既列,接着就该尝试实现了,那么用什么来表示字符串呢?在C++中,最容易想到的就是string了,其中提供了许多成员函数可以处理字符串,所以有了如下实现: 1std::string qq; 2std::cin >> qq; 3 4// 1. 判断位数是否合法 5if (qq.length() >= 5 && qq.length() <= 11) 6{ 7    // 2. 判断是否非'0'开头 8    if (qq[0] != '0') 9    {10        // 3. 判断是否为纯数字11        auto pos = std::find_if(qq.begin(), qq.end(), [](const char& ch) {12            return ch < '0' || ch > '9';13        });14        if (pos == qq.end())15            std::cout << "valid.\n";16    }17} 虽然写出来了,但是有没有感到异常繁琐?这还仅仅是一个对应规则较少的处理,便如此麻烦,若是要检测IP地址、身份证号,或是解析一段HTML数据,或是其它更复杂的字串,那岂非更令人叫苦不迭? 当然,也有许多扩展库对字符串处理提供了方便,其中比较好用的是boost中的string_algo库(已于C++17纳入了标准库,并改名为string_view),但本篇主要说C++11的regex库,其对复杂数据的处理能力非常强,比如可以用它来检测QQ号: 1std::regex qq_reg("[1-9]\\d{4,11}");2bool ret = std::regex_match(qq, qq_reg);3std::cout << (ret ? "valid" : "invalid") << std::endl; 是不是超级方便呢?那么接下来便来看看如何使用「正则表达式」。 正则程序库(regex) 「正则表达式」就是一套表示规则的式子,专门用来处理各种复杂的操作。 std::regex是C++用来表示「正则表达式」(regular expression)的库,于C++11加入,它是class std::basic_regex<>针对char类型的一个特化,还有一个针对wchar_t类型的特化为std::wregex。 正则文法(regex syntaxes) std::regex默认使用是ECMAScript文法,这种文法比较好用,且威力强大,常用符号的意义如下: 符号 意义 ^ 匹配行的开头 $ 匹配行的结尾 . 匹配任意单个字符 […] 匹配[]中的任意一个字符 (…) 设定分组 \ 转义字符 \d 匹配数字[0-9] \D \d 取反 \w 匹配字母[a-z],数字,下划线 \W \w 取反 \s 匹配空格 \S \s 取反 + 前面的元素重复1次或多次 * 前面的元素重复任意次 ? 前面的元素重复0次或1次 {n} 前面的元素重复n次 {n,} 前面的元素重复至少n次 {n,m} 前面的元素重复至少n次,至多m次 | 逻辑或 上面列出的这些都是非常常用的符号,靠这些便足以解决绝大多数问题了。 匹配(Match) 字符串处理常用的一个操作是「匹配」,即字符串和规则恰好对应,而用于匹配的函数为std::regex_match(),它是个函数模板,我们直接来看例子: 1std::regex reg("<.*>.* "); 2bool ret = std::regex_match("value", reg); 3assert(ret); 4 5ret = std::regex_match(" value " , reg); 6assert(!ret); 7 8std::regex reg1("<(.*)>.* "); 9ret = std::regex_match(" value ", reg1);10assert(ret);1112ret = std::regex_match(" value ", std::regex("<(.*)>value "));13assert(ret);1415// 使用basic文法16std::regex reg2("<\\(.*\\)>.* ", std::regex_constants::basic);17ret = std::regex_match("value", reg2);18assert(ret); 这个小例子使用regex_match()来匹配xml格式(或是html格式)的字符串,匹配成功则会返回true,意思非常简单,若是不懂其中意思,可参照前面的文法部分。 对于语句中出现\\,是因为\需要转义,C++11以后支持原生字符,所以也可以这样使用: 1std::regex reg1(R"(<(.*)>.* )");2auto ret = std::regex_match(" value ", reg1);3assert(ret); 但C++03之前并不支持,所以使用时要需要留意。 若是想得到匹配的结果,可以使用regex_match()的另一个重载形式: 1std::cmatch m; 2auto ret = std::regex_match(" value ", m, std::regex("<(.*)>(.*) ")); 3if (ret) 4{ 5    std::cout << m.str() << std::endl; 6    std::cout << m.length() << std::endl; 7    std::cout << m.position() << std::endl; 8} 910std::cout << "----------------" << std::endl;1112// 遍历匹配内容13for (auto i = 0; i < m.size(); ++i)14{15    // 两种方式都可以16    std::cout << m[i].str() << " " << m.str(i) << std::endl;17}1819std::cout << "----------------" << std::endl;2021// 使用迭代器遍历22for (auto pos = m.begin(); pos != m.end(); ++pos)23{24    std::cout << *pos << std::endl;25} 输出结果为: 1 value 216 30 4---------------- 5…

摩登3注册网址_一个让我感到毛骨悚然的GitHub项目!

想必你永远不会想到,有一天你也会被自己的键盘出卖。 对,就是你每日敲击的键盘。当指尖在键盘上跳跃,清脆的噼啪声此起彼落时,你输入的所有信息,包括那些情真意切的词句,那些不欲人知的心事,还有你的网络账户、银行密码…… 全都被它泄露了。 键盘,还能被黑??? 前不久,一个叫做 Keytap 的 “黑科技” 在国外火了。Keytap 通过监听你敲击键盘的声音,就能还原出你输入的内容。 而且,只需要通过你电脑里的麦克风,就能完成声波采集的任务。 在一段发布于网上的 Demo 里,Keytap 作者展示了在 iMac+Filco 机械键盘环境中,这个算法的优秀程度,请看: 四步偷窥大法 搭建这样一个 “偷窥” 打字的模型并不难,Keytap 算法也已经开源了。跟着做,只要如下四步: 一是,收集训练数据; 二是,搭建预测模型,学习一下数据; 三是,检测出有人在敲键盘; 四是,检测出 ta 在打什么字。 收集训练数据 Keytap 收集数据时,只保留每次敲击前后 75-100 毫秒的音频。 这就是说,并非连续取样, 两次敲击之间有一部分是忽略的。 这种做法是会牺牲一些信息量的。 从敲下按键,到程序受到指令,这之间有随机延时,与硬件和软件都有关系。 比如,按下 g 键的完整波形长这样: 看图像可以发现,敲击时出现了一个峰值,而再过大约 150 毫秒,又有一个按键被抬起的小峰值。 这样说来,100 毫秒之外的信息也可能有用,不过这里为了简便就忽略了。 最终,收集到的数据长这样: 除此之外,局限性还在于,如果两次按键之间相隔不久,后者落在前者的后 75 毫秒之内,那数据可能就有些混杂了。 搭个预测模型 这个部分是最能发挥创造力的部分。Keytap 用了一个非常简单的方法,分为三步: 1. 把收集到的波形的峰值对齐。这样可以避免延时带来的影响。 2. 基于相似度指标 (Similarity Metric) ,更精细地对齐波形。 需要更精确的对齐方法,是因为有时候峰值未必是最好的判断依据。 那么,可不可以跳过峰值对齐呢? 之所以第 2 步之前要先做第 1 步,是因为相似度指标的计算很占 CPU。而第 1 步可以有效缩小对齐窗口 (Alignment Window) ,减少计算量。 3. 对齐后,做简单加权平均。权重也是用相似度指标来定义的。 完成第 3 步之后,每一个按键都会得出一个平均波形 (a Single Averaged Waveform) ,用来和实时捕捉的数据做 比对。 Keytap 用的 相似度指标是互相关 (Cross Correlation, CC) ,长这样: 这里,Ai 和 Bi 都是某个按键的波形样本,比对就在它们之间进行。CC 值越高,表示两者越相似。 当然,也可以用其他相似度指标来做。 顺便一说,两次按键之间的 间隔时长,其实也可以用来预测的,但开发者怕麻烦就省略了,勇敢的少年可以去源代码基础上自行实验。 检测出在敲键盘 平均波形和比对标准都有了,可是麦克风实时收录的声音连绵不绝,该和哪一段来比对呢? 这就需要从连续的音频里,找到敲击键盘的声音。 Keytap 用了一个非常简单的阈值方法,在原始音频里监测敲击动作: 按下去的时候,会有一个大大的峰值,这就是侦测目标。 不过,这个阈值不是固定的,是自适应 (Adaptive) 的:根据过去数百毫秒之内的平均样本强度来调整的。 检测打了什么字 当系统发现有人在敲键盘,就用相似度指标来测到底按了哪个键,CC 值最高的就是答案。方法就像上文说的那样。 现在,代码实现已经 开源了,传送门见文底。 不过,作者在博客中说,这个方法目前只有 机械键盘适用。 “薯片间谍” 听音识字的研究不止这一个,去年一篇 Don’t Skype & Type!Acoustic…

摩登3测速登录地址_嵌入式开发中常用的几种通信接口总结

在嵌入式系统中,板上通信接口是指用于将各种集成电路与其他外围设备交互连接的通信通路或总线。以下内容为常用板上通信接口:包括I2C、SPI、UART、1-Wire: I2C总线 I2C总线是一种同步、双向、半双工的两线式串行接口总线。这里,半双工的含义是指在任意给定的时刻,只有一个方向上是可以通信的。 I2C总线最早由Philips半导体公司于20世纪80年代研发面市。I2C最初的设计目标是为微处理器/微控制器系统与电视机外围芯片之间的连接提供简单的方法。 I2C总线由两条总线组成:串行时钟线SCL和串行数据线SDA。 SCL线——负责产生同步时钟脉冲。 SDA线——负责在设备间传输串行数据。 I2C总线是共享的总线系统,因此可以将多个I2C设备连接到该系统上。连接到I2C总线上的设备既可以用作主设备,也可以用作从设备。 主设备负责控制通信,通过对数据传输进行初始化/终止化,来发送数据并产生所需的同步时钟脉冲。 从设备则是等待来自主设备的命令,并响应命令接收。主设备和从设备都可以作为发送设备或接收设备。无论主设备是作为发送设备还是接收设备,同步时钟信号都只能由主设备产生。 在相同的总线上,I2C支持多个主设备的同时存在。图1-1显示了I2C总线上主设备和从设备的连接关系。 当总线空闲时,SDA 和SCL 都处于高电平状态,当主机要和某个从机通讯时,会先发送一个开始条件,然后发送从机地址和读写控制位,接下来传输数据(主机发送或者接收数据),数据传输结束时主机会发送停止条件。传输的每个字节为8 位,高位在前,低位在后。 开始条件:SCL 为高电平时,主机将SDA 拉低,表示数据传输即将开始。 从机地址:主机发送的第一个字节为从机地址,高7 位为地址,最低位为R/W 读写控制位,1 表示读操作,0 表示写操作。 一般从机地址有7 位地址模式和10 位地址模式两种,如果是10 位地址模式,第一个字节的头7 位是11110XX 的组合,其中最后两位(XX)是10 位地址的两个最高位,第二个字节为10 位从机地址的剩下8 位,如下图所示: 应答信号:每传输完成一个字节的数据,接收方就需要回复一个ACK(acknowledge)。写数据时由从机发送ACK,读数据时由主机发送ACK。当主机读到最后一个字节数据时,可发送NACK(Notacknowledge)然后跟停止条件。 数据:从机地址发送完后可能会发送一些指令,依从机而定,然后开始传输数据,由主机或者从机发送,每个数据为8 位,数据的字节数没有限制。 重复开始条件:在一次通信过程中,主机可能需要和不同的从机传输数据或者需要切换读写操作时,主机可以再发送一个开始条件。 停止条件:在SDA 为低电平时,主机将SCL 拉高并保持高电平,然后在将SDA 拉高,表示传输结束。 SPI总线 SPI总线是同步、双向、全双工的4线式串行接口总线,最早由Motorola公司提出。SPI是由“单个主设备+多个从设备”构成的系统。需要说明的是:在系统中,只要任意时刻只有一个主设备是处于激活状态的,就可以存在多个SPI主设备。常运用于EEPROM、FLASH、实时时钟、AD转换器、数字信号处理器和数字信号解码器之间实现通信。 为了实现通信,SPI共有4条信号线,分别是: (1)主设备出、从设备入(Master Out Slave In,MOSI):由主设备向从设备传输数据的信号线,也称为从设备输入(Slave Input/Slave Data In,SI/SDI)。 (2)主设备入、从设备出(Master In Slave Out,MISO):由从设备向主设备传输数据的信号线,也称为从设备输出(Slave Output/Slave Data Out,SO/SDO)。 (3)串行时钟(Serial Clock,SCLK):传输时钟信号的信号线。 (4)从设备选择(Slave Select,SS):用于选择从设备的信号线,低电平有效。 SPI使用方法: 上图所示芯片有2 个SPI 控制器,SPI 控制器对应SPI 主设备,每个SPI 控制器可以连接多个SPI从设备。挂载在同一个SPI 控制器上的从设备共享3 个信号引脚:SCK、MISO、MOSI,但每个从设备的CS 引脚是独立的. 主设备通过控制CS 引脚对从设备进行片选,一般为低电平有效。任何时刻,一个SPI 主设备上只有一个CS 引脚处于有效状态,与该有效CS 引脚连接的从设备此时可以与主设备通信。 所以,SPI通信方式可以使用“一主多从”的结构进行通信。每个连接到总线上的器件都有唯一的地址,主设备启动数据传输并产生时钟信号,从设备被主设备寻址,同一时刻只允许有一个主设备。 从设备的时钟由主设备通过SCLK 提供,MOSI、MISO 则基于此脉冲完成数据传输。SPI 的工作时序模式由CPOL(Clock Polarity,时钟极性)和CPHA(Clock Phase,时钟相位)之间的相位关系决定,CPOL 表示时钟信号的初始电平的状态,CPOL 为0 表示时钟信号初始状态为低电平,为1 表示时钟信号的初始电平是高电平。CPHA 表示在哪个时钟沿采样数据,CPHA 为0 表示在首个时钟变化沿采样数据,而CPHA 为1 则表示在第二个时钟变化沿采样数据。 根据CPOL 和CPHA 的不同组合共有4 种工作时序模式:CPOL=0,CPHA=0、CPOL=0,CPHA=1、CPOL=1,CPHA=0、CPOL=1,CPHA=1 UART UART——通用异步收发传输器,UART 作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输。在应用程序开发过程中使用频率较高的数据总线。 基于UART的数据传输是异步形式的串行数据传输。基于UART的串行数据传输不需要使用时钟信号来同步传输的发送端和接收端,而是依赖于发送设备和接收设备之间预定义的配置。 对于发送设备和接收设备来说,两者的串行通信配置(波特率、单位字的位数、奇偶校验、起始位数与结束位、流量控制)应该设置为完全相同。通过在数据流中插入特定的比特序列,可以指示通信的开始与结束。当发送一个字节数据的时候,需要在比特流的开头加上起始位,并在比特流的末尾加上结束位。数据字节的最低位紧接在起始位之后。 UART 串口的特点是将数据一位一位地顺序传送,只要2 根传输线就可以实现双向通信,一根线发送数据的同时用另一根线接收数据。 UART 串口通信有几个重要的参数,分别是波特率、起始位、数据位、停止位和奇偶检验位,对于两个使用UART 串口通信的端口,这些参数必须匹配,否则通 起始位:表示数据传输的开始,电平逻辑为“0” 。 数据位:可能值有5、6、7、8、9,表示传输这几个bit 位数据。一般取值为8,因为一个ASCII 字符值为8 位。 奇偶校验位:用于接收方对接收到的数据进行校验,校验“1” 的位数为偶数(偶校验) 或奇数(奇校验),以此来校验数据传送的正确性,使用时不需要此位也可以。 停止位:表示一帧数据的结束。电平逻辑为“1”。 波特率:串口通信时的速率,它用单位时间内传输的二进制代码的有效位(bit) 数来表示,其单位为每秒比特数bit/s(bps)。常见的波特率值有4800、9600、14400、38400、115200 等,数值越大数据传输的越快,波特率为115200…

摩登3注册平台官网_这些半导体芯片都宣布涨价!

▼矽力杰 ▼恩智浦 ▼瑞萨 ▼微芯科技 ▼士兰微 ▼光宝科技 ▼富满电子 ▼强茂 ▼新洁能 ▼汇顶科技 ▼瑞能半导体 ▼意法半导体 ▼Diodes ▼华微电子 ▼ALPHA&OMEGA ▼赛灵思 END 来源:ittbank 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3娱乐怎么样?_高通骁龙888首款手机小米11上市 全新体验的5G旗舰

一直以来,高通在5G手机芯片以及5G基带方面都有着领先的技术优势,高通将其在5G方面的开创性技术不断赋能中国厂商,助力中国厂商不断拓展海外5G市场。小米、联想、OPPO、vivo等多家知名国产手机厂商都已经率先布局5G海外市场,取得了不错的市场成绩。 当然,正是合作伙伴终端产品取得的成绩,成就了高通在5G市场的话语权。根据Counterpoint近期发布的报告显示,高通2020年财年第四季度占据了全球5G芯片市场最大的市场份额,在全球售出的所有5G手机中,39%使用高通芯片。随着全新一代的高通骁龙888 5G芯片的推出,高通在5G芯片领域的占有率应该还会进一步攀升。因为高通这款5G芯片确实是非常优秀。 高通骁龙888 5G芯片,让安卓阵营首次拥有了超级大核X1,面积是A78的2.3倍,同频率性能比A78提升了23%,无疑是安卓手机发展史的里程碑。高通5G芯片骁龙888的GPU升级到了Adreno 660,渲染性能比上代性能提升35%,同时将能效提升20%,为高帧率、低延迟的游戏体验提供保障。众所周知,高通骁龙旗舰芯片都是采用自研GPU,性能基本都领先公版,在同类产品中具有优势。 高通拥有领先业内的5G解决方案,骁龙888是高通首款使用骁龙X60 5G基带的芯片组。与前代产品不同的是,此次高通骁龙888的5G基带是集成的,功耗更低,发热更少,有效解决5G手机因为高速率而产生的发热问题。高通骁龙X60 5G基带支持sub-6以下5G和 mmWave毫米波,能够提供高达 7.5 Gbps 的下行速度和高达 3 Gbps 的上行速度,是目前全球最快的5G速度。对于WIFI连接,高通骁龙888 5G芯片也是毫不逊色,采用了FastConnect 6900系统,Wi-Fi连接速度可以达到 3.6 Gbps,是业界最快的移动 Wi-Fi。 另外,高通骁龙888 5G芯片制程工艺也升级为5nmEUV工艺,5nm意味着每平方毫米布局的晶体管数量超过1.7亿个,较7nm提高了80%,从而将晶体管整体体积进一步缩小,大幅降低产品功耗。记得高通骁龙865从10nm工艺提升到到7nm,带来的是约30%的功耗降低,而高通5G芯片骁龙888升级为5nm,也就意味着在执行日常负载任务时,它会更为出色。除此之外,在影像、AI、安全性等诸多方面,高通骁龙888 5G芯片也都有非常精彩的表现。 总而言之,高通骁龙888 5G芯片作为高通打造的最新旗舰,运用了大量的新技术,使用最先进的工艺,无论是性能还是体验,均达到了新高度。想要尝鲜感受一下这款高通5G芯片的强大魅力,搭载高通骁龙888 5G芯片的小米11已经正式发布了。3999元起的上市售价性价比超高,非常实惠,值得入手。

摩登3注册开户_涉足水利行业,蒲公英4G工业路由器助力IOT智能互联

目前的水文监测系统中主要是对保护区域内的水位、水温、雨量、流速进行测量,将底层传感器采集到的信息如水位、水温、水质、流速甚至包括摄像头采集的图像信息传输至上层云平台,从而实现一个完整的远程数据监控功能。通过获取现场实时画面来判断现场状况,以提前预警车辆和专业人员做好抢修准备。 但在部署PLC设备及监控系统时会面临网络传输的难题,因为水文监测系统一般部署至郊区江河水流附近,没有现成布线网络;不同水位的监控点相隔较远,无法大规模布线或因布线成本较高;而布线成功也将面临着网络类型不同,无法为监控系统提供公网IP的难点。 传统的解决方案是在每一台采集的(小范围的)设备中均添加一块4G模块并搭配物联网卡使用,通过AT指令操作使其联网并发送至云平台,最终实现联网并采集相关数据。但这种方案需承担高昂的费用,单块4G模块的成本已接近百元以上,会对架设成本造成很大压力,并且也无法解决无公网IP的难点。 蒲公英4G工业路由器智能组网解决方案 蒲公英智能组网是由贝锐科技(Oray)推出的基于SD-WAN组网技术的解决方案,轻松实现各种复杂环境下设备的互联互通。 通过蒲公英4G工业路由器与蒲公英访问端成员结合的形式,可在小范围内对各水文监测站点现场进行检测,并将实时数据传输至信息中心平台,在操作人员和管理人员远离现场的情况下,对站点进行实时监控、远程管理和维护等。相比传统嵌入4G模块的方案,该方案仅需在小范围内部署一台蒲公英路由器即可,节省设备及物联网卡的费用。 水文监测站点部署蒲公英4G工业路由器 水文监测站点按照预先设定的标准对雷达水位计进行数据采集,并将相关水位数据传输至各监测点的PLC模块中,随后在水文监测系统现场部署蒲公英4G工业路由器,为现场的PLC设备及监控设备提供网络。 信息管理中心部署蒲公英X86高性能路由器 在信息管理中心部署蒲公英X86高性能路由器,通过蒲公英网络管理平台将各监测点与信息管理中心的高性能路由器进行智能组网互联,构建虚拟局域网。各监测站点的数据和画面便能通过该虚拟网络传输至信息管理中心,实现数据的存储、计算、分析和监控功能,及时对各监测站点返回的数据进行处理,实时监测降雨量信息。(方案拓扑图如下) 部署简单,显著降低工程成本 蒲公英智能组网轻松实现多个水文监测点的设备互联,将水文数据以4G网络传输,无需重新布线,且部署简单易上手,无需专业人士指导安装,一定程度上降低建设水文监测系统成本。 看门狗防护保障水文监测稳定运行 蒲公英工业4G路由器出厂自带硬件级看门狗保护,设备运行阶段将不断监视程序运行的时间,如出现故障立即重启,有效保障水文监测系统的稳定运行。 支持云端管理,远程运维更省心 蒲公英4G工业路由器支持云端管理,电脑登录oraybox.com或手机下载蒲公英管理APP,均可实现无需亲临水文监测系统现场,在远端对设备进行管理、运维,降低后期人工运维成本。 加密级芯片,安全有保障 水位数据和图像数据的在蒲公英智能网络传输,通过在公共网络上建立独立专用的传输隧道以及采用高级别的加密技术,避免数据在传输过程中被修改和盗用,保护水文数据的安全性及完整性。 蒲公英智能组网高效稳定的实现水文数据的传输和存储,有效提升水文部门的工作效率。管理人员在信息中心即可观察实时水位,降雨量情况,并可预见水文变化,提前做好防汛工作,为保护区域内的水情预警、领导指挥决策、应急会商等业务提供数据支撑。