文章目录

  • 1.对短时过零率针对不同语音片段进行验证
  • 2.验证窗函数
  • 3.语音的同态处理、复倒谱、倒谱
    • 倒谱图形分析
    • 总结:

1.对短时过零率针对不同语音片段进行验证

短时平均过零率表示一帧语音中语音信号波形穿过横轴(零电平)的次数。

对于连续语音信号,过零即意味着时域波形通过时间轴;而对于离散信号,如果相邻的取样值改变符号,则称为过零。

短时平均过零率就是样本数值改变符号的次数。

发音时声带不震动、送气的叫清辅音

发音时声带震动、不送气的叫浊辅音

在美国英语里面,发清辅音的字母有:p、t、k、c、q、f、s(在词首或词中,前或后接清辅音),th(在实词中)、sh、h、ch、tch、ts、tr、wh

分别读入不同的语音文件进行分析

实现代码

%短时平均过零率
clear all; clc; close all;[xx,Fs]=audioread('C2_2_y.wav');% 读入数据文件
x=xx-mean(xx);                    % 消除直流分量
wlen=200; inc=80;                 % 设置帧长、帧移
win=hanning(wlen);                % 窗函数
N=length(x);                      % 求数据长度
X=enframe(x,win,inc)';            % 分帧
fn=size(X,2);                     % 获取帧数
zcr1=zeros(1,fn);                 % 初始化
for i=1:fnz=X(:,i);                     % 取得一帧数据for j=1: (wlen-1)             % 在一帧内寻找过零点if z(j)* z(j+1)< 0       % 判断是否为过零点zcr1(i)=zcr1(i)+1;   % 是过零点,记录1次endend
end
time=(0:N-1)/Fs;                  % 计算时间坐标
frameTime=frame2time(fn,wlen,inc,Fs);  % 求出每帧对应的时间
% 作图
subplot 211; plot(time,x,'b'); grid;
title('语音波形');
ylabel('幅值'); xlabel(['时间/s' 10 '(a)']);
subplot 212; plot(frameTime,zcr1,'b'); grid;
title('短时平均过零率');
ylabel('过零率'); xlabel(['时间/s' 10 '(b)']);

运行结果

画出语音“朝辞白帝彩云间”的平均短时过零率

实现代码

%短时平均过零率
clear all; clc; close all;[xx,Fs]=audioread('C6_2_y.wav');% 读入数据文件
x=xx-mean(xx);                    % 消除直流分量
wlen=200; inc=80;                 % 设置帧长、帧移
win=hanning(wlen);                % 窗函数
N=length(x);                      % 求数据长度
X=enframe(x,win,inc)';            % 分帧
fn=size(X,2);                     % 获取帧数
zcr1=zeros(1,fn);                 % 初始化
for i=1:fnz=X(:,i);                     % 取得一帧数据for j=1: (wlen-1)             % 在一帧内寻找过零点if z(j)* z(j+1)< 0       % 判断是否为过零点zcr1(i)=zcr1(i)+1;   % 是过零点,记录1次endend
end
time=(0:N-1)/Fs;                  % 计算时间坐标
frameTime=frame2time(fn,wlen,inc,Fs);  % 求出每帧对应的时间
% 作图
subplot 211; plot(time,x,'b'); grid;
title('语音波形');
ylabel('幅值'); xlabel(['时间/s' 10 '(a)']);
subplot 212; plot(frameTime,zcr1,'b'); grid;
title('短时平均过零率');
ylabel('过零率'); xlabel(['时间/s' 10 '(b)']);

运行结果

2.验证窗函数

三种窗函数的主瓣宽度B和第一旁瓣衰减A
主瓣宽度B为幅值下降3dB时的宽度

△w是谱分析时的角频率分辨率。从表中可看出,矩形窗主瓣的宽度最窄,但第一旁瓣的衰减最小。也就是说,它的频谱泄漏要比另外两种窗函数大。在语音分析中,可根据不同的情况选择不同的窗函数。

