学习笔记(三):WiFi-Sleep
《WiFi-Sleep: Sleep Stage Monitoring Using Commodity Wi-Fi Devices》读书笔记
本文利用来自多天线的CSI信息,以信号处理方法来提取准确的呼吸和身体运动信息。并引入深度学习方法,结合临床睡眠医学先验知识,在有限的数据源(即只有呼吸和身体运动信息)下实现阶段睡眠监测。结果表明,以多导睡眠图(PSG黄金参考标准)来衡量WiFi-Sleep的性能时,WiFi-Sleep达到81.8%的准确性,相当于雷达设备最先进的睡眠阶段监测。
目录
- 基于WiFi的睡眠阶段监控
- 1. 课题意义、睡眠阶段、现有研究、本文目标及贡献
- 2. 相关研究
- 2.1 睡眠阶段分类设备
- 2.2 Wi-Fi感知
- 3. 系统概述(含总题框图)
- 4. 呼吸和身体运动检测
- 4.1 基于CSI熵的呼吸检测
- 4.2 基于MRC-PCA的呼吸特征增强
- 4.3 基于Doppler-MUSIC的人体运动检测
- 4.4 特征提取
- 5. 睡眠阶段分类
- 6. 系统性能评估
- 6.1 WiFi-sleep系统的实现
- 6.2 WiFi-sleep系统的对比方法
- 6.3 WiFi-sleep睡眠阶段分类性能
- 6.4 呼吸检测性能
- 6.4 身体动作检测性能
- 7.未来研究方向
基于WiFi的睡眠阶段监控
1. 课题意义、睡眠阶段、现有研究、本文目标及贡献
课题意义:
睡眠质量差可能是糖尿病、心脏病和高血压等许多疾病的原因。长期监测人们的睡眠质量有助于
- 及时发现潜在的健康问题,
- 医生对各种疾病进行诊断和治疗
睡眠阶段的识别和分类对于睡眠质量监测至关重要。睡眠的五个阶段:
根据AASM(美国睡眠医学学会),睡眠可以分为五个阶段,即入睡期(Wake)、N1、N2(N1-2合称浅度睡眠)、N3(深度睡眠)和快速眼动(Rapid Eye Movement,REM)。一个睡眠周期约90分钟,一晚上约有四五个左右的睡眠周期。周期中的N1、N2、N3合称非快速眼动期(Non-Rapid Eye Movement,NREM),很少发梦;最后一个阶段REM,发梦频繁。不同的睡眠阶段有不同的生理特征和功能[1]。测量睡眠质量的基础是不同睡眠阶段的时间分布。高质量的睡眠应该包括充足的睡眠时间和合理的睡眠阶段分配。
注[1]: 睡眠特征参考网站:H. M. S. D. of Sleep Medicine, “The characteristics of sleep,”Polysomnography (PSG)多导睡眠监测:
PSG已被用于临床和实验室环境,通过一系列传感器监测睡眠,并被视为睡眠评估的事实标准。传感器通过以下信号来测量大脑活动:
- 脑电图(electroencephalogram , EEG)
- 气流( airflow)
- 心率(heart rate)
- 呼吸率(breathing rate)
- 血氧水平( blood oxygen level)
- 肌肉的电活动(the electrical activity of muscles)
近年来,许多可穿戴设备,已被用来根据睡眠阶段与心率和运动之间的关系对睡眠阶段进行分类[2]。注[2] TODO:师兄让我自行调研。
SMARS [3]首次尝试使用无线信号进行睡眠监测,并研究三阶段睡眠分类(即入睡期、REM、NREM)。注[3]:2019年的文章:SMARS: Sleep Monitoring via Ambient Radio Signals
现有研究有如下缺点:在复现SMARS并实验评估的基础上,结果表明
- 呼吸并不总是可检测的,尽管融合了很宽的带宽。SMARS仍有许多无法检测呼吸的盲点。(这可能是由于仅使用CSI(信道状态信息)幅度造成的)
- SMARS不能区分NREM中的N1、N2、N3阶段(SMARS在N1、N2和N3提取的呼吸特征呈现相似性。实际上身体运动与睡眠阶段有很强的关系,即身体运动的速率在各阶段上: Wake> N1 >REM> N2 >N3。SMARS用一个简单的阈值来表示运动统计,无法有效地捕捉身体运动)
本文设计WiFi-Sleep系统,利用商用WiFi对睡眠的四个阶段入睡期(Wake)、快速眼动(REM)、轻度睡眠(N1-N2)、深度睡眠(N3)进行监控和分类。所用新技术如下表:
技术名称 技术作用 CSI熵(CSI ratio) 消除盲点 最大比合并主成分分析方法 最大化信噪比,以便提>取更多的特征,如呼吸深度方差和吸气呼气比等 Doppler-MUSIC 捕捉身体运动 除此外,文中还提出将身体运动分为主要身体运动(Major Body Movements,MBM)和周期性肢体运动(Periodic Limb Movements,PLM)两类。最后,WiFi-sleep将以上生理特征导入神经网络模型,并将医学先验知识加入睡眠阶段过渡的限制,实现了对睡眠阶段的分类。
2. 相关研究
2.1 睡眠阶段分类设备
现有的睡眠阶段分类设备有两类:接触式和非接触式。
接触式睡眠质量检测设备:
类型 方法 代表文献/产品 accuracy 脑电图设备
(EEG)采集脑电传感器捕捉到的脑波信号 2018《Ensemble svm method for automaticsleep stage classification》 SVM实现了90%的精确度(四阶段分类) 智能腕带
智能手表惯性传感器(如加速度计、陀螺仪、指南针和红外心率传感器)准确提取身体运动和心率等生理信息。 2018《A validation study of fitbit charge 2™ compared with polysomnography in adults》 Fitbit实现了61%的唤醒准确率、81%的轻度睡眠准确率、49%的深度睡眠准确率和74%的快速眼动准确率。 接触式睡眠质量检测设备:
类型 方法 代表文献/产品 accuracy 雷达设备 通过高频无线电信号更准确地获取心率、呼吸频率和身体运动信息。 2017《Learning sleep stages from radio signals: A conditional adversarial architecture》 RF-Sleep对四类分类的准确率为79.8% 手机传感器 利用麦克风、加速度计、光传感器和其他传感器来检测睡眠期间的事件,如身体运动、打鼾、咳嗽、长时间呼吸和快速呼吸。 2016《Sleep hunter: Towards fine grained sleep stage tracking with smartphones》 Sleep hunter对三级分类的准确率为64%
2.2 Wi-Fi感知
2019《Farsense: Pushing the range limit of wifi-based respiration sensing with CSI ratio oftwo antennas》一文中利用CSI相位和振幅的互补性,为本文使用的呼吸检测提供了理论基础。
2015《Understanding and modeling of wifi signal based human activity recognition》一文中出CSI-speed模型来识别九种日常人类活动。
2017《Indotrack: Device-free indoor human tracking with commodity wifi》一文中使用了从无线信号中提取速度谱的方法——Dopple-MUSIC。
2019《Smars: sleep monitoring via ambient radio signals》一文中使用MRC融合CSI幅度的自相关函数来提取呼吸速率,缓解了盲点问题;从融合的ACF信号估计运动统计;然后通过运动统计来区分觉醒和睡眠,通过观察呼吸率可变性和呼吸率偏差来区分快速眼动和NREM。
3. 系统概述(含总题框图)
睡眠阶段在呼吸速率(respiration rate)、心率变异性(HRV,Heart Rate Variability,即两次心跳时间间隔的微小变化)、FIT(FIT ,fractional inspiration time,即吸气阶段时间除以呼吸周期时间)、呼吸深度和身体运动速率方面的不同如表一所示:
表一:不同睡眠阶段的呼吸和身体运动特征
表一的数据主要来自1983《“Rate and distribution of body movements during sleep in humans》和2016《Respiratory rate variability in sleeping adults without obstructive sleep apnea》。
WiFi-Sleep是一个四阶段睡眠监测系统,由数据采集、呼吸和身体运动检测以及睡眠阶段分类三个模块组成,如图1所示。
图(3-1):系统总题框架
系统组成要点如下:
- 一对无线收发器
- 1个发射3个接收天线实现1×3多输入多输出
- 使用固定的采样速率对原始信道状态信息信号进行重新采样(以避免网络延迟和数据包丢失导致的每个信道状态信息信号的接收时间不一致情况)
- 需计算每对接收天线的CSI熵,以消除来自采样频率偏移(SFO,Sampling Frequency Offset)、中心频率偏移(CFO,Central Frequency
Offset)和分组边界检测(PBD, Packet Boundary Detection)的误差,在CSI信号中出现相移。为了消除相移)。这些误差在1999《Optimum receiver design for wireless broad-band systems using OFDM》一文中解释了来源。 - 为了抑制噪声和最大化检测到的呼吸波形的信噪比,提出MRC-PCA算法,将CSI比中的所有通道融合成一个信噪比最大的呼吸波形。
- 对于身体运动,使用Doppler-MUSIC算法从CSI比率中提取速度谱。
- 从生理活动中提取一系列特征后构建一个基于深度学习的分类器来确定四个睡眠阶段。
4. 呼吸和身体运动检测
4.1 基于CSI熵的呼吸检测
①WiFi CSI:
信道状态信息(CSI,channel state information)描述了正交频分复用(OFDM,orthogonal frequency-division multiplexing)信号在传播过程中如何因周围的物体衰减和散射。
由于室内多径效应,Wi-Fi CSI是所有路径信号的叠加:
H(f,t)=∑i=1LAie−j2πdi(t)λ(1)H(f, t)=\sum_{i=1}^{L} A_{i} e^{-j 2 \pi \frac{d_{i}(t)}{\lambda}} \tag{1}H(f,t)=i=1∑LAie−j2πλdi(t)(1)
其中,LLL是路径数,λλλ是波长,AiA_{i}Ai是第iii条传播路径的振幅衰减,di(t)d_{i}(t)di(t)是第iii条传播路径的长度。(1)式是理论上的情况,可以看到,对于每一条多径对CSI的贡献,仅仅凸显了路径衰落和路径引起的相移变化。
路径可以分为动态路径和静态路径,静态路径的信道参数不会随时间而变化,比如视距(LoS,line of sight)路径及环境中墙壁和静态物体的反射路径。动态路径是由运动目标引起的信号路径,我们假设实验室中只有一个受试者,并且只有一个反射路径对应受试者呼吸引起的胸部运动。
当目标移动一小段距离时,动态路径的信号衰减可视为常数。此外,由于发射机和接收机不是时钟同步的,在获得的CSI中引入了时变的相位偏移。从数学上讲,CSI 可以表示为:
H(f,t)=e−jϕ(t)(Hs+Ae−j2πd(t)λ)(2)H(f, t)=e^{-j \phi(t)}\left(H_{s}+A e^{-j 2 \pi \frac{d(t)}{\lambda}}\right) \tag{2}H(f,t)=e−jϕ(t)(Hs+Ae−j2πλd(t))(2)
其中ϕ(t)\phi(t)ϕ(t)是时变的相位偏移,HsH_{s}Hs是对应于静态路径的静态分量,AAA和d(t)d(t)d(t)分别是信号衰减和动态路径的长度。从式(2)中可以看出,CSI分为了静态群和动态路径的和,并考虑到了发射设备和接收设备的定时误差。②CSI熵(参考2019《Farsense: Pushing the range limit of wifi-based respiration sensing with csi ratio oftwo antennas》)
CSI熵指同一接收机上两个相邻天线CSI的商。
Hratio (f,t)=H1(f,t)H2(f,t)(3)H_{\text {ratio }}(f, t)=\frac{H_{1}(f, t)}{H_{2}(f, t)}\tag{3}Hratio (f,t)=H2(f,t)H1(f,t)(3)
其中,H1(f,t)H_{1}(f, t)H1(f,t)是第一天线的CSI,H2(f,t)H_{2}(f, t)H2(f,t)是第二天线的CSI。通过两个天线之间的除法运算,原始CSI幅度噪声和时变的相位偏移噪声大幅抵消,并同时的保留了幅度和相位信息,更有利于细粒度的动作检测。
4.2 基于MRC-PCA的呼吸特征增强
目的:融合不同方向和信噪比的信号,获得具有更高信噪比的呼吸波形
难点:直接使用MRC会导致正负呼吸波形相互抵消,从而削弱信号中的有效信息。具体来说:
MRC通过为每个子载波提供不同的增益来融合不同信噪比的子载波,增益与信号能量的均方根成正比,与噪声能量的均方根成反比。MRC要求每个子载波的增益值为正,但实际上,以图二中的菲涅尔区为例:图(4-1) 菲涅耳区模型
在偶数菲涅耳区(红色区域),CSI振幅与呼吸波形具有相同的方向(正方向),这意味着正增益。在第一、第三和第五奇数菲涅耳区,CSI振幅与呼吸波形方向相反(负方向),这意味着负增益。解决方法:
最大比合并-主成分分析法(MRC-PCA,Maximal-ratio Combining, Principal Component Analysis)。
步骤:
- 计算每个子载波的信噪比SNR。
使用功率谱密度评估信噪比:以正常呼吸速率范围内的信号能量与正常呼吸速率以上的信号能量之比为信噪比。
- 通过主成分分析对呼吸波形方向进行校正
目的:正确融合来自不同呼吸波形方向子载波的信号
首先将信号乘以MRC增益,并将于每个子载波信号通过呼吸频率范围内的带通滤波器(乘以MRC增益为接下来的操作限制了噪声率上限,以确保主成分分析最大化呼吸幅度)。
然后计算子载波的第一主成分。第一主成分是最大化信号的方差,第一主成分的符号代表呼吸波形的方向。它能调整每个子载波的增益,使呼吸波形方向一致。主成分分析能够融合正增益或负增益的信号,但它最大化了信号方差,而不是最大化信噪比。
将这个符号添加到MRC增益中,作为每个子载波的最终增益值。这样,所有增益为正或负的子载波都能以最大信噪比正确融合在一起。结果:MRC-PCA同时考虑了每个子载波的信噪比和呼吸波形方向,融合后的波形比选择信噪比最好的单个子载波效果更好。
图(4-2),(a)信噪比和方向不同的原始信号,(b)信号乘以主成分分析法的增益
4.3 基于Doppler-MUSIC的人体运动检测
目的:
为了检测和识别不同类型的人体运动,使用MUSIC算法从CSI熵信号中提取多普勒速度谱(注indotrack用的是共轭相乘法)。
原理:
MUSIC对连续MMM个CSI熵的采样序列XXX的相关矩阵RxR_xRx进行特征结构分析,其中Rx=E[XXH]R_{x}=\mathbb{E}\left[X X^{H}\right]Rx=E[XXH]是一个M×MM × MM×M的矩阵,HHH是向量的共轭转置。相关矩阵RxR_xRx有MMM个特征值(eigenvalues)。
MUSIC算法将这些特征值分成两个子空间:信号子空间EsE_sEs和噪声空间EnE_nEn。L个最大的特征值与L条多径信号相对应,构其对应的特征向量构成了信号子空间EsE_sEs;而噪声子空间由最小的M-L个特征值所对应的特征向量组成。
注意到信号子空间和噪声子空间正交,多普勒速度谱函数可以进一步表示为:
P(v)MUSIC=1a⃗H(v)EnEnHa⃗(v)(4)P(v)_{M U S I C}=\frac{1}{\vec{a}^{H}(v) E_{n} E_{n}^{H} \vec{a}(v)}\tag{4} P(v)MUSIC=aH(v)EnEnHa(v)1(4)
其中其中vvv为多普勒速度,a(v)a(v)a(v)为多普勒速度矢量[1,e−j2πfvΔt2c,e−j2πfvΔt3c,…,e−j2πfvΔtMc]T\left[1, e^{-j 2 \pi f \frac{v \Delta t_{2}}{c}}, e^{-j 2 \pi f \frac{v \Delta t_{3}}{c}}, \ldots, e^{-j 2 \pi f \frac{v \Delta t_{M}}{c}}\right]^{T}[1,e−j2πfcvΔt2,e−j2πfcvΔt3,…,e−j2πfcvΔtM]T,Δti\Delta t_{i}Δti是第(i−1)(i-1)(i−1)个样本和第(i−2)(i-2)(i−2)个样本之间的时间间隔,f是载波频率。a(v)a(v)a(v)可以理解为天线阵列由于人体多普勒速度引起的相位变化。实现:
实验中使用滑动窗口方法平衡处理成本和速度的分辨率。窗口大小设置为1s,步长为0.1s。在图(4-3)中显示了Doppler-MUSIC从睡眠期间收集的4000秒数据估计出的多普勒速度谱。多普勒速度谱显示了每个速度分量的能量如何随时间变化,其中高能分量用黄色表示,低能分量用蓝色表示。
图(4-3) Doppler-MUSIC速度谱和速度谱的能量方差及两个阈值
结论:
当受试者保持静止时,所有的速度分量都处于低能量水平。如果受试者移动身体或身体的一部分,我们可以利用速度谱的能量变化来检测是否有身体运动,−0.5m/s∼0.5m/s-0.5 \mathrm{~m} / \mathrm{s} \sim 0.5 \mathrm{~m} / \mathrm{s}−0.5 m/s∼0.5 m/s对应于高能量。如图(4-3)的下图所示,运动速度谱的能量变化明显大于静止速度谱的能量变化。更重要的是,能量变化的幅度可以反映睡眠期间身体运动的不同尺度。具体来说,MBM是最大的,包括身体转动和翻滚。而PLM处于较小的量级。更大的运动尺度导致更大的能量变化。可通过两个不同的阈值(图5中的红线)来检测MBM和PLM。这两个阈值通过最大化F1-score使用PSG设备检测的MBM和PLM进行校准,详见第6点系统评估。然后可以从运动信息中提取特征来对睡眠阶段进行分类。
4.4 特征提取
目标:
在获得清晰的呼吸波形和速度谱后,需要从呼吸和身体运动数据中提取有用的特征。
①呼吸速率的获取:
难点:
现有方法通常在时域中应用窗口,并使用短时傅立叶变换(STFT,Short
Time Fourier Transform)来提取具有最大能量的频率作为呼吸速率。
频域中的分辨率与时域中窗口的大小有关,使用的窗口越大,获得的呼吸速率分辨率就越高。实际操作中,窗口延时的存在会影响呼吸检测,导致呼吸速率估计出现偏差,并且时间窗口越大,这种窗口延时影响越大。这是选择合适的窗口大小时的一对矛盾。
解决方法:
ACF(autocorrela-tion function)获取呼吸速率:
对于有限长时间序列y(n)y(n)y(n),自相关函数Ryy(τ)定义如下:
Ryy(τ)=∑n∈Zy(n)y(n−τ)(5)R_{y y}(\tau)=\sum_{n \in Z} y(n) y(n-\tau)\tag{5} Ryy(τ)=n∈Z∑y(n)y(n−τ)(5)
其中τττ为时延。由于呼吸波形是周期信号,当τ达到一个完整周期时,Ryy(τ)Ryy(τ)Ryy(τ)具有最大值;当τττ达到半周期时,Ryy(τ)Ryy(τ)Ryy(τ)有最小值。如图(4-4)所示.
图(4-4) 呼吸波形和自相关函数
对于呼吸波形,自相关函数呈现峰谷交替的周期性变换,并且周期性与原始信号一致。然后,使用以下公式提取呼吸速率rr(y)rr(y)rr(y):
rr(y)=1T=1peakyy(1)(6)r r(y)=\frac{1}{T}=\frac{1}{p e a k_{y y}^{(1)}}\tag{6} rr(y)=T1=peakyy(1)1(6)
其中peakyy(1)p e a k_{y y}^{(1)}peakyy(1)是ACF第一个峰的时滞,等于呼吸周期TTT。rsr_{s}rs是CSI信号的采样率,>那么呼吸速率的分辨率为
∣Δrr(y)∣=1rs∣rr(y)′∣=1rs(peak yy(1))2(7)|\Delta r r(y)|=\frac{1}{r_{s}}\left|r r(y)^{\prime}\right|=\frac{1}{r_{s}\left(\text { peak }_{y y}^{(1)}\right)^{2}}\tag{7} ∣Δrr(y)∣=rs1∣rr(y)′∣=rs( peak yy(1))21(7)
结果:
利用ACF时,分辨率与窗口大小无关。同时rsr_{s}rs越大,呼吸速率的分辨率越高。②其他呼吸特征:
待补充。如图(4-4)下图所示,检测每个呼吸周期的峰值,并计算respiratory depth变化作为特征。除了呼吸深度之外,FIT和I/E在不同阶段也是不同的。
③身体运动特征
待补充。
5. 睡眠阶段分类
深度神经网络。该模块待学习。目前先略过。
6. 系统性能评估
6.1 WiFi-sleep系统的实现
①使用两个千兆字节的迷你电脑配备英特尔5300无线卡作为无线收发器对。
②工作在带宽为20兆赫兹的5兆赫兹无线信道上。
③发射机以200Hz的速率向接收机发送标准的无线数据包,接收机配备有三个全向天线。
④网络设置:待补充。
⑤在睡眠医学中,PSG将整个晚上的睡眠划分为30s的子时间段。睡眠诊断专家为每一子时间段贴上一个睡眠阶段的标签。为了一致性,WiFi-Sleep每30秒更新一次最终的睡眠阶段分类结果。
6.2 WiFi-sleep系统的对比方法
6.3 WiFi-sleep睡眠阶段分类性能
6.4 呼吸检测性能
在本节中评估无线睡眠在呼吸检测中的性能,以及两种技术(即CSI熵和MRC-PCA)对精确呼吸波形的影响。
整体性能:
根据检测率、信噪比和呼吸率误差来评估呼吸检测性能。对于检测率,需要提前去除主要身体运动的时期,因为胸腹带和Wi-Fi都不能在主要身体运动下正确监控呼吸。WiFi-Sleep实现了97.8%的检测率和最高的信噪比。对于呼吸率误差,我们计算图19所示的CDF(累积分布函数)。WiFi-Sleep实现的平均误差为0.23 bpm,90%的误差为0.29 bpm。
控制变量法看两种技术的影响:
待补充。6.4 身体动作检测性能
7.未来研究方向
研究与睡眠障碍相关的睡眠模式,如慢性失眠、不宁腿和睡眠呼吸暂停,并进一步改善系统。
学习笔记(三):WiFi-Sleep相关推荐
- J2EE学习笔记三:EJB基础概念和知识 收藏
J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...
- tensorflow学习笔记(三十二):conv2d_transpose (解卷积)
tensorflow学习笔记(三十二):conv2d_transpose ("解卷积") deconv解卷积,实际是叫做conv_transpose, conv_transpose ...
- Ethernet/IP 学习笔记三
Ethernet/IP 学习笔记三 原文为硕士论文: 工业以太网Ethernet/IP扫描器的研发 知网网址: http://kns.cnki.net/KCMS/detail/detail.aspx? ...
- iView学习笔记(三):表格搜索,过滤及隐藏列操作
iView学习笔记(三):表格搜索,过滤及隐藏某列操作 1.后端准备工作 环境说明 python版本:3.6.6 Django版本:1.11.8 数据库:MariaDB 5.5.60 新建Django ...
- 吴恩达《机器学习》学习笔记三——多变量线性回归
吴恩达<机器学习>学习笔记三--多变量线性回归 一. 多元线性回归问题介绍 1.一些定义 2.假设函数 二. 多元梯度下降法 1. 梯度下降法实用技巧:特征缩放 2. 梯度下降法的学习率 ...
- Python基础学习笔记三
Python基础学习笔记三 print和import print可以用,分割变量来输出 import copy import copy as co from copy import deepcopy ...
- Mr.J-- jQuery学习笔记(三十二)--jQuery属性操作源码封装
扫码看专栏 jQuery的优点 jquery是JavaScript库,能够极大地简化JavaScript编程,能够更方便的处理DOM操作和进行Ajax交互 1.轻量级 JQuery非常轻巧 2.强大的 ...
- MYSQL学习笔记三:日期和时间函数
MYSQL学习笔记三:日期和时间函数 1. 获取当前日期的函数和获取当前时间的函数 /*获取当前日期的函数和获取当前时间的函数.将日期以'YYYY-MM-DD'或者'YYYYMMDD'格式返回 */ ...
- ROS学习笔记三:创建ROS软件包
,# ROS学习笔记三:创建ROS软件包 catkin软件包的组成 一个软件包必须满足如下条件才能被称之为catkin软件包: 这个软件包必须包含一个catkin编译文件package.xml(man ...
- Python学习笔记三之编程练习:循环、迭代器与函数
Python学习笔记三之编程练习 1. 编程第一步 # 求解斐波纳契数列 #/user/bin/python3#Fibonacci series:斐波那契数列 #两个元素的总和确定了下一个数 a,b= ...
最新文章
- Docker配置远程连接端口
- 使用Leangoo玩转故事地图
- 为什么面试你要35K,而HR只给你25K...
- auto_ptr动态分配对象
- 如何实现分享网站文章到微信朋友圈时显示指定缩略图或LOGO
- How to handle the generic error Cannot read property md of undefined
- 【分享】Lucene.Net的中文分词组件AdvancedChineseAnalyzer
- 项目管理学习总结(6)——产品经理常用的工具有哪些?
- 关于css3的calc()
- 在同一个公司死磕5-10年,到底值不值得?
- python 学习之路1-如何入门
- 在 MATLAB 或 Python 中使用 ZOS-API 进行光线追跡的批次处理
- 【win7提速新方法:禁用禁用eSATA接口】
- 无线桥接和中继模式的区别
- 谷歌中国工程研究院原副院长王劲加盟百度
- 我的自定义知乎首页及问题页的样子
- 百度飞桨第一课--让人拍案叫绝的创意都是如何诞生的?
- 内存回收导致关键业务抖动案例分析-论云原生OS内存QoS保障
- 关于.NET IQueryable.Join()
- 离婚案件中有贷款及增值房产的分割方法