在本文中,我们将为您详细介绍躲藏文本的相关知识,并且为您解答关于hiddentext的疑问,此外,我们还会提供一些关于(OK)隐马尔可夫模型(HiddenMarkovModel,HMM)server-
在本文中,我们将为您详细介绍躲藏文本的相关知识,并且为您解答关于hiddentext的疑问,此外,我们还会提供一些关于(OK) 隐马尔可夫模型(Hidden Markov Model,HMM)server - client、2000_wideband extension of telephone speech using a hidden Markov model、AddDbContext was called with configuration, but the context type ''NewsContext'' only decla...、angularjs – 部署到生产后出错:未知提供者:$$isDocumentHiddenProvider < - $$isDocumentHidden的有用信息。
本文目录一览:- 躲藏文本(hiddentext)(躲避文字)
- (OK) 隐马尔可夫模型(Hidden Markov Model,HMM)server - client
- 2000_wideband extension of telephone speech using a hidden Markov model
- AddDbContext was called with configuration, but the context type ''NewsContext'' only decla...
- angularjs – 部署到生产后出错:未知提供者:$$isDocumentHiddenProvider < - $$isDocumentHidden
躲藏文本(hiddentext)(躲避文字)
一种做弊技能,经过这种技能,网页上的文字被规划来被蜘蛛程序而不是人看到,文本可以经过用极小的的字号显色彩,或许将要害词被图形或许其他网页元素掩盖等,做弊者在网页上堆积要害词来得到高的查找排名。
经过这种技能,网页上的文字被规划来被蜘蛛程序而不是人看到,文本可以经过用极小的的字号显现而不被看到,或许运用和背景色彩一样的色彩,或许将要害词被图形或许其他网页元素掩盖等,做弊者在网页上堆积要害词来得到高的查找排名。
(OK) 隐马尔可夫模型(Hidden Markov Model,HMM)server - client
vim tcp_server.c
/*
[root@bupt src]# cd markov-main/mim-hmm/src
[root@bupt src]# make
[root@bupt src]# ./hxx_baumwelch-1 0.5 0.5 0.5 0.5 0.7 0.2 0.1 0.1 0.2 0.7 0.9 0.1 100
*/
//ztg add
//-----------------------------------
extern "C"
{
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
}
//-----------------------------------
#include "hxx.hpp"
#include <algorithm>
#include <iostream>
#include <vector>
using std::cout;
using std::random_shuffle;
using std::vector;
char buf2[256];
void output_biglambda (const hxx_matrices&);
void hmm (char* argv[]);
//ztg add
//-----------------------------------
int main (int argc, char* argv[])
{
int iii, BUF_SIZE = 256;
char buf[BUF_SIZE];
char *token, *hmm_str[13];
/* delete the socket file */
unlink("/data/hmm_socket");
/* create a socket */
int server_sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
struct sockaddr_un server_addr;
server_addr.sun_family = AF_UNIX;
strcpy(server_addr.sun_path, "/data/hmm_socket");
/* bind with the local file */
bind(server_sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr));
/* listen */
listen(server_sockfd, 5);
int client_sockfd;
struct sockaddr_un client_addr;
socklen_t len = sizeof(client_addr);
while(1)
{
printf("server waiting:\n");
/* accept a connection */
client_sockfd = accept(server_sockfd, (struct sockaddr *)&client_addr, &len);
/* exchange data */
//read(client_sockfd, &ch, 1);
bzero(buf, BUF_SIZE);
recv(client_sockfd, buf, BUF_SIZE, MSG_NOSIGNAL);
printf("get char from client: %s\n", buf);
iii = 0;
token = strtok(buf, "-");
while (token != NULL)
{
hmm_str[iii++] = token;
//printf("%s\n", token);
token = strtok(NULL, "-");
}
for (int i=0; i<13; ++i) printf("%s\n", hmm_str[i]);
bzero(buf2, BUF_SIZE);
hmm(hmm_str);
send(client_sockfd, buf2, strlen(buf2), MSG_NOSIGNAL);
//bzero(buf2, BUF_SIZE);
//sprintf(buf2, "%s-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s", hmm_str[0], hmm_str[1], hmm_str[2], hmm_str[3], hmm_str[4], hmm_str[5], hmm_str[6], hmm_str[7], hmm_str[8], hmm_str[9], hmm_str[10], hmm_str[11], hmm_str[12]);
//send(client_sockfd, buf2, strlen(buf2), MSG_NOSIGNAL);
/* close the socket */
close(client_sockfd);
}
return 0;
}
//-----------------------------------
//ztg alter
//int main (int argc, char* argv[])
void hmm (char* argv[])
{
//ztg add
//-----------------------------------
/*
double a1 = atof(argv[1]), a2 = atof(argv[2]), a3 = atof(argv[3]), a4 = atof(argv[4]);
double b1 = atof(argv[5]), b2 = atof(argv[6]), b3 = atof(argv[7]), b4 = atof(argv[8]), b5 = atof(argv[9]), b6 = atof(argv[10]);
double p1 = atof(argv[11]), p2 = atof(argv[12]);
int times = atoi(argv[13]);
//*/
double a1 = atof(argv[0]), a2 = atof(argv[1]), a3 = atof(argv[2]), a4 = atof(argv[3]);
double b1 = atof(argv[4]), b2 = atof(argv[5]), b3 = atof(argv[6]), b4 = atof(argv[7]), b5 = atof(argv[8]), b6 = atof(argv[9]);
double p1 = atof(argv[10]), p2 = atof(argv[11]);
int times = atoi(argv[12]);
//-----------------------------------
/*
λ = (H, O, A, B, π )
H = {connect, disconnect}
O = {good, moderate, bad}
A = {a11, a12,
a21, a22};
B = {b11, b12, b13,
b21, b22, b23};
Pi = {p1, p2};
0.5 0.5 0.5 0.5 0.7 0.2 0.1 0.1 0.2 0.7 0.9 0.1
*/
//ztg alter
//-----------------------------------
/*
auto A = {.5, .5,
.5, .5};
auto B = {.7, .2, .1,
.1, .2, .7};
auto Pi = {.9, .1};
//*/
auto A = {a1, a2,
a3, a4};
auto B = {b1, b2, b3,
b4, b5, b6};
auto Pi = {p1, p2};
//-----------------------------------
hxx_matrices biglambda (A, B, Pi);
hxx_gen hg (A, B, Pi);
pair<int, int> tmp;
//ztg alter
//int T = 100000;
int T = times;
vector<int> Q (T);
vector<int> O (T);
for (int t = 0; t < T; ++t) {
tmp = hg ();
Q[t] = tmp.first;
O[t] = tmp.second;
}
vector<double> Xi, Gamma;
//random_shuffle (O.begin (), O.end ());
hxx_forwardbackward (O, biglambda, Xi, Gamma);
hxx_matrices newbiglambda (A, B, Pi);
hxx_baumwelch (O, Xi, Gamma, newbiglambda);
for (int t = 4; t < T; ++t) {
double likelihood = hxx_forward (O.cbegin () + t - 4, O.cbegin () + t + 1, A, B, Pi);
cout << Q[t] << " " << O[t] << " " << likelihood << "\n";
}
//ztg alter
//-----------------------------------
//*
cout << "Original biglambda\n";
output_biglambda (biglambda);
cout << "New biglambda\n";
output_biglambda (newbiglambda);
//*/
int ii = 0;
double *hmm_str[12];
int N = newbiglambda.N ();
int M = newbiglambda.M ();
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
hmm_str[ii++] = & newbiglambda.a (i, j);
}
}
for (int i = 0; i < N; ++i) {
for (int k = 0; k < M; ++k) {
hmm_str[ii++] = & newbiglambda.b (i, k);
}
}
for (int i = 0; i < N; ++i) {
hmm_str[ii++] = & newbiglambda.p (i);
}
sprintf(buf2, "%.10f-%.10f-%.10f-%.10f-%.10f-%.10f-%.10f-%.10f-%.10f-%.10f-%.10f-%.10f-%d", *hmm_str[0], *hmm_str[1], *hmm_str[2], *hmm_str[3], *hmm_str[4], *hmm_str[5], *hmm_str[6], *hmm_str[7], *hmm_str[8], *hmm_str[9], *hmm_str[10], *hmm_str[11], 100);
printf("%s\n", buf2);
//-----------------------------------
}
void output_biglambda (const hxx_matrices& biglambda) {
int N = biglambda.N ();
int M = biglambda.M ();
cout << "A = {";
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
cout << " " << biglambda.a (i, j);
}
}
cout << " }\n";
cout << "B = {";
for (int i = 0; i < N; ++i) {
for (int k = 0; k < M; ++k) {
cout << " " << biglambda.b (i, k);
}
}
cout << " }\n";
cout << "Pi = {";
for (int i = 0; i < N; ++i) {
cout << " " << biglambda.p (i);
}
cout << " }\n";
}
vim tcp_client.c
/*
gcc -g -Wall -o tcp_client tcp_client.c
*/
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
int main()
{
int iii, BUF_SIZE = 256;
char buf[BUF_SIZE];
double hmm[12] = {0.5, 0.5, 0.5, 0.5, 0.7, 0.2, 0.1, 0.1, 0.2, 0.7, 0.9, 0.1};
int times = 100;
char *token, *hmm_str[13];
/* create a socket */
int sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
struct sockaddr_un address;
address.sun_family = AF_UNIX;
strcpy(address.sun_path, "/data/hmm_socket");
/* connect to the server */
int result = connect(sockfd, (struct sockaddr *)&address, sizeof(address));
if(result == -1)
{
perror("connect failed: ");
exit(1);
}
/* exchange data */
//char ch = ''A'';
//write(sockfd, &ch, 1);
//read(sockfd, &ch, 1);
//printf输出float和double都可以用%f,double还可以用%lf
//scanf输入float用%f,double输入用%lf,不能混用
//printf("%10.4f\n",123.45678), 10.4总宽10 (包括小数点), 小数部分保留4位(四舍五入), 结果为: 123.4568(前面两个空格)
bzero(buf, BUF_SIZE);
sprintf(buf, "%.10f-%.10f-%.10f-%.10f-%.10f-%.10f-%.10f-%.10f-%.10f-%.10f-%.10f-%.10f-%d", hmm[0], hmm[1], hmm[2], hmm[3], hmm[4], hmm[5], hmm[6], hmm[7], hmm[8], hmm[9], hmm[10], hmm[11], times);
//linux下当连接断开,还发数据的时候,不仅send()的返回值会有反映,而且还会向系统发送一个异常消息,如果不作处理,系统会出BrokePipe,
//程序会退出,这对于服务器提供稳定的服务将造成巨大的灾难。为此,send()函数的最后一个参数可以设MSG_NOSIGNAL,禁止send()函数向系统发送异常消息
send(sockfd, buf, strlen(buf), MSG_NOSIGNAL);
bzero(buf, BUF_SIZE);
recv(sockfd, buf, BUF_SIZE, MSG_NOSIGNAL);
printf("get char from server: %s\n", buf);
iii = 0;
token = strtok(buf, "-");
while (token != NULL)
{
hmm_str[iii++] = token;
//printf("%s\n", token);
token = strtok(NULL, "-");
}
for (int i=0; i<13; ++i) printf("%s\n", hmm_str[i]);
/* close the socket */
close(sockfd);
return 0;
}
2000_wideband extension of telephone speech using a hidden Markov model
论文地址:基于隐马尔科夫模型的电话语音频带扩展
博客作者:凌逆战
博客地址:https://www.cnblogs.com/LXP-Never/p/12151866.html
摘要
本文提出了一种从lowpass-bandlimited(低通带限)语音中恢复宽带语音的算法。窄带输入信号被分类为有限数量的语音,关于宽带频谱包络的信息取自预先训练的码本。在码本搜索算法中,采用了一种基于隐马尔可夫模型的统计方法,该方法考虑了带限语音的不同特征,使均方误差准则最小化。新算法只需要一个宽带码本,本质上保证了系统在基带的透明性。增强后的语音比输入语音的带宽大得多,而且没有引入令人讨厌的artifacts(伪影)。
1 引言
在目前的公共电话系统中,传输语音的带宽被限制在300 Hz到3.4 kHz的频率范围内。这导致了典型的电话语音通常是单薄和低沉的。然而,近年来,我们发现人们对语音通信系统的质量要求越来越高,不仅要求高的可懂度,还要求高的主观质量,例如在免提电话或电话会议应用中。这种趋势反映在正在进行的宽带语音编解码器的标准化上。
真正的宽带语音通信需要增强的语音编解码器和提高的比特率,因此需要修改传输链路。因此,出于经济原因,带宽限制在未来不太可能改变。另一种获得更高带宽的方法是仅利用带限语音来推断传输链路接收端语音信号中缺失的低频和高频成分。
这种语音信号的带宽扩展只有基于语音产生过程的模型时才是可行的。宽带源模型的参数可以从带限语音中估计出来。这些参数可以与源模型结合使用来估计和添加缺失的频率。
本文只讨论带宽向更高频率的扩展,即假设输入信号只包含低于3.4 kHz的频率(这个频段将在下文中定义为基带)。通过增加信号分量,它将扩展到频率高达7khz。
2 算法
根据语音产生过程的自回归(AR)模型,将提出的带宽扩展算法分为两个任务,这两个任务在一定程度上是相互独立的:语音信号的频谱包络线的扩展和激励信号的扩展[1]。算法框图如图1所示。
图1 带宽扩展算法的块图和主信号流
如果输入信号$s_{nb}(k'')$采样频率为$f_{a''}=8kHz$,则算法的第一步是一个low-pass interpolation(低通插值滤波器)。算法其余部分以$f_a = 16khz$的采样率处理输入信号。然而,信号$s_{nb}(k)$仍然只包含3.4 kHz以下的信号分量。进一步的处理是以20 ms的帧大小逐帧进行的。在下面,帧索引将由变量$m$表示。
使用窄带输入信号和预先训练的码本,计算当前语音帧的宽带谱包络的估计值(参见第3节)。然后从码本中提取描述该谱包络的AR滤波器系数$\hat{C}$,并将其用于FIR滤波器$H_1(z)$中以估计窄带激励信号$\hat{x}_{nb}$。由于对于无声帧,该激励信号的基带可以假定为近似白色,而对于有声帧,该激励信号的基带分别由振幅相等的谐波组成,因此其带宽可以非常简单地扩展(请参见第4节)。最终将扩展的激励信号$\hat{x}_{wb}(k)$馈入全极点合成滤波器$H_S(z)$,从而创建增强的输出信号$\hat{s}_{wb}(k)$。
与以往的语音信号带宽扩展算法(如[1, 2, 3])不同,所提出的算法不需要几个窄码本和宽带码本的组合。它只利用一个单一的宽带码本。因此,用于分析滤波器和合成滤波器的AR系数是相同的,而且这两个滤波器的传递函数是互逆的
$$公式1:H_s(z)=\frac{1}{H_1(z)}$$
由于这一特性,系统基带信号分量的透明性可以得到保证——这足以确保在残余信号扩展期间激励信号的基带不被修改。
3 频谱包络
如前一节所述,语音信号的频谱包络的扩展基于宽带码本。在该码本中,存储了代表典型语音频谱包络的几组AR系数(在下文中,第$i$组AR系数将由$C_i$表示。 码本条目的总数为$I$)。使用足够大的宽语音语音训练数据集和常用的LBG算法[4]对码本进行训练,从而最大程度地减少Itakuro距离测度(请参见[l])。尽管使用宽带语音材料对码本进行训练可以确保在码本中包含正确的代表不同语音的声音,但是这也带来了挑战,即对于输入信号的分类,即对输入信号的分类只有带限信号可用。
码本搜索方法的基础是语音生成过程的隐马尔可夫模型(HMM)。 HMM的恰好一个状态$S_i$被分配给码本的每个条目$C_i$。 进一步假设源的状态仅在输入信号的两个帧之间发生变化。 注意,如果宽带语音可用,则在模型意义上可以计算出真实状态序列。
如果只知道窄带语音,则通过以下步骤执行分类:首先,从窄带语音中提取有限数量的特征。将这些提取的特征与语音产生过程的统计模型进行比较。然后将当前的语音帧划分为训练好的语音或直接估计AR系数。
3.1 特征
对于每个信号帧,从bandlimited(带限)信号中提取一个$N$维特征向量$x(m)$。该向量由8个倒谱系数$c_1...c_8$,归一化帧能量$E_n$和[5]中定义的梯度指数$d_n$组成
$$公式2:
d_{n}=\frac{\sum_{k=2}^{K} \Delta \psi(k)\left|s_{n b}(k)-s_{n b}(k-1)\right|}{\sqrt{\frac{1}{K} \sum_{k=1}^{K} s_{n b}^{2}(k)}}
$$
式中$K$为每帧采样数,变量$\phi(k)$表示梯度$c_{nb}(k)-s_{nb}(k-1)$的标记,即$\psi (k)\in \{-1,1\}$,$\triangle \psi(k)=\frac{1}{2}|\psi(k)-\psi(k-1)|$。
倒谱系数包含窄带信号的频谱包络的形状信息,而其他两个量取决于语音激励的性质。此外,以上十个主要特征随时间的导数都包含在特征向量中,使得该向量$x(m)$的维数为$N = 20$。
3.2 统计模型
对于隐马尔可夫模型的每个可能状态$S_i$,语音产生过程产生的特征$x$表现出不同的统计特性。为了描述这些性质,我们使用了由以下三部分组成的统计模型。
3.2.1 观察概率$p(x|S_i)$
由于特征向量x的维度较高,这些概率密度函数(probability density function,pdf)$p(x|S_i)$由高斯混合模型(GMMS)建模:每个pdf被近似为$L$个高斯pdf的和。
$$公式3:
p\left(\boldsymbol{x} | S_{i}\right) \approx \sum_{l=1}^{L} P_{i l} \mathcal{N}\left(\boldsymbol{x} ; \mu_{i l}, \Sigma_{i l}\right)
$$
在这个方程中,$N(x;\mu_{il},\sum_{il})$表示具有平均矢量$\mu_{il}$和方差矩阵$\sum_{il}$的GMM的第$l$个N维高斯分布。每个高斯分布都由一个系数$P_{il}$加权,$\sum_{l=1}^LP_{il}=1$。
GMMs的训练,即$P_{il}$、$\mu_{il}$和$\sum_{il}$,可以用期望最大化(EM)算法(例如[ 6 ])来进行。这里用LBG算法[4]对训练数据进行聚类来确定。
对于隐马尔可夫模型的每个状态,必须使用完整训练材料的子集来训练一个不同的GMM,对于该GMM,其真实状态等于当前训练的状态。
3.2.2 初始状态概率$\pi_i=P(S_i)$
标量值$\pi_i$描述了HMM驻留在状态$S_i$中而不包含特征向量$x$或先后状态的概率。
该概率可以通过计算训练材料的真实状态序列和评估状态$S_i$的出现次数与训练集中的语音帧总数之间的比率来估计。通过码本存储所得到的概率值,使得实际的带宽扩展算法以后可以通过表查找来访问这些先验状态概率。
3.2.3 转移概率$a_{ij}=P(S_i(m+1)|S_j(m))$
变量$a_{ij}$描述了从状态$S_j$转换到状态$S_i$的概率。作为初始状态概率$\pi_i$,可以将转移概率存储在现在为二维的表中。在训练过程中,在了解了真实状态序列的情况下,将该表中的每个条目估计为从$S_j$到$S_i$的特定转换的发生次数与$S_j$状态的总发生次数之间的比率。
3.3 估计宽带AR系数
码本搜索算法的目标是计算宽带AR系数的估计值$\hat{C}$,使到真实系数C的距离最小。
对于估计规则的推导,将辅助变量$\alpha_i(m)$定义为部分观测序列$X(m)=\{x(0),x(1),...,x(m)\}$和状态$S_i(m)$在m帧时刻
$$公式4:\alpha_i(m)=P(S_i(m),X(m))$$
该辅助变量可以用联合概率$\alpha_i(m-1)$在m-1时刻的递归形式表示,观察概率$p(x(m)|S_i(m))$为
$$公式5:\alpha_i(m)=(\sum_{j=1}^I\alpha_j(m-1)a_{ij})p(x(m)|S_i(m))$$
由于前一个观测向量在第一帧是未知的,所以$\alpha_i(0)$的初始值必须由初始状态概率$\pi_i$计算
$$公式6:\alpha_i(0)\pi_ip(x(0)|S_i)$$
MMSE准则的目标是最小化估计AR系数$\hat{C}$与真实系数$C$之间的均方误差,从而使以下代价函数最小化
$$公式7:
\mathcal{R}_{\mathrm{MSE}}(\hat{\boldsymbol{C}} | \boldsymbol{X})=\iint(\hat{\boldsymbol{C}}-\boldsymbol{C})^{T}(\hat{\boldsymbol{C}}-\boldsymbol{C}) p(\boldsymbol{C} | \boldsymbol{X}) d \boldsymbol{C}
$$
通过对损失函数的导数求根,可以找到这个优化问题的一个解
$$公式8:
\hat{C}_{\text {natst }}=\iint \boldsymbol{C} p(\boldsymbol{C} | \boldsymbol{X}) d \boldsymbol{C}
$$
由于我们没有条件概率$p(C|X)$的显式模型,这个量必须以状态概率的形式间接表示
$$公式9:
\hat{C}_{\text {hass }}=\iint \boldsymbol{C}\left[\sum_{i=1}^{I} p\left(\boldsymbol{C} | S_{i}\right) P\left(S_{i} | \boldsymbol{X}\right)\right] d \boldsymbol{C}
$$
$$公式10:
=\sum_{i=1}^{I} P\left(S_{i} | \boldsymbol{X}\right) \underbrace{\iint \boldsymbol{C} p\left(\boldsymbol{C} | S_{i}\right) d \boldsymbol{C}}_{\mathcal{E}\left\{\boldsymbol{C} | S_{i}\right\}=\boldsymbol{C}_{i}}
$$
如图所示,在状态$S_i$出现的情况下,方程10右侧的积分得到C的期望值,即对应的码本向量$C_i$。应用贝叶斯规则,代入辅助变量$\alpha_i$,得到如下估计
$$公式11:
\hat{C}_{\text {mats } E}=\frac{\sum_{i=1}^{I} C_{i} \alpha_{i}(m)}{\sum_{i=1}^{I} \alpha_{i}(m)}
$$
由于$p(C|X)$是通过状态概率间接建模的,因此该估计器不能利用条件概率$p(C|S_i)$。可以通过直接建模和利用$p(C|X)$来设计一个更好的MMSE估计器,但这不是一项简单的任务。另外,可以在码本向量$C_i$的训练过程中考虑$p(C|S_i)$的知识。
4 剩余信号
由于窄带激励信号$\hat{x}_{nb}(k)$在base-band(基频)上近似为白色,因此计算宽频带激励信号的公式为
$$公式12:
\hat{x}_{w b}(k)=\left\{\begin{array}{ll}
{2 \hat{x}_{n b}(k)} & {; k=0, \pm 2, \pm 4 \ldots} \\
{0} & {; \text { else }}
\end{array}\right.
$$
这种操作导致了功率谱的折叠。因此,在$\hat{x}_{wb}(k)$中存在3.4到4.6 kHz的频谱间隙。另外,高频区域的谐波结构与低频分量不匹配。然而,在合成滤波器$H_S(z)$后,这些影响几乎听不见。
5 评估
为了评估所提出的算法,训练了几个不同尺寸的码本。在聆听算法的最佳输出时,即在已知true state sequence(真实状态序列)的情况下,发现对于大于I = 64的码本,增强信号与原始宽带语音几乎无法区分。即使是非常小的I = 3条目的codebook,也可以获得可接受的结果。
训练数据由截止频率为3.4 kHz的低通滤波器对宽带语音进行滤波得到。它由几位男女演讲者讲了大约10分钟的语音平衡的干净的话术组成。
在许多非正式的和比较的听力测试中,所描述的算法产生了良好的结果——显著地扩展了带宽。偶尔会出现声音伪影,,主要出现在[s]或[f]等清音摩擦音中,这是由码本搜索算法错误分类造成的。然而,算法中先验知识的使用越多,此类伪影的出现频率就越低。
6 总结
该方法能够将低通带限语音的带宽扩展到最高7kHz的频率范围。结果证明,在低频区域有足够的信息可以成功地估计高频成分的缺失,但是,对于这种估计,除了频谱包络之外,还应该利用窄带语音的更多特征。为此目的,提出的统计模型,是一个适当的工具。
7 参考文献
[1] H. Carl, “Untersuchung verschiedener Methoden der Sprachcodierung und eine Anwendung zur BandbreitenvegroBerung von Schmalband-Sprachsignalen”. Dissertation.Ruhr-Universitat Bochum, 1994
[2] J. Epps, W. H. Holmes, “A New Technique for Wideband Enhancement of Coded Narrowband Speech”. IEEE Workshop on Speech Coding. Porvoo, Finland, 1999
[3] N. Enbom, W. B. Kleijn, “Bandwidth Expansion of Speech Based on Vector Quantization of the Me1 Frequency Cepstral Coefficients”. IEEE Workshop on Speech Coding, Porvoo,Finland, 1999
[4] Y. Linde, A. Buzo, R. M. Gray, “An Algorithm for Vector Quantizer Design”. IEEE Trans. on Communications, January 1980
[5] J. Paulus, “Codierung breitbandiger Sprachsignale bei niedriger Datenrate”. Dissertation, RWTH Aachen, 1997
[6] S. V. Vaseghi, “Advanced Signal Processing and Digital Noise Reduction”. Wiley, Teubner, 1996
原文出处:https://www.cnblogs.com/LXP-Never/p/12151866.html
AddDbContext was called with configuration, but the context type ''NewsContext'' only decla...
问题
An error occurred while starting the application.
ArgumentException: AddDbContext was called with configuration, but the context type ''NewsContext'' only declares a parameterless constructor. This means that the configuration passed to AddDbContext will never be used. If configuration is passed to AddDbContext, then ''NewsContext'' should declare a constructor that accepts a DbContextOptions<NewsContext> and must pass it to the base constructor for DbContext.
Microsoft.Extensions.DependencyInjection.EntityFrameworkServiceCollectionExtensions.CheckContextConstructors<TContext>()
ArgumentException: AddDbContext was called with configuration, but the context type ''NewsContext'' only declares a parameterless constructor. This means that the configuration passed to AddDbContext will never be used. If configuration is passed to AddDbContext, then ''NewsContext'' should declare a constructor that accepts a DbContextOptions<NewsContext> and must pass it to the base constructor for DbContext.
Microsoft.Extensions.DependencyInjection.EntityFrameworkServiceCollectionExtensions.CheckContextConstructors<TContext>()
Microsoft.Extensions.DependencyInjection.EntityFrameworkServiceCollectionExtensions.AddDbContext<TContextService, TContextImplementation>(IServiceCollection serviceCollection, Action<IServiceProvider, DbContextOptionsBuilder> optionsAction, ServiceLifetime contextLifetime, ServiceLifetime optionsLifetime)
Microsoft.Extensions.DependencyInjection.EntityFrameworkServiceCollectionExtensions.AddDbContext<TContextService, TContextImplementation>(IServiceCollection serviceCollection, Action<DbContextOptionsBuilder> optionsAction, ServiceLifetime contextLifetime, ServiceLifetime optionsLifetime)
Microsoft.Extensions.DependencyInjection.EntityFrameworkServiceCollectionExtensions.AddDbContext<TContext>(IServiceCollection serviceCollection, Action<DbContextOptionsBuilder> optionsAction, ServiceLifetime contextLifetime, ServiceLifetime optionsLifetime)
News.Startup.ConfigureServices(IServiceCollection services) in Startup.cs
+
services.AddDbContext<NewsContext>(options =>
Microsoft.AspNetCore.Hosting.ConventionBasedStartup.ConfigureServices(IServiceCollection services)
Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureApplicationServices()
Microsoft.AspNetCore.Hosting.Internal.WebHost.Initialize()
Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
原因
NewsContext.cs
using Microsoft.EntityFrameworkCore;
namespace News.Service
{
public class NewsContext : DbContext
{
public DbSet<News.Model.Entity.News> News { get; set; }
public DbSet<News.Model.Entity.Banner> Banner { get; set; }
public DbSet<News.Model.Entity.Comment> Comment { get; set; }
public DbSet<News.Model.Entity.NewsClassify> NewsClassify { get; set; }
}
}
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
......
services.AddDbContext<NewsContext>(options =>
{
options.UseSqlServer(Configuration.GetConnectionString("MsSqlConnection"), db => db.UseRowNumberForPaging());
});
......
}
该错误表示,如果通过 AddDbContext 配置 NewsContext,那么需要添加一个 DbContextOptions<NewsContext> 类型参数的构造函数到 NewsContext 类。否则.net core 不能注入时带上 AddDbContext 添加的配置
解决方法
如上面所说,NewsContext 类添加一个 DbContextOptions<NewsContext> 类型参数的构造函数
using Microsoft.EntityFrameworkCore;
namespace News.Service
{
public class NewsContext : DbContext
{
public NewsContext(DbContextOptions<NewsContext> options) : base(options)
{
}
public DbSet<News.Model.Entity.News> News { get; set; }
public DbSet<News.Model.Entity.Banner> Banner { get; set; }
public DbSet<News.Model.Entity.Comment> Comment { get; set; }
public DbSet<News.Model.Entity.NewsClassify> NewsClassify { get; set; }
}
}
angularjs – 部署到生产后出错:未知提供者:$$isDocumentHiddenProvider < - $$isDocumentHidden
错误:[$ inject:unpr]未知的提供者:$$ isDocumentHiddenProvider< - $$ isDocumentHidden< - $$ animateQueue< - $ animate< - $ compile< - $$ animateQueue。 我不明白出了什么问题,最后一次部署好了,现在甚至在回滚错误显示之后。
这是我的控制器的一个例子:
function MyController($scope,$http) { // ... } MyController.$inject = ['$scope','$http'];
请帮帮我。
我的bower.json
"dependencies": { //...... "angular": "1.5.6","angular-animate": "^1.5.6","angular-material": "^1.1.1","angular-aria": "^1.5.8" }
UPD。
另一方面,插入符号更放松。它会更新你最近的主要版本(第一个数字)。 ^ 1.2.3将匹配任何1.x.x版本,包括1.3.0,但将在2.0.0上保持不变。我在动画和咏叹调中删除插入符号。谢谢
我正在使用角材料(安装凉亭),但我没有修复我使用的版本。
我使用角度为1.5.9的角度,但是当低音炮角度材料1.1.1,角动画和角度咏叹调在1.6.0版本
我在bower.json文件中添加了这些行,现在它的工作原理是:
"angular-animate": "1.5.9","angular-aria": "1.5.9",
关于躲藏文本和hiddentext的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于(OK) 隐马尔可夫模型(Hidden Markov Model,HMM)server - client、2000_wideband extension of telephone speech using a hidden Markov model、AddDbContext was called with configuration, but the context type ''NewsContext'' only decla...、angularjs – 部署到生产后出错:未知提供者:$$isDocumentHiddenProvider < - $$isDocumentHidden等相关内容,可以在本站寻找。
本文标签: