- 博客(71)
- 资源 (15)
- 收藏
- 关注
原创 前端刷题-深浅拷贝
浅拷贝与深拷贝的区别在于,深拷贝是层级式的将原数据完全拷贝成为一份新的数据,浅拷贝仅仅是对数据的第一层进行拷贝。当改变拷贝数据的深层数据时,浅拷贝会影响原数据而深拷贝不会影响原数据。在实际开发中通常不会这么使用深拷贝,ES6 中的 JSON.parse(JSON.stringify(obj))也可以用于深拷贝,但有一定的限制比如不能用于复制函数和循环引用。
2023-08-30 19:25:08 362
原创 前端刷题-Promise系列
接收一个 Promise 数组,返回一个新的 Promise,在所有输入 Promise 都解决后解决,解决值是一个包含所有 Promise 结果的数组,一旦有一个被reject,则立即返回这个reject的结果。如果所有 Promise 都拒绝,那么新 Promise 也会拒绝。接收一个 Promise 数组,返回一个新的 Promise,当任意一个输入 Promise 解决或拒绝时,新 Promise 也相应地解决或拒绝,永远返回最快的一个的结果。
2023-08-30 16:00:23 386
原创 vue项目搭建(offline方式)
在C盘的user文件夹的用户名目录,创建一个.vue-template文件夹,将解压后的文件重命名为webpack,粘贴到此文件中。ps:当前项目在npm run dev后,并没有自动打开页面,可在项目文件中设置,将以下内容改为true即可。,解压提取到本地用户目录下的.vue-templates目录。在浏览器访问以上url,vue项目搭建成功。需要安装node.js,安装步骤可参考。
2023-01-25 11:10:08 2996 2
原创 核心网架构演变过程
2G GSM核心网架构BTS:Base Transceiver Station 基站收发单元BSC:Base Station Control 基站控制器MSC:Mobile Switching Center 移动交换中心VLR:Visitor Location Register 来访位置寄存器HLR:Home Location Register 归属位置寄存器AUC:Authentication Center 鉴权中心SGSN:Serving GPRS Support Node 服务GPR
2022-05-18 09:59:39 1348
原创 node.js+vscode安装与配置
node.js从官网下载安装包https://nodejs.org/zh-cn/下载完成,双击进行安装,选择同意协议条款,next选择安装路径,例如D:\Program Files\nodejs\,后续选择均为默认设置即可。在安装的过程中已经自动配置了环境变量以及安装好了npm,可以在命令行执行node -v和npm -v查看到各自的版本即为安装成功。为避免在执行全局安装的时候默认将模块安装在了C盘导致占用的C盘空间,我们可以将npm在安装全局模块时的路径和缓存cache的路径进行修改。默认位置
2022-01-22 11:09:22 12050 6
原创 深度强化学习调研
深度强化学习(DRL)(一)强化学习强化学习(Reinforcement Learning,简称RL)是机器学习领域的一个研究热点,当前已经广泛应用于工业制造、仿真模拟、机器人控制、优化与调度、游戏博弈等领域。不同于深度学习侧重于感知和表达,强化学习则侧重于寻找解决问题的策略,强化学习中的智能体在与环境交互的过程中,为了获取更大的累计奖赏值而不断优化动作策略,当累积的奖赏值达到最大后且稳定则意味着学习到全局或局部最优策略。强化学习任务通常使用马尔可夫决策过程(Markov Decision Proces
2022-01-22 10:26:42 1447
原创 DID去中心化身份认证技术调研
数字身份国际电子技术委员会将“身份”定义为“一组与实体关联的属性”。这里的实体不仅仅是人,对于机器或者物体都可以是实体,甚至网络中虚拟的东西也可以是实体并拥有身份。随着互联网的出现和普及,传统的身份有了另外一种表现形式,即数字身份。一般认为,数字身份的演进经历了以下四个阶段:(1)中心化身份:中心化身份是由单一的权威机构进行管理和控制的,现在互联网上的大多数身份还是中心化身份,比如ICANN管理的域名与IP地址分配,以及PKI(Public Key Infrastructure)系统中的CA(Cert
2022-01-22 10:20:18 13607
原创 区分:Java中的重载与重写
重载(Overload)同一个类中多个方法有相同的方法名,但是参数列表不同(不考虑修饰符和返回值类型),可以调用同一个方法,传入不同参数实现相似的功能,调用时根据函数参数类型和个数进行调用。两同:①在同一类中②方法名相同一不同:参数列表不同例:public class OverLoadTest { public static void main(String[] args) { OverLoadTest overLoadTest = new OverLoadTest(); over
2021-08-26 19:02:39 112
原创 工业互联网隐私保护技术
隐私保护技术概述隐私简单的说,隐私就是个人、机构等实体不愿意被外部世界知晓的信息。在具体应用中,隐私即为数据所有者不愿意被披露的敏感信息,包括敏感数据以及数据所表征的特性。现有的隐私度量都可以统一用“披露风险”来描述。披露风险表示攻击者根据所发布的数据和其他背景知识,可能披露隐私的概率。若????表示敏感数据,事件????????表示“攻击者在背景知识????的帮助下揭露敏感数据????”,则披露风险????(????,????)表示为????(????,????)=???????? (??????
2021-07-22 16:11:40 2431 1
原创 springboot端口配置以及banner生成
端口修改springboot内置的Tomcat默认的端口号为8080,如要修改端口号(以8081为例),需要在application.properties文件加入server.port=8081有时候我们可能需要启动不止一个 SpringBoot,而 SpringBoot 默认的端口号是8080,所以这时候我们就需要修改 SpringBoot 的默认端口。banner生成banner在线生成网站:http://www.bootschool.net/ascii在application.prope
2021-01-16 10:59:04 303
原创 idea自动创建的springboot初始项目结构分析
在上一篇博客https://blog.csdn.net/qq_44628230/article/details/112620034的基础上,我们使用idea的spring initializr快速建立了项目,在左侧我们可以看到自动生成了以下文件,那么这些文件都有什么用呢?下面我们依次来分析。生成的文件的主要部分在于以下四个方面1、程序的主启动类Springboot01helloworldApplication2、一个application.properties配置文件3、一个测试类Springbo
2021-01-15 21:24:53 985
原创 Springboot Web:从零开始写helloworld
环境准备:Java jdk1.8maven3.6.0idea 2019.1.3创建项目工程使用idea创建项目,选择Spring Initializr快速创建输入要创建的项目信息,Packaging为Jar包,Java Version选择8,例如直接导入Spring Web依赖,其他依赖根据项目需要来进行选择导入选择工程项目的存储路径,例如完成创建,首次创建需要联网下载很多jar包,因此速度会比较慢,创建完成后可在左边栏看到以下文件在Springboot01helloworld
2021-01-14 18:15:46 294 1
原创 idea+maven的安装与配置
环境:Java1.8(此博客默认已安装配置好Java环境,如未配置请先配置Java环境)版本信息:idea2019.1.3maven3.6.0Idea首先可从官网下载idea对应版本的idea安装包(社区版是免费的但是功能受限,旗舰版功能完整但是是收费的,建议旗舰版不然后期开发过程中各种问题将随之而来)版本不需要太高,稳定就行。此处提供一个idea2019.1.3的下载链接,亲测可使用到2089年:链接:https://pan.baidu.com/s/1pfZYJigfhAPL1AXoEJIc
2021-01-14 11:48:52 9487 6
原创 二分查找法(折半查找法)JAVA实现
下面的代码中展示有简单查找法和二分查找法(也叫折半查找法),将进行依次分析。/*需求:查找某个元素在数组中的位置思路:遍历数组中的每个元素与所要查找的元素进行比较,相同时返回其索引值步骤:1.定义生成一个要查找的数组2.将要查找的元素与数组元素对照,相同时返回其索引值3.没有查找到相应的元素,则返回-1*/class Array5{ public static void main(String[] args) { int[] Arr = new int[]{12,14,15,1
2020-12-01 10:54:03 959
原创 Java实现数组排序
选择排序法算法原理首先原数组(未按顺序)如下(第一行表示对应位置存储的数据,第二行是其对应数据的索引值)选择排序法即是先将第一个数据分别与右侧其他数据依次比较,当第一个数据较大时,对调两数据位置,最终第一个位置的数据将是数组元素的最小值;再对第二个数据分别与右侧其他数据依次比较,当第二个数据较大时,对调两数据位置,最终第二个位置的数据将是除第一个数据之外的数组元素的最小值。同理可以进行其他位置的比较和对调。如下:程序代码class test{ public static void main
2020-12-01 10:31:45 3941
原创 ZK Rollup与零知识证明
背景区块链公链自诞生以来,一直面临着TPS (Transactions Per Second)不高的问题(例如比特币每秒仅支持7笔交易,以太坊的TPS只有15也就是每秒只能处理15笔交易)。这严重限制了区块链应用的大规模落地。因此业界很多技术人员尝试为区块链扩容。但区块链扩容受到Vitalik提出的不可能三角的限制,不可能三角是指区块链系统设计无法同时兼顾可扩展性,去中心化和安全性,三者只能取其二。这是一个很让人失望的结论,但我们必须知道,一切事物都有自己的边界,公链不应该做所有的事情,公链应该做它该做.
2020-11-24 19:11:28 1115 2
原创 初识零知识证明
问题引入:假设你的手里有红绿两个小球,假如你有一个对颜色不敏感的朋友,你不能告诉他你两个球分别是什么颜色,但是却要让他相信那是两个不同颜色的球?这时你该如何做呢?解决办法:先将红绿两个球分别放在他的两只手中,并记住初始状态左右手中的颜色;让他将手放背后,随机决定是否在背后交换手中的球,然后将手中的球展示给你并让你判断他是否在背后交换了手中的球,这时,你通过对比他手中球的颜色来回答他的问题。实验结果:由于你能分辨出两个球的颜色,自然根据颜色是否交换你就能判断出他是否在背后交换了两个球。而他知道自己是否交换
2020-11-16 14:59:50 350
原创 解决Notepad++编写的Java程序在cmd窗口编译时中文注释报错问题
在刚开始学习Java的过程中,考虑到记事本应用没有行号标识,不便于找对应的报错位置,且Eclipse对于新手来说又太强大,故选择使用Notepad++编写java程序。Notepad++可以通过选定的语言自动进行相应的空格以及关键字高亮提示以及函数应用提示等。但是在使用时却发现利用Notepad++编写的java程序当带有中文注释的时候,在cmd窗口编译运行的过程中会报错,例如:/*需求:练习一个Hello World程序。思路:1.定义一个类,因为JAVA程序都定义类中,JAVA程序都是以类的形
2020-10-30 15:50:11 5259
原创 随机信号处理之功率谱估计中均方误差随信噪比变化的情况
本博客是在之前一篇博客Levinson-Durbin递推算法的基础上,另外编写了一个程序,以N=256点,P=128阶为例,分析频率估计的均方误差和信噪比之间的关系。由未加噪声的信号使用自相关法求出信号功率Power,分别取噪声功率为1-10000即(标准差a为1-100),转化为信噪比关系:每种噪声标准差情况下进行500次求功率谱并寻峰进行频率估计,求出对应的频率估计的均方误差并画出与SNR的关系曲线:MATLAB程序结果:Python程序结果:实验结果与理论情况相符合,MSE 都有一个随
2020-07-16 17:12:16 5446 4
原创 OpenCV图像处理之形态学处理
原理形态学处理又称为形态学变换(Morphological Transformations),是图像处理中一种基于形状的简单变换。它的处理对象通常是二值化图像,也即只有黑白两种颜色。通常,形态学变换有两个输入:原二值图像,卷积核;一个输出:变换后的图像。膨胀与腐蚀是最基本的两种形态学变换方法,而除此之外的形态学处理的常规操作(开运算、闭运算、梯度运算、礼帽运算以及黑帽运算等)则是这两种方法的组合。膨胀和腐蚀是针对较亮的像素的两种相反的操作,即较亮的像素范围会膨胀扩大和被暗色腐蚀变小。腐蚀:卷积核的中心
2020-06-29 10:51:47 2218
原创 自适应滤波及其Python实现
由于原博客在word里编辑,插入了很多Mathtype公式,而CSDN不支持Mathtype,转换格式出现了很多麻烦和排版混乱,故此博客部分采用截图展示。原理程序及结果Python程序:(1)LMS算法(2)求MSE结果:分析图1.1上图是滤波器输入信号,即滤波前含噪声的接收信号x(n)波形,从图中我们可以看出,输入信号中的噪声引起波形的随机性,对于有效信号s(n)的原波形造成了不同程度的波动,要想近乎完美的得到s(n)信号,必须进行滤波,而又因为噪声的随机性
2020-06-29 10:08:13 8152 1
原创 现代法谱估计(4)Music算法MATLAB及Python实现
原理原博客是用word编辑成的,插入了很多Mathtype公式,而CSDN不支持此格式,转换格式后出现了很多麻烦和错误,故此博客直接放了截图,请见谅。程序和结果MATLAB程序:结果:Python程序:结果:分析由上图可见,我给程序输入的N为256,信号中f1=0.1,f2=0.13,为了看得明显,我把f1幅值调大了,在图中我们可以看到对应的位置出现了峰值,寻峰得到频率估计均为0.1和0.3左右。程序中我取的 的范围是0到π弧度,所以也只是画出了0.1到0.5
2020-06-29 09:52:46 10132 19
原创 现代法谱估计(3)Burg算法MATLAB及Python实现
原理前面的Yule Walker方程和Levinson Durbin算法都用到了信号的自相关序列,但是这样可能会存在自相关估计不准的问题(默认为序列长度为N,N的取值以外取不到的点都默认为0)。而Burg是一种不需要自相关函数,直接由观测数据求解反射系数的方法,是一种与预测误差格型滤波器密切相关的算法。首先将预测的概念予以推广,不再局限于由过去估计现在或未来,也可以由现在估计过去。为便于区分,将前者叫做前向预测,后者叫做后向预测,将“由随机序列的一些已知值的线性组合去估计序列的未知值”称作线性预测。将p
2020-06-29 09:41:15 13275 11
原创 现代法谱估计(2)Levinson-Durbin递推算法MATLAB及Python实现
原理Levinson-Durbin递推算法是解Yule Walker方程的快速有效的算法,Yule Walker方程是p+1元线性方程组,它的一般解法是矩阵求逆或高斯消去法。通常都尽量避免使用矩阵求逆运算,因为它的运算量较大。如果利用高斯消去法直接求解线性方程组,其运算级约在p3数量级,而运用Levinson Durbin算法,可以将运算量减少到p2。Levinson-Durbin算法是从一阶开始,由p-1阶模型的递推求解p阶模型的参数。用 ap(i)表示递推过程中在阶次为p时AR模型的第i个系数,i=
2020-06-29 09:14:33 13806 1
原创 现代法谱估计(1)Yule Walker 方程法MATLAB及Python实现
原理AR模型的系统函数可以表示为:如果在白噪声 激励下模型的输出为x(n),则模型输入、输出关系的时域表达式为:此式为AR模型的差分方程。将白噪声 激励AR模型产生的输出x(n)叫做AR过程。根据相关卷积定理,若y(n)=x(n)*h(n),则有即卷积的相关等于相关的卷积。如果对上式两边求傅里叶变换,根据维纳辛钦定理和相关定理,有即输出自功率谱等于输入自功率谱与系统能量谱的乘积。根据谱分解定理,任何平稳随机信号x(n)都可以看成是由高斯白噪声激励一个因果稳定的可逆系统H(z)产生的输出
2020-06-28 18:02:50 12155
原创 经典法谱估计(3)窗函数法Python实现
原理我们在做FFT变换过程中只能对有限长度的时域数据进行变换,因此,需要对时域信号进行信号截断。即使是周期信号,如果截断的时间长度不是周期的整数倍(周期截断),那么,截取后的信号将会存在泄漏。为了将这个泄漏误差减少到最小程度,我们需要使用加权函数,也叫窗函数。加窗主要是为了使时域信号似乎更好地满足FFT处理的周期性要求,减少泄漏。加窗实质是用一个所谓的窗函数与原始的时域信号作乘积的过程(频域卷积)使得相乘后的信号似乎更好地满足傅立叶变换的周期性要求。例如,一个窗函数可以定义为:g(n)是窗函数,N是窗
2020-06-28 17:05:00 6128 1
原创 经典法谱估计(2)自相关法MATLAB及Python实现
原理对于确定性信号,可以用FFT做频域分析,得到其频域特性。对于平稳随机信号,因为是无限能量的信号,故其傅里叶变换不存在(在Z平面不满足绝对可和条件)。如果是截取随机序列的一段用FFT做频域分析,那么不同段求出的频谱必然是不同的,可见这种分析并无意义。而自相关序列是一个能量有限的确定性序列,故能满足傅里叶变换条件,且由维纳辛钦定理可知,其傅里叶变换就是原序列的功率谱,因此我们采用下面这种方法,也叫BT法。平稳随机信号的自相关函数的定义为:式中,x(n)和y(n)都是平稳随机信号,“*”代表取共轭。如
2020-06-28 16:54:10 7446
原创 经典法谱估计(1)周期图法MATLAB及Python实现
原理对于一个无限长序列x(n),其傅里叶变换DTFT(也可称作离散时间傅里叶变换)及其反变换的定义式为:但是在我们的分析处理过程中,只能分析处理离散化的信号,也即N点取样,对于一个长度为N的有限长序列x(n),其离散傅里叶变换及其反变换的定义式为:或者也可以写为式中x(n)和X(k)是一个有限长序列的离散傅里叶变换对。长度为N的有限长序列x(n),其离散傅里叶变换X(k)是一个有限长频域序列,其长度依然为N。对X(k)的表达式分析,可知其周期为N,我们现仅是截取一个周期内的频域信号进行分析。由
2020-06-28 16:35:34 16903 4
原创 17.EEPROM(IIC总线)
IIC串行总线的组成及工作原理采用串行总线技术可以使系统的硬件设计大大简化、系统的体积减小、可靠性提高。同时,系统的更改和扩充极为容易。常用的串行扩展总线有: IIC (Inter IC BUS)总线、单总线(1-WIRE BUS)、SPI(Serial Peripheral Interface)总线及Microwire/PLUS等。IIC总线是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线。IIC总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。IIC总线
2020-06-18 11:09:06 414
原创 16.串口通信
计算机通信是将计算机技术和通信技术的相结合,完成计算机与外部设备或计算机与计算机之间的信息交换。通信有并行通信和串行通信两种方式。在多微机系统以及现代测控系统中信息的交换多采用串行通信方式。并行通信:将数据字节的各位用多条数据线同时进行传送。(采用了8根数据线)控制简单,传输速度快,但由于传输线较长,长距离传送成本高且接收方的各位同时接受存在困难。串行通信:将数据字节分成一位一位的形式在...
2020-06-18 11:08:31 1409
原创 13.外部中断
外部中断0:通过按键K3实现LED灯状态反转:#include<reg51.h>typedef unsigned char u8;typedef unsigned int u16;sbit led=P2^0;//D1sbit k3=P3^2;//K3void delay(u16 i){ while(i--);}void Int0Init()//设置外部中断0{ EA=1;//打开总中断 EX0=1;//打开INT0的中断允许 IT0=1;//设置中断的触发方式为
2020-06-18 11:07:57 424
原创 15.定时器中断
利用定时器中断0实现LED1的闪烁(亮一秒暗一秒)#include<reg51.h>typedef unsigned char u8;typedef unsigned int u16;sbit led=P2^0;//D1void Timer0Init(){ TMOD|=0x01;//选择为定时器0模式,方式1,仅TR0控制启动 TR0=1;//打开定时器0 EA=1;//总中断 ET0=1;//打开定时器0中断 TH0=0xFC; TL0=0x18;//赋初值定时1m
2020-06-18 11:07:20 834
原创 14.定时器和计数器
CPU时序的有关知识:振荡周期:为单片机提供定时信号的振荡源的周期(晶振周期或外加振荡周期)该开发板外接12M(频率)晶振提供震荡周期状态周期:2个振荡周期为1个状态周期,用S表示。振荡周期又称S周期或时钟周期。机器周期:1个机器周期含6个状态周期,12个振荡周期。指令周期:完成1条指令所占用的全部时间,它以机器周期为单位。外接晶振为12MHz时,51单片机相关周期的具体值为:振荡周期...
2020-06-18 11:06:06 1392
原创 12.中断系统
中断:CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生);CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断 。引起CPU中断的根源,称为中断源。中断源向CPU提出的中断请求。CPU暂时中断原来的事务A,转去处理事件B。对事件B处理完毕后,再回到原来被中断的...
2020-06-18 11:05:30 497
原创 11.8*8LED点阵
将LED发光二极管分别集成封装,一共有64个LED。采用动态扫描的方式,可以显示数字和简单汉字。点亮对角线:循环发送每一行点亮对应的数据,再循环使低电平选中每一列。显示其他的和点亮对角线原理一致。循环发送行点亮对应的数据,再循环使低电平选中每一列。循环发送列点亮对应的数据,再循环使低电平点亮每一行。74HC595串行输入并行输出P00-P07分别是每一列,P00在最右边,P07在最左...
2020-06-18 11:05:07 761 1
原创 10.矩阵按键
即将独立按键进行重新组合。按键IO口前都有加上拉电阻。扫描原理:方法一:逐行扫描:通过高四位轮流输出低电平来对矩阵键盘进行逐行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,然后通过接收到的数据是哪一位为0来判断是哪一个按键被按下。方法二:行列扫描:我们可以通过高四位全部输出低电平,低四位输出高电平。当接收到的数据,低四位不全为高电平时,说明有按键按下,然后通过接收的数据值...
2020-06-18 11:04:35 1392
原创 9.独立按键
按下接通,松开断开。一共四个管脚,两对距离较远的初始状态是导通的,按下之后另外两对才导通。TXD接P3.0口,RXD接P3.1口K1,2,3,4分别接的是P31,P30,P32,P33,另一端共地,即按键按下时端口会被拉低。内部结构图:输入1,则输出1;输入0,则输出0.(例如输入1 的时候,非门输出0,二极管不导通,IO直接从VCC输出1;输入0的时候,非门输出1,二极管导...
2020-06-18 11:04:02 912
rfc3652 Handle System Protocol (ver 2.1) Specificationl.pdf
2021-05-24
利用IIC底层驱动代码编写AT24C02 EEPROM存取程序
2020-03-06
利用IIC底层驱动代码编写PCF8591 AD/DA转换程序
2020-03-05
利用DS1302底层驱动代码编写时钟芯片DS1302的时间显示程序
2020-03-05
利用单总线底层驱动代码编写温度传感器DS18B20温度检测程序
2020-03-03
AT24C02:EEPROM存储芯片
2020-02-27
PCF8591模数转换芯片
2020-02-27
DS1302时钟芯片
2020-02-24
温度传感器DS18B20程序(显示小数部分)
2020-02-22
温度传感器DS18B20程序(舍去小数部分)
2020-02-18
蓝桥杯单片机开发省赛基础程序整合
2020-02-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人