论文地址:延迟约束的语音增强基音估计

引用格式:Schröter H, Rosenkranz T, Escalante-B A N, et al. LACOPE: Latency-Constrained Pitch Estimation for Speech Enhancement[C]//Interspeech. 2021: 656-660.


摘要

  基频($f_0$)估计,又称基音跟踪,是语音和信号处理领域长期以来的研究课题。然而,许多基音估计算法在噪声条件下失败,或者由于其帧大小或Viterbi解码而引入大延迟。

  在本研究中,我们提出了一种基于深度学习的基音估计算法LACOPE,该算法在联合基音估计和语音增强框架中训练。与之前的工作相比,该算法允许可配置的延迟,最低可达到0的算法延迟。这一点是通过利用pitch轨迹的平滑特性实现的。也就是说,一个循环神经网络通过预测期望点的pitch来补偿由特征计算引入的延迟,允许在pitch精确度和延迟之间进行权衡。

  我们将音调估计整合到一个用于助听器的语音增强框架中。在这个应用中,我们允许 5ms的分析延迟。然后使用基音估计在频域构建梳状滤波器,作为后处理步骤,以去除内部谐波噪声。

  对于所有噪声条件下的语音,我们的基音估计性能与PYIN或CREPE等SOTA算法相当,同时引入了最小的延迟

索引术语:基音估计,语音增强,卷积循环神经网络

1  引言

  消除不需要的环境噪声是现代助听器的一个共同特征。助听器处理的一个重要特性是整体延迟低,这包括分析、滤波等步骤,如降噪以及合成。特别是对于具有开放耦合的助听器,原始信号的强分量到达耳鼓。因此,大于10毫秒的延迟通常是不可取的[1],因为它们会引入不必要的梳状滤波器效应(不要与用于内谐波降噪的数字梳状滤波器混淆)。这些延迟要求导致处理窗口非常短,约为6毫秒,带宽为500 Hz。由于这种频率分辨率,它不可能减少谐波内噪声,导致与纯净的语音相比,信号听起来更粗糙。为了能够减弱语音谐波之间的噪声,最近提出了一个梳状滤波器[2, 3]。Valin等人[2]用一种基于自相关的方法估计pitch,与OPUS编解码器[4]类似。然而,这些方法至少要用20毫秒的帧来分析pitch,因此对于我们的延迟限制来说是不可行的。

  其他基音估计算法需要类似的甚至更高的look-ahead。RAPT[5]还使用归一化互相关(NCC)特征,结合最大搜索(maximum search)和动态规划(dynamic programming)来选择最佳$f_0$候选。动态规划通过利用基音的平滑特性提高了鲁棒性,因此被许多方法采用[5、6、7、8]。然而,只有在计算Viterbi反向算法的至少几个步骤时,才能利用其全部潜力,这将导致appox的额外延迟。100毫秒[5]。YIN及其概率继承者PYIN[9,6]使用累积平均归一化差函数(CMN DF)代替NCC,因为这有助于消除倍频程误差。通常,两者都需要至少20到100ms的帧大小。PYIN需要对动态编程进行额外的look-ahead。CREPE[7]是一种基于时域卷积的深度学习方法,帧大小为64ms,略优于PYIN。Zhang等人[10]还提出了一种联合基音估计和语音增强框架。然而,它们仅使用基音特征作为去噪网络的输入。

2  信号模型

  设$x(k)$是在有噪声的房间中记录的混合信号。

$$公式1:x(k)=s(k)\star h(k)+n(k)$$

式中$s(k)$为纯净语音信号,$\star $表示卷积算子,$h(k)$为从扬声器到麦克风的房间脉冲响应(RIR), $n(k)$为加性噪声。在信号模型中加入混响语音$s^{rev}=s(k)\star h(k)$对于泛化现实世界的信号具有重要意义。此外,混响语音的周期性成分通常略有下降。梳状滤波器可以通过改善周期性部分来提高感知质量。

  我们的降噪方法完全适用于频域。因此,我们使用标准的均匀多相滤波器组(uniform polyphase filter bank)产生以下信号模型:

