Category: Basics
-
短时傅里叶分析(STFT)简介
短时傅里叶分析是时频分析中经常用到的技术,由于傅里叶分析存在着时间跨度较宽导致分析结果中的频率特性中缺少了时间信息,甚至不同的信号可能会得出相同的傅里叶分析结果(如左右对称的两个信号,其傅里叶分析结果相同)。下面示例代码是短时傅里叶变换的numpy的逻辑实现,是基于局部(localized time zone)的傅里叶分析得出结果所拼接而成。其中hop_length即为短时傅里叶分析的时间分辨率。 以上图示为短时傅里叶分析的三维可视化结果,也有基于二维的可视化方法,一般称为光谱(声谱)图,如下所示为一段音频的频谱分析结果(Speech spectrogram,频率大小这个维度用颜色来表示)。 上面的声谱图可以有如下的解释: 1、基于梳状图的水平线们为对应的基频; 2、垂直线对应突然的语音信号, 通常是瞬变特征,典型的瞬变语音为辅音;爆破音;塞音; 3、在高频信号部分有较大能量的区域(更亮的颜色),一般对应着摩擦音(fricatives) 后续将继续更新光谱图的更多的分析技巧,如频率包络图等。 References
-
云计算相关技术简介(五)-Neutron组件相关技术概念简介
Neutron组件模块是openstack项目中负责提供网络服务的组件,它基于软件定义网络的思想,实现了网络虚拟化下的资源管理。本篇文章将简要介绍neturon网络组件的相关的技术的简要介绍,具体的相关技术的详细介绍后面会在实践环节安排专门的篇幅进行阐述。 一般的,OpenStack中网络实现包括vlan、gre、vxlan等模式,在OpenStack中,所有网络有关的逻辑管理均在Network节点中实现,例如DNS、DHCP以及路由等。Compute节点上只需要对所部署的虚拟机提供基本的网络功能支持,包括隔离不同租户的虚拟机和进行一些基本的安全策略管理(即security group)。安全组的对象是虚拟网卡,由L2 Agent来实现,比如neutron_openvswitch_agent 和 neutron_linuxbridge_agent,会在计算节点上通过配置 iptables 规则来限制虚拟网卡的进出访问。计算节点上运行着虚拟机。如果不启用 DVR 特性,则所有的网络相关的服务,都在网络节点上进行。即计算节点上的网络只需要实现二层转发即可。 GRE:General Routing Encapsulation,一种通过封装来实现隧道的方式。在openstack中一般是基于L3的GRE,即original pkt/GRE/IP/Ethernet(从左到右layer依次降低)。隧道协议将这些其他协议的数据包重新封装在新的包头中发送。被封装的数据包在隧道的两个端点之间通过网络进行路由,被封装数据包在网络上传递时所经历的逻辑路径称为隧道。简单来说,隧道技术是一类网络协议,是将一个数据包封装在另一个数据包中进行传输的技术;使用隧道的原因是在不兼容的网络上传输数据,或在不安全网络上提供一个安全路径。通过网络隧道技术,可以使隧道两端的网络组成一个更大的内部网络。 DVR(Distributed Virtual Router,DVR),按照 Neutron 原先的设计,所有网络服务都在网络节点上进行,这意味着大量的流量和处理,给网络节点带来了很大的压力。这些处理的核心是路由器服务。任何需要跨子网的访问都需要路由器进行路由。为了降低网络节点的负载,同时提高可扩展性,OpenStack 自 Juno 版本开始正式引入了分布式路由DVR特性(用户可以选择使用与否),来让计算节点自己来处理原先的大量东西向流量和非 SNAT 南北流量(有 floating IP 的 vm 跟外面的通信)。这样网络节点只需要处理占到一部分的 SNAT (无 floating IP 的 vm 跟外面的通信)流量,大大降低了负载和整个系统对网络节点的依赖。很自然的,FWaaS 也可以跟着放到计算节点上。DHCP 服务、VPN 服务目前仍然需要集中在网络节点上进行。 VXLAN,VXLAN(Virtual Extensible LAN)是一种用于解决数据中心内部网络限制和提高网络的灵活性与可扩展性的网络虚拟化技术。它于2011年被提出,旨在扩展和改进传统的虚拟局域网(VLAN)功能。VXLAN技术通过封装原始以太网帧(包含MAC地址、VLAN标签等)到UDP报文中来工作。这种封装允许VXLAN跨越不同的网络段和IP子网(将原始以太网帧作为应用数据用UDP协议进行封装),从而实现网络虚拟化功能。具体的关于VXLAN的详细介绍请参考引文。 VXLAN现在是比较常用的SDN的虚拟网络的实现。这里将详细介绍一下相关的实现原理细节。上面就是VXLAN系统的网络结构图,对相关组成部分做一些介绍,如TAP设备:模拟一个二层的网络设备,可以接受和发送二层网包。VETH:虚拟ethernet接口(virtual eth),通常以pair的方式出现,一端发出的网包,会被另一端接收,可以形成两个网桥之间的通道。在上图中的qbr-xxx/qbr-yyy一般简称为qbr。qbr是Quantum Bridge的缩写,而OpenStack网络组件的前一个名称就是Quantum,qbr就是虚拟网桥,用来做安全组控制的。qvb:neutron veth, Linux Bridge-side。qvo:neutron veth, OVS-side。br-int是集成的网桥,实现将数据包转化为VLAN包作用;br-tun是将VLAN进一步封装成VXLAN隧道技术,而且上图左边部分的这些虚拟实现都是在计算节点内部实现的相关的网络虚拟化功能。其中下面以出报文和入报文的过程示例进行一个简要的说明。 其中上图中的计算节点和网络节点通过物理交换机相连,把vxlan的包封装成IP包进行传输。 出报文的转换过程 注:出br-tun时,VLAN变为VXLAN,并转为VNI=100。 入报文的转换过程 网络节点担负着进行网络服务的任务,包括DHCP、路由和高级网络服务等。一般包括三个网桥:br-tun、br-int…
-
云计算相关技术简介(三)-网络组件
上篇文章介绍的是OSI网络模型,主要是针对网卡(NIC)的功能进行的计算机信息通信建模,并提供了操作系统级程序(驱动)的实现,这篇文章介绍机器之间通信所需的机器内部的网卡设备及通信协议外,机器与机器以及局域网与局域网之间所需的网络组件。 1、switch ,交换机,交换机(Switch)意为“开关”是一种用于电(光)信号转发的网络设备。它可以为接入交换机的任意两个网络节点提供独享的电信号通路。最常见的交换机是以太网交换机。其他常见的还有电话语音交换机、光纤交换机等。交换机是一个扩大网络的器材,能为子网络中提供更多的连接端口。两层交换机:工作于OSI模型的第2层(数据链路层),故而称为二层交换机。三层交换机:具有部分路由器功能的交换机,工作在OSI网络标准模型的第三层,具体的工作原理可以参考引文。星型网络拓扑几乎是Ethernet(以太网)网络专用,它是因网络中的各工作站节点设备通过一个网络集中设备(如集线器或者交换机)连接在一起,各节点呈星状分布而得名。这种结构是目前在局域网中应用得最为普遍的一种,在企业网络中几乎都是采用这一方式。 2、Gateway,网关,顾名思义,即为网络关口,即可以理解为网络之间的关口(gate,门),不同局域网络之间通过网关进行通信,同时也可以负责不同网络之间不同的协议之间的通信所需要的协议转换,就好比语言翻译,不同的语言之间要通过一个翻译机才能相互理解。 3、routers,路由器,负责接收,分析和向前发送(forward)网络数据包,路由器通过分析网络包中的目的地(destination, or target ip)通过路由表和头从而选择最好的数据包传输路径。路由器设备带有固定的路由选择算法,比如最短路径算法或扩展等,具体的路由算法以后在计算机网络的课程中去进一步详细介绍。 简要总结一下,Hub,switches,routers,gateways,一般hub,switch在局域网组件中使用,gateway主要的功能在于不同网络协议之间的通信,router主要的作用在于不同局域网之间的信息数据包的转发。选择合适的网络组件去搭建和配置网络将会在后续的工程实践中去进一步介绍和总结。 References
-
云计算相关技术简介(二)-OSI网络模型
本篇文章主要介绍云计算环境中的相关的网络技术,主要面向openstack network(neutron)组件,其提供了网络服务API,实现了一个Software Defined Network(SDN)的解决方案。本篇介绍网络技术中的基础概念和知识。 1、Ethernet,以太网。以太网是一种计算机局域网技术。IEEE组织的IEEE 802.3标准制定了以太网的技术标准,它规定了包括物理层的连线、电子信号和介质访问层协议的内容。以太网是应用最普遍的局域网技术,取代了其他局域网技术如令牌环、FDDI和ARCNET。在OSI(Open System Interconnect)模型中,以太网协议为第二层,也就是数据链路层(data link layer),在数据链路层,主机之间通过交换frames(数据帧)进行通信,每个主机在局域网中由一个唯一的物理地址标记media access control(MAC) address。在openstack中,每一个虚拟机器的实例都由一个唯一的mac地址,这个mac地址和宿主机的mac地址不同。mac地址是一个48位的信息,通常用十六进制进行标识,比如08:00:27:b9:88:74。一般的mac地址是硬编码到网卡(Ethernet network interface card ( NIC ))中去的,不过现代的NIC允许通过程序去更改mac地址。在linux中可以通过ip命令查看网卡信息。在局域网内部,每一个主机都可以直接发送帧信息到其他的主机,局域网也可以支持广播,也就是一台主机可以发送帧信息给在网络上的每一台主机(通过特殊的目标地址ff:ff:ff:ff:ff:ff),ARP和DHCP就是利用了局域网广播技术的两个很有名的协议,局域网支持广播,有时候局域网也被称为broadcast domain. 当一个NIC接收到一帧数据时,一般NIC会check帧的目标地址是否位NIC的mac或是广播地址,但是在云计算环境中,frame的目标地址也可能是计算实例的,因此网卡也可以设置promiscuous mode,不过滤帧数据,直接将所有的帧数据传给上层的操作系统。现代的局域网用交换机去实现网络主机之间的互联,网络交换机,是一个扩大网络的器材,能为子网络中提供更多的连接端口,以便连接更多的计算机。 2、VLAN,虚拟局域网,VLAN是建立在物理网络基础上的一种逻辑子网,因此建立VLAN需要相应的支持VLAN技术的网络设备。当网络中的不同VLAN间进行相互通信时,可以采用路由的支持,这时就需要增加路由设备——要实现路由功能,既可采用路由器,也可采用三层交换机来完成。openstack可以利用vlan技术隔离不同项目的网络交通(traffic),通过一个物理的switch,可以实现三个隔离的网络(三个vlan)。一个虚拟局域网中的站点所发送的广播数据包将仅转发至属于同一VLAN的站点。 3、子网和ARP,IP协议中的IP地址一般分为两个部分,网络号(network number)和主机标识(host identifier),两个主机如果具有相同的网络号,则他们属于同一个子网。ARP假设所有在同一个子网的机器在同一个局域网内,网络管理员在分配IP地址和掩码的时候需要注意这一点,否则ARP可能不能正常工作。 子网掩码有两种表示方式,如IP地址192.168.1.5,前24位位网络号,再网络掩码为255.255.255.0,或可以一起写为192.168.1.5/24。当第一次host a尝试和host b进行通信时,不知道目标的mac地址位置,host A就需要发送一个ARP请求广播到局域网,然后host B接收到这个信息之后知道是要相互通信(ip地址为host b的地址),就将自己的mac地址发给了a。然后a和b就可以直接发送帧信息了。 4、DHCP,Dynamic Host Configuration Protocol (DHCP) 可以动态获取IP地址,一个DHCP服务器将IP地址分发给网络主机(也可称为DHCP clients),一般过程为:(1)客户端(DHCP Client)发送获取IP请求,广播一个udp请求,(2)DHCP server发送一个可用的ip地址信息给client,(3)client发送一个request给server,同意这个ip,(4)server发送一个信息给client,同意这个分配。 5、IP,IP协议定义了怎样去将数据报文通过路由达到不同的局域网的主机上。IP协议依赖于特定的网络主机,称为路由或网关。路由是一个主机连接至少两个局域网络,能够将数据报文从一个局域网前向发送到另一个局域网,一个路由器有多个ip地址,每个ip地址属于一个局域网。 6、TCP/UDP/ICMP,建立在IP层之上的传输层协议,TCP为面向连接的协议,路由只在连接建立的时候,后续为有序传输;UDP为非连接的协议,每个UDP报文相互独立路由,上层的应用可以依靠相关的报文字段在应用层上进行组装。 还有上层的诸多应用协议,如HTTP,FTP,HTTPS等,都是在IP层之上建立的应用层协议,如有必要,可以根据自己应用的特点自行设计网络应用协议。 OSI model是计算机网络技术的重点内容,也是计算机通信技术核心和关键,是计算机网络技术的基石,在有设计网络通信的软件开发中,我们一般会用到抽象的软件开发库进行开发,如基于套接字(socket)的开发,有系统提供原生的socket编程接口,以及一些优化了开发过程的网络开发库,如python的twisted,c++ boost的asio库等等。 互联网七层或五层协议设计精巧,好比剥洋葱一样,下一层会在上一层的基础上添加一定的关于特定层信息的报文头,通过每个层的不同的抽象功能,使得计算机通信从少量的文本,到大量的流媒体带宽需求都会显得游刃有余。而且基于端口的协议实际上也借鉴了现实世界中的港口的概念,数据传输好比货物运输,计算机的不同端口就实现了每个任务独立的通信。因此可以说计算机网络技术是单个计算机的精兵强将变成声势浩大的百万大军的有利武器,是计算机技术中的最伟大发明之一。更多的网络协议细节会后续在计算机网络课程中详细介绍。 References
-
国内互联网发展简史及社交网络
互联网的出现使得人与人之间的交往突破了传统的物理距离的局限,使得宽广的地球变成了地球村。在上世纪90年代的时候,北京才连通国际网络。但也就是30左右的历史,互联网发生了翻天覆地的变化。 从早期的电子邮件和简单网页,到后面的bbs和一些社交网站如人人网chinaren等,以及QQ等即时聊天工具的兴起,社交网络逐渐发展起来。后面出现了3G和4G网络以及智能手机,移动互联网和移动即时通信app,网络带宽的增加,使得即时通信从早期的文字图片(如微信朋友圈)发展到现在的视频语音甚至高清视频电话。后来流量的降费使得短视频应用逐渐流行,抖音,微信短视频等应用,网络直播,直播带货等应用逐渐流行起来。网络社交的形式发生了很大的变化,人们沟通交流更加方便快捷多样。 社交媒体的流行使得人们的社交模式发生了很大的变化,人们认识的人数也不再受很大的限制,认识的人的群体也更加庞杂多样,使得我们每天接收的信息也多样化,怎么去解读和处理这些信息也成为了社交网络带给人们的新课题。 互联网的出现普及和流行使得我们的生活空间同时出现了物理空间和数字网络空间。而且网络空间的信息传播快,能接触到更多的人,更远的物理距离,使得信息的流通更加便捷高效,我们获取信息,交流沟通将不再有什么局限,但同时也存在着网络信息的一些安全问题需要注意。这里列出几条:1、网络虚假信息,可能有人故意捏造传播虚假信息,网络传播的扩散效应非常明显,这类信息有时严重干扰人们的日常生活秩序;2、网络暴力信息,如网络攻击,不良文化和思想的传播等,这类信息是一种愤怒和敌意的网络大范围传播,也是一种信息战争,广义上来说涉及网络空间安全;3、网络社交的多边主义关系问题,也是社交中需要注意调整的,类比于国与国之间的外交,多方的外交由于信息获取的对称或不对称有时候也会带来网络上的潜在矛盾和意见分歧; 良好的互联网数字空间是需要每个人去维护的,建立更好的温暖的互联网信息交流空间,是数字化网络文化安全治理的一个内容,需要每个人参与,也需要网络空间的安全维护者一起去给网络数字空间带来清新的安全的温暖的氛围,和我们的自然物理空间一样。
-
傅里叶变换
今天说一说数学上的傅里叶变换,后面可能在做工程应用上会用得到。傅里叶分析的使用场景挺多,有对信号特性进行分析的,有数据压缩方面的应用(如jpeg图像压缩用到了DCT,余弦正交基)。 傅里叶变换是将信号从一维时域信号(二维或三维空间域信号)转换为频域的过程,频域就是频率域,频率是变化快慢的度量,其单位为赫兹(hz)。 傅里叶分析基于三角函数的正交性原理,从直流分量,到基频,倍频之间存在着正交性,从而利用这种性质将函数分解为不同的正交基下面(不同频率)的幅值、相位。 傅里叶变换可以在实数域进行,也可以在复数域进行,相比于实数域,复数域的表达式更简洁,但是理解起来稍微麻烦些(欧拉公式的理解+复数域表示相位和幅值)。具体可以参考引文中的介绍。 基于python语言的傅里叶变换的代码实现有基于numpy的实现,如:Xfft = np.fft.fft(x)(其中x为原始信号信息),具体结果的解释参考引文。 References
-
IT研发过程管理工具集锦
1、代码管理工具及相关研发过程管理工具 2、集成开发环境VSCODE 3、其他研发过程管理