实现代码

%矩形窗的幅频响应曲线, 窗长M=32
clc; close all;
w=linspace(-pi,pi,501); %linspace用于产生-pi,pi之间的501点行线性的矢量
% 窗长=32
M=51; n=0:M;
x1=ones(1,length(n));         %矩形窗计算函数
X1=dtft(x1,n,w);              %求离散时间傅里叶变换
magX1=abs(X1);                %归一化处理
magX1=magX1/max(magX1);
% 海宁窗的幅频响应曲线
% M = 32
x2=0.5*(1-cos((2*pi*n)/(M-1)));      %海宁窗计算函数
X2=dtft(x2,n,w);
magX2=abs(X2);
magX2=magX2/max(magX2);
% 汉明窗的幅频响应曲线
% M = 32
x3=0.54-0.46*cos((2*pi*n)/(M-1));
X3=dtft(x3,n,w);
magX3=abs(X3);
magX3=magX3/max(magX3);     %汉明窗计算函数
%画矩形窗的幅频响应
subplot(311)
plot(w/pi,20*log10(magX1));
axis([-1 1 -80 0]);
ylabel('|X|');
title(['矩形窗M=32的的幅频响应']);
%画汉明窗的幅频响应
subplot(312)
plot(w/pi,20*log10(magX3));
axis([-1 1 -80 0]);
ylabel('|X|');
title(['汉明窗M = 32的幅频响应']);
%画海宁窗的幅频响应
subplot(313)
plot(w/pi,20*log10(magX2));
axis([-1 1 -80 0]);
ylabel('|X|');
title(['海宁窗M = 32的幅频响应']);function [ X ] = dtft( x,n,w )
%  计算离散时间傅里叶变换
%   [X] = dtft(x,n,w)
%    X = DTFT values computed at w.frequencies
%    x = finite duration sequence over n
%    n = sample position vector
%    w = frequency location vector
X = x*exp(-1j*n'*w);%傅里叶变换
end

3.语音的同态处理、复倒谱、倒谱

同态处理
同态处理是一种设法将非线性问题转化为线性问题来进行处理的方法,它能将两个通过乘法或卷积合成的信号分开。
语音信号x(n)可以看作是声门激励信号x1(n)和声道冲激响应x2(n)的卷积,即
x(n)=x1(n)∗x2(n)x(n)=x_{1}(n) * x_{2}(n) x(n)=x1​(n)∗x2​(n)
同态系统由两个特征子系统和一个线性子系统组成:

第一个子系统是将卷积性信号转换为加性信号的运算
{Z[x(n)]=Z[x1(n)∗x2(n)]=X1(z)⋅X2(z)=X(z)ln⁡X(z)=ln⁡X1(z)+ln⁡X2(z)=X^1(z)+X^1(z)=X^(z)Z−1[X^(z)]=Z−1[X^1(z)+X^2(z)]=x^1(n)+x^2(n)=x^(n)\left\{\begin{array}{l}{Z[x(n)]=Z\left[x_{1}(n) * x_{2}(n)\right]=X_{1}(z) \cdot X_{2}(z)=X(z)} \\ {\ln X(z)=\ln X_{1}(z)+\ln X_{2}(z)=\hat{X}_{1}(z)+\hat{X}_{1}(z)=\hat{X}(z)} \\ {Z^{-1}[\hat{X}(z)]=Z^{-1}\left[\hat{X}_{1}(z)+\hat{X}_{2}(z)\right]=\hat{x}_{1}(n)+\hat{x}_{2}(n)=\hat{x}(n)}\end{array}\right. ⎩⎪⎨⎪⎧​Z[x(n)]=Z[x1​(n)∗x2​(n)]=X1​(z)⋅X2​(z)=X(z)lnX(z)=lnX1​(z)+lnX2​(z)=X^1​(z)+X^1​(z)=X^(z)Z−1[X^(z)]=Z−1[X^1​(z)+X^2​(z)]=x^1​(n)+x^2​(n)=x^(n)​
第二个子系统是对加性信号进行线性处理y^(n)

第三个子系统对x^(n)进行逆变换,使其恢复为卷积性信号
Z[x(n)]=Z[x1(n)∗x2(n)]=X1(z)⋅X2(z)=X(z)ln⁡X(z)=ln⁡X1(z)+ln⁡X2(z)=X^1(z)+X^1(z)=X^(z)Z−1[X^(z)]=Z−1[X^1(z)+X^2(z)]=x^1(n)+x^2(n)=x^(n)\begin{array}{l}{Z[x(n)]=Z\left[x_{1}(n) * x_{2}(n)\right]=X_{1}(z) \cdot X_{2}(z)=X(z)} \\ {\ln X(z)=\ln X_{1}(z)+\ln X_{2}(z)=\hat{X}_{1}(z)+\hat{X}_{1}(z)=\hat{X}(z)} \\ {Z^{-1}[\hat{X}(z)]=Z^{-1}\left[\hat{X}_{1}(z)+\hat{X}_{2}(z)\right]=\hat{x}_{1}(n)+\hat{x}_{2}(n)=\hat{x}(n)}\end{array} Z[x(n)]=Z[x1​(n)∗x2​(n)]=X1​(z)⋅X2​(z)=X(z)lnX(z)=lnX1​(z)+lnX2​(z)=X^1​(z)+X^1​(z)=X^(z)Z−1[X^(z)]=Z−1[X^1​(z)+X^2​(z)]=x^1​(n)+x^2​(n)=x^(n)​

倒谱分析的目的

由于浊音信号的倒谱中存在峰值,出现位置等于该语音段的基音周期,而清音的倒谱中不存在峰值。由这个特性可以进行清音和浊音的判断,并且可以估计浊音的基音周期。

复倒谱

X^(z)=ln⁡X(z)X^(ejw)=ln⁡X(ejw)=ln⁡{∣X(ejw)∣ejarg⁡[X(ejw)]}=ln⁡∣X(ejw)∣+jarg⁡[X(ejw)]x^(n)=12π∫−ππX^(ejw)ejwndw=12π∫−ππ{ln⁡∣X(ejw)∣+jarg⁡[X(ejw)]}ejwndw\begin{array}{c}{\hat{X}(z)=\ln X(z)} \\ {\hat{X}\left(e^{j w}\right)=\ln X\left(e^{j w}\right)=\ln \left\{\left|X\left(e^{j w}\right)\right| e^{j \arg \left[X\left(e^{j w}\right)\right]}\right\}=\ln \left|X\left(e^{j w}\right)\right|+\operatorname{jarg}\left[X\left(e^{j w}\right)\right]} \\ {\hat{x}(n)=\frac{1}{2 \pi} \int_{-\pi}^{\pi} \hat{X}\left(e^{j w}\right) e^{j w n} d w=\frac{1}{2 \pi} \int_{-\pi}^{\pi}\left\{\color{Red}\ln \left|X\left(e^{j w}\right)\right|+\operatorname{jarg}\left[X\left(e^{j w}\right)\right]\right\} e^{j w n} d w}\end{array} X^(z)=lnX(z)X^(ejw)=lnX(ejw)=ln{∣∣​X(ejw)∣∣​ejarg[X(ejw)]}=ln∣∣​X(ejw)∣∣​+jarg[X(ejw)]x^(n)=2π1​∫−ππ​X^(ejw)ejwndw=2π1​∫−ππ​{ln∣∣​X(ejw)∣∣​+jarg[X(ejw)]}ejwndw​

$$
\hat{x}(n) 是{\color{Red}\hat{X}(e^{jw})}

的逆傅里叶变换,称为x(n)的复倒谱。
$$

倒谱

c(n)=12π∫−ππ{ln⁡∣X(ejw)∣}ejwndwc(n)=\frac{1}{2 \pi} \int_{-\pi}^{\pi}\left\{\color{blue}\ln \left|X\left(e^{j w}\right)\right|\right\} e^{j w n} d w c(n)=2π1​∫−ππ​{ln∣∣​X(ejw)∣∣​}ejwndw

xc(n)是X^(ejw)实部的逆傅里叶变换,称为x(n)的倒谱。xc(n)是{\color{Red}\hat{X}(e^{jw})}实部的逆傅里叶变换,称为x(n)的倒谱。 xc(n)是X^(ejw)实部的逆傅里叶变换,称为x(n)的倒谱。

如果c1(n)和c2(n)分别是x1(n)和x2(n)的倒谱,并且x(n)=x1(n)*x2(n);那么x(n)的倒谱为c(n)=c1(n)+c2(n)。

与复倒谱不同的是,在倒谱情况下一个序列经过正逆两个特征系统变换后,不能还原成自身,因为c(n)中只有幅值信息而无相位信息。尽管如此,但仍可用于语音信号分析中,因为人们的听觉对语音的感知特征主要包含在幅度信息中,相位信息不起主要作用。

例 从sul.txt中读入语音数据,信号的采样频率为16 000 Hz,按式
c(n)=12π∫−ππ{ln⁡∣X(ejw)∣}ejwndwc(n)=\frac{1}{2 \pi} \int_{-\pi}^{\pi}\left\{\color{blue}\ln \left|X\left(e^{j w}\right)\right|\right\} e^{j w n} d w c(n)=2π1​∫−ππ​{ln∣∣​X(ejw)∣∣​}ejwndw
计算信号的倒谱,并从中把语音的声门激励信号和声道冲激响应分离,分别得到声门激励信号的频谱和声道冲激响应的频谱。

实现代码

%倒谱分析
clear all; clc; close all;
y=load('su1.txt');                            % 读入数据
fs=16000; nfft=1024;                          % 采样频率和FFT的长度time=(0:nfft-1)/fs;                           % 时间刻度
%disp(time);
figure(1), subplot 211; plot(time,y,'k');     % 画出信号波形
title('信号波形');
axis([0 max(time) -0.7 0.7]);
ylabel('幅值'); xlabel(['时间/s' 10 '(a)']); grid;figure(2)
nn=1:nfft/2; ff=(nn-1)*fs/nfft;               % 计算频率刻度
%disp(ff);
Y=log(abs(fft(y)));                           % 按公式取实数部分
subplot 211; plot(ff,Y(nn),'k'); hold on;     % 画出信号的频谱图
z=ifft(Y);                                    % 按公式求取倒谱figure(1),subplot 212; plot(time,z,'k');     % 画出倒谱图
title('信号倒谱图');
axis([0 time(512) -0.2 0.2]); grid;
ylabel('幅值'); xlabel(['倒频率/s' 10 '(b)']);
mcep=29;     % 分离声门激励脉冲和声道冲激响应,认为基音频率都应低于500HZ,为了留有余量,取550hz
% mcep取16000/550=29,即在倒谱域中第29条谱线之前是反映了包络的系数。zy=z(1:mcep+1); % 0~29(mcep)区间构成声道冲激响应的倒谱序列
zy=[zy' zeros(1,nfft-2*mcep-1) zy(end:-1:2)']; % 构建声道冲激响应的倒谱序列(预加重)
%预加重目的是为了更好的分析声道,去掉激励模型和辐射模型的影响ZY=fft(zy);                                   % 计算声道冲激响应的频谱
figure(2)                                    % 画出声道冲激响应的频谱,用灰线表示
line(ff,real(ZY(nn)),'color',[.6 .6 .6],'linewidth',3);
grid; hold off; ylim([-4 5]);
title('信号频谱(黑线)和声道冲激响频谱(灰线)')
ylabel('幅值'); xlabel(['频率/Hz' 10 '(a)']);
ft=[zeros(1,mcep+1) z(mcep+2:end-mcep)' zeros(1,mcep)]; % 构建声门激励脉冲的倒谱序列(预加重)
FT=fft(ft);                                  % 计算声门激励脉冲的频谱
figure(2)
subplot 212; plot(ff,real(FT(nn)),'k'); grid;% 画出声门激励脉冲的频谱
title('声门激励脉冲频谱')
ylabel('幅值'); xlabel(['频率/Hz' 10 '(b)']); 

运行结果


图一

​ 图二

经过倒谱分析后,把声门激励脉冲和声道冲激响应分离。它们在倒谱中处于不同的倒频区间,我们以倒谱中第29条谱线为界,0~29区间构成声道冲激响应的倒谱序列;用该倒谱序列通过傅里叶逆变换,就可得到图二(a)中灰线所示的声道冲激响应的频谱,在灰线的频谱图上可清楚地看出共振峰的信息。而在倒谱图中的30~512区间构成声门激励脉冲的倒谱序列,通过傅里叶逆变换,就可得到图二(b)中声门激励脉冲的频谱图,从图中可以方便地获取基频的信息

利用倒谱分离语音中的声门激励信号声道冲激响应序列的信息,从而可得共振峰;

利用复倒谱消除语音中的混响回声,则对语音信号进行增强

mcep=29;     % 分离声门激励脉冲和声道冲激响应,
% mcep取16000/550=29.09,即在倒谱域中第29条谱线之前是反映了包络的系数。
zy=[zy' zeros(1,nfft-2*mcep-1) zy(end:-1:2)']; % 构建声道冲激响应的倒谱序列(预加重)
%预加重目的是为了更好的分析声道,去掉激励模型和辐射模型的影响
ft=[zeros(1,mcep+1) z(mcep+2:end-mcep)' zeros(1,mcep)]; % 构建声门激励脉冲的倒谱序列(预加重)

在这个例子中,采样频率为16000HZ,认为基音频率都应低于500HZ,为了留有余量,取16000/550=29,即在倒谱域中第29条谱线之前是反映了包络的系数。所以取29就是这样得来的。
信号模型可看成激励模型、声道模型、辐射模型的串联。预加重目的是为了更好的分析声道,去掉激励模型和辐射模型的影响。激励模型是一个二阶的低通模型,辐射模型是一阶高通模型,所以再增加一个预加重,增加加一个一阶高通,以平衡激励模型和辐射模型的影响。
倒谱中横坐标不是频率,而是倒频率(quefrency,量纲是时间),它的刻度同时间序列中x对应的刻度相同,在FFT(x)以后包络的起伏比较缓,就是它的倒频率低。倒频谱中的横轴也反映了在采样频率16000下不同频率的周期,550Hz的周期为29,即第29条谱线。在大于第29条谱线以后的谱线,对应的信号分量的频率都要小于550Hz,即在基频的区间中。在倒频率范 围中我们取小于550Hz的倒频谱来求包络。

倒谱图形分析

包络(声道冲击响应)是倒谱的低频部分,声门激励信号是倒谱的高频。

参考:https://blog.csdn.net/zouxy09/article/details/9156785

下面是一个语音的频谱图。峰值就表示语音的主要频率成分,我们把这些峰值称为共振峰(formants),而共振峰就是携带了声音的辨识属性(就是个人身份证一样)。所以它特别重要。用它就可以识别不同的声音。

既然它那么重要,那我们就是需要把它提取出来!我们要提取的不仅仅是共振峰的位置,还得提取它们转变的过程。所以我们提取的是频谱的包络(Spectral Envelope)。这包络就是一条连接这些共振峰点的平滑曲线。

我们可以这么理解,将原始的频谱由两部分组成:包络和频谱的细节。这里用到的是对数频谱,所以单位是dB。那现在我们需要把这两部分分离开,这样我们就可以得到包络了。

那怎么把他们分离开呢?也就是,怎么在给定log X[k]的基础上,求得log H[k] 和 log E[k]以满足log X[k] = log H[k] + log E[k]呢?

为了达到这个目标,我们需要Play a Mathematical Trick。这个Trick是什么呢?就是对频谱做FFT。在频谱上做傅里叶变换就相当于逆傅里叶变换Inverse FFT (IFFT)。需要注意的一点是,我们是在频谱的对数域上面处理的,这也属于Trick的一部分。这时候,在对数频谱上面做IFFT就相当于在一个伪频率(pseudo-frequency)坐标轴上面描述信号。

由上面这个图我们可以看到,包络是主要是低频成分(这时候需要转变思维,这时候的横轴就不要看成是频率了,咱们可以看成时间),我们把它看成是一个每秒4个周期的正弦信号。这样我们在伪坐标轴上面的4Hz的地方给它一个峰值。而频谱的细节部分主要是高频。我们把它看成是一个每秒100个周期的正弦信号。这样我们在伪坐标轴上面的100Hz的地方给它一个峰值。

把它俩叠加起来就是原来的频谱信号了。

在实际中咱们已经知道log X[k],所以我们可以得到了x[k]。那么由图可以知道,h[k]是x[k]的低频部分,那么我们将x[k]通过一个低通滤波器就可以得到h[k]了!没错,到这里咱们就可以将它们分离开了,得到了我们想要的h[k],也就是频谱的包络。

x[k]实际上就是倒谱Cepstrum(这个是一个新造出来的词,把频谱的单词spectrum的前面四个字母顺序倒过来就是倒谱的单词了)。而我们所关心的h[k]就是倒谱的低频部分。h[k]描述了频谱的包络,它在语音识别中被广泛用于描述特征。

那现在总结下倒谱分析,它实际上是这样一个过程:

1)将原语音信号经过傅里叶变换得到频谱:X[k]=H[k]E[k];

只考虑幅度就是:|X[k] |=|H[k]||E[k] |;

2)我们在两边取对数:log||X[k] ||= log ||H[k] ||+ log ||E[k] ||。

3)再在两边取逆傅里叶变换得到:x[k]=h[k]+e[k]。

这实际上有个专业的名字叫做同态信号处理。它的目的是将非线性问题转化为线性问题的处理方法。对应上面,原来的语音信号实际上是一个卷性信号(声道相当于一个线性时不变系统,声音的产生可以理解为一个激励通过这个系统),第一步通过卷积将其变成了乘性信号(时域的卷积相当于频域的乘积)。第二步通过取对数将乘性信号转化为加性信号,第三步进行逆变换,使其恢复为卷性信号。这时候,虽然前后均是时域序列,但它们所处的离散时域显然不同,所以后者称为倒谱频域。

总结:

倒谱(cepstrum)就是一种信号的傅里叶变换经对数运算后再进行傅里叶反变换得到的谱。它的计算过程如下:

语音信号处理基础(八)——同态处理、倒谱、复倒谱相关推荐

  1. # 语音信号处理基础(十)——梅尔倒谱系数

    文章目录 1.定义 2.Mel频率分析 3.编写Mel滤波器函数 1.定义 在语音识别(SpeechRecognition)和话者识别(SpeakerRecognition)方面,最常用到的语音特征就 ...

  2. #语音信号处理基础(十一)——梅尔倒谱系数的提取

    文章目录 1.Mel频率倒谱系数(Mel-Frequency Cepstral Coefficients) 2.梅尔参数的提取 1.Mel频率倒谱系数(Mel-Frequency Cepstral C ...

  3. 语音信号处理基础(一)

    语音信号处理基础(一) 文章目录 语音信号处理基础(一) 1.绪论 1.1概述 1.2语音信号处理的三个主要分支 1.2.1 语音合成 名词解释 共振峰 基音(fundamental tone) 基因 ...

  4. 深度学习中的语音信号处理基础

    文章目录 音频处理流程 常用谱:幅度谱.梅尔谱 时域 --> 频域 分帧 窗长 帧移 语音信号特征获取流程 梅尔谱 使用 librosa 提取梅尔谱 使用 tacotron 获取梅尔谱(推荐) ...

  5. 语音信号处理基础(四)—语音编辑

    语音信号处理基础(四)-语音编辑 文章目录 语音信号处理基础(四)-语音编辑 实验目的 实验原理 1.信号的叠加 2.信号的卷积 3.信号采样频率的变换 实验目的 1.掌握语音信号线性叠加的方法,实现 ...

  6. 语音信号处理基础(二)

    语音信号处理基础(二) 1.2.2 语音编码 语音编码的目的 保证在一定语音质量的前提下,尽可能降低编码比特率,以节省频率资源. 语音编码技术的鼻祖:研究开始于1939年军事保密通信的需要,贝尔电话实 ...

  7. 语音信号处理基础与MFCC

    讲道理,想要处理语音这种时间信号,最适合RNN或者SNN这种神经网络来进行识别,传统的方法是基于GMM+HMM的方式进行声学模型以及语言模型的建模.现在的语音识别往往引入神经网络,进行端到端(end- ...

  8. 语音信号处理基础(五)——语音分帧与加窗

    文章目录 原理 1.加窗 2.分帧 一般而言语音处理的目的有两种: 一种是对语音信号进行分析,提取特征参数,用于后续处理: 提取的特征参数主要有语音的短时能量和平均幅度.短时平均过零率.短时自相关函数 ...

  9. 语音信号处理-基础(二): 发声生理、听觉生理与听觉心理

    一.语音的来源 1.声带 喉部的声带是对发音影响很大的器官. 声带的声学功能是为语音提供主要的激励源: 由声带震动产生声音,是形成声音的基本声源. 2.基频 声带开启和闭合使气流形成一系列脉冲,每开启 ...

最新文章

  1. sqoop mysql parquet_sqoop一些语法的使用
  2. 【Android 应用开发】Canvas 绘制文字 ( 文字尺寸测量 | 基线绘制 )
  3. java 桥接模式_《JAVA与模式》之桥接模式
  4. 轻松上手系列教程java_小白也能轻松上手的Prometheus教程
  5. make文件基础用法
  6. oracle 全文检索技术
  7. 微软CRM记录列表每页显示超过250个记录解决办法
  8. 20220227:力扣第282场周赛(上)
  9. 练习题 - 基于快速文本标题匹配的知识问答实现(二,实现篇)
  10. 苹果Mac AI 智能图像降噪工具:Topaz DeNoise AI
  11. asp.net中时间差的问题
  12. windows虚拟显示器SDK开发和提供
  13. 目标检测之fasterRCNN:关于学习使用fasterRCNN做目标检测
  14. 赛事相关 | 腾讯觅影×腾讯云TI平台,锁了
  15. xtu oj 1355
  16. mysql模糊查询之索引优化
  17. OpenMP编程(4)—sections、single指令
  18. 数字信号处理之期中斩神篇(一重 搬山)
  19. jmpi 与ljmp指令分析
  20. 方法重载例题 编写程序计算两个同类型的数之和 Java

热门文章

  1. LayUI清空下拉框的值
  2. VBScript脚本
  3. java中 運算符,Java中的運算符
  4. java系统缓存应用_著名java开源缓存系统 【zz】
  5. PAT_1032验证身份(15)
  6. Python入门--文件的读写,相对路径,绝对路径
  7. JAVA集合二:HashMap和Hashtable
  8. 三分法:有相同元素值快速排序(双向扫描出现3个指针)
  9. Codeforces Round #383 (Div. 1): D. Arpa’s letter-marked tree…(dsu on tree+状压)
  10. bzoj 3393 bzoj 1644: [Usaco2007 Oct]Obstacle Course 障碍训练课(BFS)