$$公式2:X_b(l)=S_b(l)*H_b(l)+N_b(l)$$

其中$b\in \{0...,B-1\}$为频带,$l$为帧索引。由于我们对助听器的实时性要求,分析滤波器组(AFB)大约在6毫秒帧上运行,子采样率为24。这导致B = 48个波段,带宽为500 Hz。因此,典型的助听器降噪算法只能衰减整个频谱包络,而不能增强语音的周期性部分[11,12]。

  与[3]类似,我们的降噪算法分两步操作,如图1所示。首先,通过估计的频带增益$G_b$对整个频谱包络进行建模,从而得到增强的频谱图$\hat{X}_b(l)=X_b(l)G_b(l)$。这还包括通过抑制后期反射来轻微的去混响。接下来,在频域中应用梳状滤波器,并在给出浊音概率估计的情况下进行加权,以改善$\hat{X}_b$中的周期分量。我们使用卷积循环神经网络来预测增益、音调和浊音概率估计

图1:联合基音估计和语音增强算法概述

2.1  差分函数

  为了为网络的基音估计任务提供良好的特征,我们计算了累积平均归一化差分函数,如[9

$$公式3:d(\tau )=\sum_{j=\tau_{min}}^{\tau_{max}}(x_j-x_{j-\tau})^2$$

其中,$\tau_{max}$和$\tau_{min}$对应60 Hz和500 Hz的lags,lags标志着我们的算法搜索的最小和最大基音频率。然后用累积平均值对差分函数进行归一化

$$公式4:d'(\tau)=\frac{d(\tau)}{\frac{1}{\tau}\sum^\tau_{j=\tau_{min}}d(j)}$$

我们选择了20 ms的帧大小,并在时间上对齐特征,如图3所示。虽然对于我们的应用程序来说,L = 5 ms的最大值是可以接受的,但是我们测试了几个从0到20 ms的look-aheads。

图3:用于DF特征的卷积编码器。音频帧(顶部,以黄色表示)对齐,使其对应于时间位置$t_0$。

这一帧的 look-ahead 是$L=t_{look-ahead}-t_0$。进一步的卷积也会在时间上对齐,这样它们就不会引入额外的延迟。

卷积权值(第二行)表示频率轴和时间轴上的核大小以及输入输出通道。

2.2  频谱归一化

  归一化通常是使深度神经网络(DNN)对不可见输入数据具有鲁棒性的重要组成部分。因此,我们将频谱转换为分贝刻度,并在仅确保零均值的情况下执行指数归一化[13]。我们发现单位方差不能提供任何性能或泛化改进。

$$公式5:X_{b,norm}[l]=X_{b,dB}[l]-\hat{\mu}_b[l]$$

均值估计$\hat{\mu}$由

$$公式6:\hat{\mu}_{b}[l]=\alpha \hat{\mu}_{b}[l-1]+(1-\alpha) X_{b, \mathrm{~dB}}[l]$$

其中$\alpha$对应于3s的归一化窗口。

3  梳状滤波器

  梳状滤波器通过在输入信号中加入延迟信号,从而产生梳状频率响应。最近,梳状滤波器已被证明可以减少间谐波噪声来提高整体感知质量[2,3]。通常,梳状滤波器在时域(TD)计算,定义为

$$公式7:y[k]=\frac{x[k]+x[k-T[k]]}{2}$$

其中$T[k]\in N^+=round(\frac{f_s}{f_0[k]})$是与时间步长$k$处的基音$f_0[k]$相对应的基音周期。在语音应用中,采样频率$f_s$足够高,基音周期的采样误差就可忽略不计

  但是在TD中没有采用梳状滤波器,而是完全在频率(滤波器组)域FD中操作。这有几个优点。首先,它允许在助听器中进行预处理,比如波束形成。在这种情况下,只有FD信号可用,向TD的额外转换将引入额外的延迟。此外,我们只有经过DNN处理后才有基音估计,其中滤波器组延迟已经被引入。最重要的是,我们可以将梳状滤波器应用于已经增强的$\hat{X}_b$谱图,而不是未处理的TD信号。这有助于决定应该将梳状滤波器应用到哪一个地方。

  因为分析窗口只是appox。FD中的梳状滤波器长度为6ms,其应用方法与TD相同。

$$公式8:Y_{b}[l]=\frac{X_{b}[l]+X_{b}\left[l-T^{\prime}[l]\right] \cdot e^{-j \omega_{k} \tau}}{2}$$

其中$T'[l]=round(T^*[l])=round(sr/f_0[l]/R)$被子采样因子$R$减小,为了补偿滤波器组域中较低的采样率,我们需要一个相位校正因子$e^{-jw_f\tau}$。它根据频带$b$的中心频率和剩余延迟( residual delay) $\tau=T^*[l]-T'[l]$来移动FB表示。

  由于梳式滤波器只能为语音的周期性成分提供好处,因此我们需要对帧l的周期性进行估计。因此,我们估计浊音概率,以便在随机分量和周期性分量之间定义权重,其中梳状滤波器应仅应用于周期性帧

$$公式9:\hat{X}_{b}^{\prime}=\hat{X}_{b} \cdot(1-v)+\operatorname{comb}\left(\hat{X}_{b}, T\right) \cdot v$$

$v$可以根据$G_b$估计的局部信噪比进行局部减小。这确保了梳状滤波器不会衰减纯净的语音。

  我们还尝试了更高阶的梳状滤波器,如[3]。然而,由于延迟需求,我们不能使用未来tap,由此产生的群延迟不再可行。

4  DNN模型

  我们使用了一个带有两个编码器的卷积循环网络(CRN),以及单独的输出增益G、基音$f_0$和浊音概率$v$。整体结构如图2所示。我们在频谱和差分函数(DF)编码器中都使用时间对齐卷积(time aligned convolutions),不引入图3所示的任何延迟。与DF编码器相比,谱图编码器不包含最后的卷积和maxpool层,以避免过早减少频率信息。

图2:DNN概述。C表示concatenation操作和+表示加法。嵌入的GRU由3层组成,层下的数字表示输出隐藏单元

4.1  损失函数

  我们采用三种不同损失函数的组合损失来进行多目标优化。

$$公式10:L=L_g+L_p+L_{ft}$$

给定 ground truth以及pitch和浊音概率,其中,$L_g$是增益的损失,$L_p$惩罚pitch$\hat{f}_0$,浊音$\hat{v}$估计误差,而$L_{ft}$是基于滤波后的时域信号的损失。我们用理想震幅掩模增益作为目标增益[14],采用[3]的增益损失。这种损失结合了传统的L2和L4术语,以惩罚过度衰减和退化的语音。

$$公式11:\mathcal{L}_{g}=\sum_{b}\left(g_{b}^{\lambda}-\hat{g}_{b}^{\lambda}\right)^{2}+C_{4} \sum_{b}\left(g_{b}^{\lambda}-\hat{g}_{b}^{\lambda}\right)^{4}$$

其中$\lambda=0.5$是一个常数来匹配感知响度,$C_4$ = 10是一个平衡因子。

  pitch损失包括pitch上的加权$L_1$损失和语音概率上的$L_2$损失。我们发现,由于预测或ground truth异常值,基音上的L1损失比L2损失更稳健。

$$公式12:\mathcal{L}_{p}=C_{p}\left|c\left(f_{0}\right)-\dot{c}\left(\hat{f}_{0}\right)\right| \cdot v+(v-\hat{v})^{2}$$

其中$C_p$是平衡因子,$\dot{c}(f)=1200log_2(\frac{f}{f_{ref}})$是用cent测量的音调,$f_{ref} = 10Hz$。pitch项以$C_p = 10^{-3}$和target voiced 概率$v$加权,强调目标确定的帧,忽略unvoiced帧。

  此外,我们利用时域损失来间接改善这两个任务。这样做的动机如下。梳状滤波器只能提高周期性语音部分的感知质量,不能应用于其他帧。另一方面,梳状滤波器引入了$T /2$的群延迟,使得原始纯净语音不能作为目标。这将迫使voiced概率估计$\hat{v}$为0,梳状滤波器将根本不适用。因此,我们在给定目标pitch和语音估计(如Eq. 9)的情况下过滤原始纯净的频谱,然后按照[15]的建议计算TD中的L1损失。通过合成滤波器组将目标估计和语音估计都转化为时域估计。滤波后的时域损失

$$公式13:L_{ft}=|x'-\hat{x}'|$$

  结果产生两种效果。首先,错误的基音估计将导致与梳状滤波器不同的频率响应,从而导致语音退化,其中有效误差随频率线性增加。在这种情况下,网络可以通过估计更好的基音来改善,或者,如果不可能的话,通过降低$v$至少不降低语音质量。另一个影响是$v$的频率相关惩罚。对于低基频,梳状滤波器的影响减小。谐波更接近,从而产生更好的频率局部SNR。因此,该网络的基音估计越低,梳状滤波器的作用就越小。

4.2  训练数据

  我们在大量的语音和噪声数据上训练我们的模型,以确保良好的泛化。语音数据集采用EUROM[17]、VCTK[18]和LJ语音[19]。噪声来自DEMAND[20]、RNNoise数据集[2]以及MUSAN语料库[21]。后者也包括音乐,我们认为是噪音类型。包括谐波噪声类型,如发动机噪声和音乐在训练中使基音估计更鲁棒的现实世界的信号。此外,我们从Aachen  RIR数据集[22]或通过使用[23]的图像源模型随机模拟的RIR中增加30%的语音样本的房间脉冲响应(RIR)。所有这些数据集以70/15/15分割为训练集、验证集和测试集。我们将所有语音录音随机混合,最多4个噪声,信噪比为[-5,0,10,20,100]。

  基于纯净的语音,用PYIN[6]估计训练的ground truth pitch。虽然这种pitch估计并不完美,但它为我们的应用提供了足够精确的目标pitch。有趣的是,与来自纯净语音的目标音调相比,DNN最终在噪声训练数据(例如倍频程误差)或混响条件下更加稳健。

  我们使用音调跟踪数据库PTDB-TUG[24]来评估我们的方法,该数据库包含了超过4600个来自看不见的说话人的样本。PTDB提供的基础真实pitch是通过应用于喉镜记录的RAPT[5]得到的,喉镜记录只捕捉到周期性的语音部分。我们使用测试集中相同信噪比水平的噪声。RIR增强被禁用以保持帧对齐。

5  实验和结果

  我们的模型训练了20个epoch,batch size为32,使用权重衰减为1e-4的AdamW[25]优化器的学习率为5e-4。图4为PTDB测试集上的 pitch difference。我们将我们的性能与YIN [9], PYIN[6]和CREPE[7]进行比较,它们都使用更大的帧大小和look-aheads。由于语音增强多目标训练和广泛的噪声增强,LACOPE在所有信噪比条件下都具有鲁棒性。虽然中值差异比CREPE略差,但从IQR和均值可以看出,异常值的总体数量和强度较低。

图4:不同信噪比条件下PTDB数据的Pitch difference。括号中的L表示Look-ahead,用于衡量异常值的数量和强度。

注意,官方的PYIN Vamp插件实现在低信噪比的情况下表现明显更差。相反,我们将与librosa实现[16]的更好结果进行比较。

  从图6可以看出,我们的模型对语音的适应性很好,即使在相同频率范围内存在谐波噪声的叠加。请注意,我们的网络倾向于将浊音 period后的帧分类为浊音。然而,这通常不是一个问题,因为如果增益接近于0,梳状滤波器就没有效果。CREPE和PYIN经常适应噪声并将大多数帧归类为浊音,而PYIN的音调估计通常是octave误差。

图5:所有信噪比下的pitch平均精度我们比较了不同帧大小的PYIN, CREPE以及延迟10毫秒的CREPE,因为帧大小是固定的。

对于PYIN和CREPE,e look-ahead相当于帧大小的一半,帧移不考虑。

  图5显示了以pitch difference低于50 cents的帧的百分比测量的pitch精度。在这里,look-ahead和pitch准确性之间的权衡变得清晰起来。与相关工作相比,我们可以在较低的预期下取得相当或更好的性能。

图6:来自含谐波噪声测试集的样本。上面:噪声谱图,中间:增强谱图,下面:音调估计

由于其他的算法对各种周期结构都很敏感,所以它们往往只适应噪声而不适应语音

  我们不报告语音评估的召回率和精确度等指标。虽然我们的模型是通过PYIN对目标发声概率估计进行训练的,但我们认为我们的模型学习了略微不同的表示。最后一项损失的结果并不是语音概率的估计,而是对梳状滤波器应用到何种程度的估计。因此,输出是相似的,但不完全相同。

6  结论

  在本文中,我们提出了LACOPE,一种在低延迟要求下进行基音估计和语音增强的联合方法。我们表明,与CREPE相比,我们获得了相当的性能,并且比PYIN更好,特别是在有噪声的条件下。而我们的模型与约。2.4 M参数和每10 ms段57 MFLOPs对于在嵌入式设备上运行来说仍然太大了,我们的计算需求包括语音增强比CREPE低很多。在这里,我们测量到了每10 ms段28.2 BFLOPs,由于大量的卷积层,这大约增加了$2*10^6$次操作。

  为了进一步降低计算需求,我们计划集成来自[13]的方法,如分层rnn和Bark缩放输入谱图和输出增益。此外,修剪和量化等技术将用于额外的复杂性降低[26]。

7  参考文献

[1] J. Agnew and J. M. Thornton, Just noticeable and objectionable group delays in digital hearing aids, Journal of the American Academy of Audiology, vol. 11, no. 6, pp. 330 336, 2000.

[2] J.-M. Valin, A hybrid DSP/deep learning approach to real-time full-band speech enhancement, in 2018 IEEE 20th International Workshop on Multimedia Signal Processing (MMSP). IEEE, 2018, pp. 1 5.

[3] J.-M. Valin, U. Isik, N. Phansalkar, R. Giri, K. Helwani, and A. Krishnaswamy, A Perceptually-Motivated Approach for LowComplexity, Real-Time Enhancement of Fullband Speech, in INTERSPEECH 2020, 2020.

[4] J.-M. Valin, G. Maxwell, T. B. Terriberry, and K. Vos, Highquality, low-delay music coding in the opus codec, arXiv preprint arXiv:1602.04845, 2016.

[5] D. Talkin and W. B. Kleijn, A robust algorithm for pitch tracking (RAPT), Speech coding and synthesis, vol. 495, p. 518, 1995.

[6] M. Mauch and S. Dixon, pYIN: A fundamental frequency estimator using probabilistic threshold distributions, in 2014 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2014, pp. 659 663.

[7] J. W. Kim, J. Salamon, P. Li, and J. P. Bello, CREPE: A Convolutional Representation for Pitch Estimation, in 2018 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2018, pp. 161 165.

[8] K. Han and D. Wang, Neural network based pitch tracking in very noisy speech, IEEE/ACM transactions on audio, speech, and language processing, vol. 22, no. 12, pp. 2158 2168, 2014.

[9] A. De Cheveign e and H. Kawahara, YIN, a fundamental frequency estimator for speech and music, The Journal of the Acoustical Society of America, vol. 111, no. 4, pp. 1917 1930, 2002.

[10] X. Zhang, H. Zhang, S. Nie, G. Gao, and W. Liu, A Pairwise Algorithm Using the Deep StackingNetwork for Speech Separation and Pitch Estimation, IEEE/ACM Transactions on Audio, Speech, and Language Processing, vol. 24, no. 6, pp. 1066 1078, 2016.

[11] E. H ansler and G. Schmidt, Acoustic echo and noise control: a practical approach. John Wiley & Sons, 2005, vol. 40.

[12] M. Aubreville, K. Ehrensperger, A. Maier, T. Rosenkranz, B. Graf, and H. Puder, Deep denoising for hearing aid applications, in 2018 16th International Workshop on Acoustic Signal Enhancement (IWAENC). IEEE, 2018, pp. 361 365.

[13] H. Schr oter, T. Rosenkranz, A. N. Escalante-B. , P. Zobel, and A. Maier, Lightweight Online Noise Reduction on Embedded Devices using Hierarchical Recurrent Neural Networks, in INTERSPEECH 2020, 2020. [Online]. Available: https://arxiv. org/abs/2006.13067

[14] H. Erdogan, J. R. Hershey, S. Watanabe, and J. Le Roux, Phasesensitive and recognition-boosted speech separation using deep recurrent neural networks, in 2015 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2015, pp. 708 712.

[15] U. Isik, R. Giri, N. Phansalkar, J.-M. Valin, K. Helwani, and A. Krishnaswamy, PoCoNet: Better Speech Enhancement with Frequency-Positional Embeddings, Semi-Supervised Conversational Data, and Biased Loss, in INTERSPEECH 2020, 2020.

[16] B. McFee, V. Lostanlen, A. Metsai, M. McVicar, S. Balke, C. Thom e, C. Raffel, F. Zalkow, A. Malek, Dana, K. Lee, O. Nieto, J. Mason, D. Ellis, E. Battenberg, S. Seyfarth, R. Yamamoto, K. Choi, viktorandreevichmorozov, J. Moore, R. Bittner, S. Hidaka, Z. Wei, nullmightybofo, D. Here n u, F.-R. St oter, P. Friesch, A. Weiss, M. Vollrath, and T. Kim, librosa/librosa: 0.8.0, Jul. 2020. [Online]. Available: https: //doi.org/10.5281/zenodo.3955228

论文翻译:2021_LACOPE: Latency-Constrained Pitch Estimation for Speech Enhancement的更多相关文章

  1. 论文翻译:2021_DeepFilterNet: A Low Complexity Speech Enhancement Framework for Full-Band Audio based on Deep Filtering

    论文地址:DeepFilterNet:基于深度滤波的全频带音频低复杂度语音增强框架 论文代码:https://github.com/ Rikorose/DeepFilterNet 引用:Schröte ...

  2. 论文翻译:2022_PACDNN: A phase-aware composite deep neural network for speech enhancement

    论文地址:PACDNN:一种用于语音增强的相位感知复合深度神经网络 引用格式:Hasannezhad M,Yu H,Zhu W P,et al. PACDNN: A phase-aware compo ...

  3. 论文翻译:Conv-TasNet: Surpassing Ideal Time–Frequency Magnitude Masking for Speech Separation

    我醉了呀,当我花一天翻译完后,发现已经网上已经有现成的了,而且翻译的比我好,哎,造孽呀,但是他写的是论文笔记,而我是纯翻译,能给读者更多的思想和理解空间,并且还有参考文献,也不错哈,反正翻译是写给自己 ...

  4. [原创]Faster R-CNN论文翻译

    Faster R-CNN论文翻译   Faster R-CNN是互怼完了的好基友一起合作出来的巅峰之作,本文翻译的比例比较小,主要因为本paper是前述paper的一个简单改进,方法清晰,想法自然.什 ...

  5. R-CNN论文翻译

    R-CNN论文翻译 Rich feature hierarchies for accurate object detection and semantic segmentation 用于精确物体定位和 ...

  6. k[原创]Faster R-CNN论文翻译

    物体检测论文翻译系列: 建议从前往后看,这些论文之间具有明显的延续性和递进性. R-CNN SPP-net Fast R-CNN Faster R-CNN Faster R-CNN论文翻译   原文地 ...

  7. 论文翻译——R-CNN(目标检测开山之作)

    R-CNN论文翻译 <Rich feature hierarchies for accurate object detection and semantic segmentation> 用 ...

  8. 论文翻译:Speech Enhancement Based on the General Transfer Function GSC and Postfiltering

    论文地址:基于通用传递函数GSC和后置滤波的语音增强 博客作者:凌逆战 博客地址:https://www.cnblogs.com/LXP-Never/p/12232341.html 摘要 在语音增强应 ...

  9. 深度学习论文翻译解析(八):Rich feature hierarchies for accurate object detection and semantic segmentation

    论文标题:Rich feature hierarchies for accurate object detection and semantic segmentation 标题翻译:丰富的特征层次结构 ...

随机推荐

  1. 项目中导入本地jar包问题

    1. 问题 一个Maven项目,需要依赖一个本地jar包,以如下方式引用: <dependency> <groupId>xxx.sdk</groupId> < ...

  2. [codeforces] 暑期训练之打卡题(二)

    每个标题都做了题目原网址的超链接 Day11<Given Length and Sum of Digits...> 题意: 给定一个数 m 和 一个长度 s,计算最大和最小在 s 长度下, ...

  3. vue项目|在弹窗中引入uchart图表子组件不显示

    为了解决uchart作为子组件在主组件里引用但不显示的情况,(同样适用于弹窗之中)目前有三种方法. 1-解决方式 1>如果你使用的uchart子组件是从官方拿的例子:进入到uchart子组件将o ...

  4. 《Unix 网络编程》05:TCP C/S 程序示例

    TCP客户/服务器程序示例 系列文章导航:<Unix 网络编程>笔记 目标 ECHO-Application 结构如下: graph LR; A[标准输入/输出] --fgets--> ...

  5. 拥抱Spring全新OAuth解决方案

    以下全文 Spring Authorization Server 简称为: SAS 背景 Spring 团队正式宣布 Spring Security OAuth 停止维护,该项目将不会再进行任何的迭代 ...

  6. STM32时钟系统配置程序源码深入分析

    一.分析程序的目的 最近我在移植实时系统是遇到了一些问题,所以决定深入了解系统时钟的配置过程,当然想要学好stm32的小伙伴也有必要学习好时钟系统的配置,所以我将学习的过程再次记录,有写得不好的地方, ...

  7. mybatis查询mysql 数据库中 BLOB字段,结果出现乱码

    起因 mybatis-plus 通过Mapper 查询数据,映射出来的BLOB字段中的yml数据中文是乱码的 --- DefaultValue: '' Formula: '' HintContent: ...

  8. Google Colab初次使用

    网页无法加载,出现HTTP ERROR 407 开启chrome时不要在最下面的固定栏打开,否则会出错.

  9. C#生成putty格式的ppk文件(支持passphrase)

    背景 2022国家级护网行动即将开启,根据阿里云给出的安全建议,需要将登陆Linux的方式改为密钥对方式.我这里使用的远程工具是自己开发的,能够同时管理Windows和Linux,但是以前不支持密钥对 ...

  10. (一)Linux环境的学习环境的搭建

    我们使用VMWARE来安装Debian11系统来进行我们的LINUX学习 Debian虚拟机的安装 vmware-tools的安装 xShell的安装使用 samba的配置 gcc环境的配置 Debi ...