当前位置: 首页 > 编程日记 > 正文

Wiener Filter

假设分别有两个WSS process:$x[n]$,$y[n]$,这两个process之间存在某种关系,并且我们也了解这种关系。现在我们手头上有process $x[n]$,目的是要设计一个LTI系统,使得系统输出$y[n]$,不过$y[n]$是一个WSS process,我们不可能准确得到随机过程上的值,因此实际输出并不是$y[n]$,而是$\hat{y}[n]$,此时我们就能通过引入MSE来判断实际输出$\hat{y}[n]$与$y[n]$之间的差距。当我们所设计的系统使得$\hat{y}[n]$与$y[n]$之间有Minimun MSE时,所得到的输出就是最优的,即

$e[n] \triangleq \hat{y}[n] – y[n]$

当满足Minimum MSE时,有

$\epsilon = MMSE = E\{e^2 [n]\}$

那么这个LTI系统就被称为Wiener filter

image

本文的主要目的就是求Wiener filter的脉冲响应,所求得的脉冲响应需要使得系统有Minimun MSE。

※在开始之前,先说明本文一些计算所需的前提条件:

  1. 由于输入以及输出的随机过程都是实数,因此$R_{xx}[m],R_{yy}[m],R_{xy}[m],R_{yx}[m]$也会是实数
  2. 由于$R_{xx}[m] = R_{xx}[-m]$,因此$S_{xx}(e^{j\Omega})$是实数,同理有$S_{yy}(e^{j\Omega})$是实数
  3. 本文假设$S_{xx}(e^{j\Omega})$以及$S_{yy}(e^{j\Omega})$在所有频率上都大于0
  4. 为了方便,本文假设随机过程$x[n],y[n]$的mean都为0
  5. 连续时间随机过程有上述同样条件

NONCAUSAL DT WIENER FILTER

DT表示的是离散时间系统,noncausl即非因果,因果性的系统的脉冲响应的$n<0$部分为$0$,非因果系统则无此要求。

对于DT系统,有两种求解Wiener filter脉冲响应的方式。这是因为DT系统的脉冲响应可以分为FIR以及IIR两种,分别对应不同的求解方法。

FIR

FIR即有限脉冲响应,脉冲响应$h[n]$的长度是有限的,这表明我们可以准确得到脉冲响应序列中的各个元素的值。

DT LTI系统以卷积来表征,即

$\displaystyle{\hat{y}[n] = \sum_{k=-\infty}^{\infty}h[k]x[n-k] }$

那么MSE就可以表示为

$\displaystyle{\epsilon = E\left\{ \left(\sum_{k=-\infty}^{\infty}h[k]x[n-k]-y[n]  \right)^2 \right\}}$

由于是一个FIR filter,因此假设$h[n]$是一个长度为N的脉冲响应,也就是说上面的式子有N个未知数,分别对应$h[0],h[1],\cdot\cdot\cdot,h[N-1]$。为了得到该N元二次函数的最小值,需要分别对这N个未知数求偏导,当偏导数为0时可以得到最小的MSE。以序列其中的一个未知数$h[m]$为例

$\begin{align*}
\frac{\partial \epsilon}{\partial h[m]} &= \frac{\displaystyle{\partial E\left\{\left(\sum_{k=-\infty}^{\infty}h[k]x[n-k]-y[n]\right)^2\right\} }}{\partial h[m]}\\
&= \frac{\displaystyle{\partial E\left\{\left(\sum_{k=0}^{N-1}h[k]x[n-k]-y[n]\right)^2\right\} }}{\partial h[m]} \qquad h[k]\ is\ FIR\\
&= E\left\{ 2\underbrace{\left(\sum_{k=0}^{N-1}h[k]x[n-k]-y[n] \right )}_{e[n]}x[n-m] \right\}\qquad chain\ rule\\
&= 2E\Big\{e[n]x[n-m]\Big\}\\
&= 2E\Big\{\big(\hat{y}[n]-y[n]\big)x[n-m]\Big\}\\
&= 2E\Big\{\hat{y}[n]x[n-m]-y[n]x[n-m]\Big\}\\
&= 2\Big(R_{\hat{y}x}[m]-R_{yx}[m]\Big)
\end{align*}$

当偏导数为0时有最小MSE,此时

$\color{red}{R_{\hat{y}x}[m] = R_{yx}[m]}$

根据correlation相关定理,有

$\color{red}{R_{yx}[m] = h[m]*R_{xx}[m]}$

因此,只要我们能根据随机过程$x[n],y[n]$之间的关系求得$R_{yx}[m],R_{xx}[m]$,就可以得到最佳的脉冲响应$h[m]$。卷积的计算方式如下

$\begin{align*}
R_{yx}[m] &= h[m]*R_{xx}[m] = R_{xx}[m]*h[m]\\
&=\begin{bmatrix}
R_{xx}[0] &R_{xx}[-1]  &\cdots  &R_{xx}[1-N] \\
R_{xx}[1] &R_{xx}[0]  &\cdots  &R_{xx}[2-N] \\
\vdots  &\vdots  &\ddots   &\vdots \\
R_{xx}[N-1] &R_{xx}[N-2]  &\cdots  &R_{xx}[0]
\end{bmatrix}
\begin{bmatrix}
h[0]\\
h[1]\\
\vdots\\
h[N-1]
\end{bmatrix}
=\begin{bmatrix}
R_{yx}[0]\\
R_{yx}[1]\\
\vdots\\
R_{yx}[N-1]
\end{bmatrix} \end{align*}$

IIR

IIR即无限脉冲响应,脉冲响应$h[n]$的长度是无限的,我们无法得到脉冲响应序列中的所有元素的值,因此主要求解方式需要先从频域获得系统的频率响应$H(e^{j\Omega})$,然后根据需要转换为脉冲响应$h[n]$。

如前一小节所述,当MSE式子的偏导数为0时可以得到MMSE,此时系统能输出最佳的预测值。按照此思路,同理可得到

$\begin{align*}
time-domain: &\qquad R_{\hat{y}x}[n] = R_{yx}[n]\\
z-transform: &\qquad S_{\hat{y}x}(z) = S_{yx}(z)\\
fourier-transform: &\qquad S_{\hat{y}x}(e^{j\Omega}) = S_{yx}(e^{j\Omega})
\end{align*}$

根据correlation相关定理,又有

$\begin{align*}
time-domain: &\qquad h[n]*R_{xx}[n] = R_{\hat{y}x}[n] = R_{yx}[n]\\
z-transform: &\qquad H(z)S_{xx}(z)=S_{\hat{y}x}(z) = S_{yx}(z)\\
fourier-transform: &\qquad H(e^{j\Omega})S_{xx}(e^{j\Omega})=S_{\hat{y}x}(e^{j\Omega}) = S_{yx}(e^{j\Omega})
\end{align*}$

那么最佳的系统函数以及最佳的频率响应分别为

$\begin{align*}
z-transform: &\qquad H(z)= S_{yx}(z)/S_{xx}(z)\\
fourier-transform: &\qquad H(e^{j\Omega})=S_{yx}(e^{j\Omega})/S_{xx}(e^{j\Omega})
\end{align*}$

因此,只要我们能根据随机过程$x[n],y[n]$之间的关系求得它们在频域上的表示$S_{yx}(e^{j\Omega}),S_{xx}(e^{j\Omega})$,就可以得到最佳的频率响应$H(e^{j\Omega})$

MMSE

当系统为最佳滤波器的时候,MSE为最小值,既有

$MMSE = R_{ee}[0]$

其中$R_{ee}[m]$可以通过以下方法得到

$\begin{align*}
R_{ee}[m] &= E\{e[n+m]e[n]\}\\
&= E\Big\{\big(y[n+m]-\hat{y}[n+m]\big)\big(y[n]-\hat{y}[n]\big)\Big\}\\
&= E\Big\{y[n+m]y[n]-\hat{y}[n+m]y[n]-y[n+m]\hat{y}[n]+\hat{y}[n+m]\hat{y}[n]\Big\}\\
&= R_{yy}[m]-R_{\hat{y}y}[m]-R_{y\hat{y}}[m]+R_{\hat{y}\hat{y}}[m]\\
&= R_{yy}[m]-R_{\hat{y}y}[m]-h[-m]*R_{yx}[m]+h[-m]*R_{\hat{y}x}[m]\\
&= R_{yy}[m]-R_{\hat{y}y}[m]-h[-m]*R_{yx}[m]+h[-m]*R_{yx}[m]\\
&= R_{yy}[m]-R_{\hat{y}y}[m]\\ &= R_{yy}[m]-h[m]*R_{xy}[m] \qquad \href{https://www.cnblogs.com/TaigaCon/p/9127534.html#DT}{correlation\ equation} \end{align*}$

MMSE在频域上则能有如下表达

$\begin{align*}
MMSE = R_{ee}[0]&=\frac{1}{2\pi}\int_{-\pi}^{\pi}S_{ee}(e^{j\Omega})e^{j\Omega 0}d\Omega\\
&=\frac{1}{2\pi}\int_{-\pi}^{\pi}S_{ee}(e^{j\Omega})d\Omega\\
&=\frac{1}{2\pi}\int_{-\pi}^{\pi}\Big(S_{yy}-HS_{xy}\Big)d\Omega \qquad drop\ (e^{j\Omega})\\
&=\frac{1}{2\pi}\int_{-\pi}^{\pi}\Big(S_{yy}-\frac{S_{yx}}{S_{xx}}S_{xy}\Big)d\Omega\\
&=\frac{1}{2\pi}\int_{-\pi}^{\pi}\left(S_{yy}\left\{1-\frac{S_{yx}}{S_{xx}}\frac{S_{xy}}{S_{yy}}\right\}\right)d\Omega\\
&=\frac{1}{2\pi}\int_{-\pi}^{\pi}\Big(S_{yy}(1-\rho_{yx}\rho_{yx}^*)\Big)d\Omega
\end{align*}$

其中$\rho_{yx}(e^{j\Omega})$可以看作是频域的correlation coefficient(相关系数)。定义如下

$\displaystyle{\rho_{yx}(e^{j\Omega}) = \frac{S_{yx}(e^{j\Omega})}{\sqrt{S_{xx}(e^{j\Omega})S_{yy}(e^{j\Omega})}}}$

由于我们前面以及讲过$R_{yx}[m]=R_{xy}[m]$是实数,因此有$\href{https://www.cnblogs.com/TaigaCon/p/9125855.html}{S_{xy}(e^{j\Omega}) = S_{yx}^*(e^{j\Omega})}$,又有$S_{xx}(e^{j\Omega}),S_{yy}(e^{j\Omega})$在任意频域上都大于0,有了这两个条件容易得到

$\displaystyle{\rho_{yx}^*(e^{j\Omega}) = \frac{S_{yx}^*(e^{j\Omega})}{\sqrt{S_{xx}(e^{j\Omega})S_{yy}(e^{j\Omega})}}}$

NONCAUSAL CT WIENER FILTER

不同于DT中离散的随机过程,CT中的随机过程是连续的,因此不能像DT一样对某一个采样点求导来得到最佳系统,需要采用其他计算方式。

image

与DT时一样基于MSE的预测,要得到最佳系统,那么该系统应该使得输出的随机过程$\hat{y}(t)$与目标随机过程$y(t)$的MSE最小。

$MSE = E\Big\{ e^2(t) \Big\} = E\Big\{ \big(\hat{y}(t)-y(t)\big)^2 \Big\}$

我们注意到

$MSE = E\Big\{e^2{t}\Big\} = R_{ee}(0)$

因此可以通过$R_{ee}(\tau)$来推导如何得到最佳系统。

$\begin{align*}
R_{ee}(\tau) &= E\Big\{\big(\hat{y}(t)-y(t)\big)\big(\hat{y}(t+\tau)-y(t+\tau)\big)\Big\}\\
&= E\Big\{y(t)y(t+\tau)+\hat{y}(t)\hat{y}(t+\tau)-y(t)\hat{y}(t+\tau)-\hat{y}(t)y(t+\tau)\Big\}\\
&= R_{yy}(\tau)+R_{\hat{y}\hat{y}}(\tau)-R_{y\hat{y}}(\tau)-R_{\hat{y}y}(\tau)
\end{align*}$

根据这条式子可以得到

$S_{ee}(j\omega) = S_{yy}(j\omega)+S_{\hat{y}\hat{y}}(j\omega)-S_{y\hat{y}}(j\omega)-S_{\hat{y}y}(j\omega)$

下面来推导如何得到Minimun MSE

$\begin{align*}
MSE = R_{ee}(0) &= \frac{1}{2\pi}\int_{-\infty}^{\infty}S_{ee}(j\omega)e^{j\omega 0}d\omega\\
&=\frac{1}{2\pi}\int_{-\infty}^{\infty}S_{ee}(j\omega)d\omega\\
&=\frac{1}{2\pi}\int_{-\infty}^{\infty}\Big(S_{yy}+S_{\hat{y}\hat{y}}-S_{y\hat{y}}-S_{\hat{y}y}\Big)d\omega \qquad drop\ (j\omega )\\
&=\frac{1}{2\pi}\int_{-\infty}^{\infty}\Big(S_{yy}+HH^*S_{xx}-H^*S_{yx}-HS_{xy} \Big)d\omega\\
&=\frac{1}{2\pi}\int_{-\infty}^{\infty}\Big(S_{yy}+HH^*S_{xx}-H^*S_{yx}-HS_{yx}^* \Big)d\omega\qquad R_{xy}(t)=R_{yx}(-t)\ is\ real\\
&=\frac{1}{2\pi}\int_{-\infty}^{\infty}\left( S_{yy}+\left( H\sqrt{S_{xx}}-\frac{S_{yx}}{\sqrt{S_{xx}}} \right )\left( H^*\sqrt{S_{xx}}-\frac{S_{yx}^*}{\sqrt{S_{xx}}} \right )-\frac{S_{yx}S_{yx}^*}{S_{xx}} \right)d\omega\\
&=\frac{1}{2\pi}\int_{-\infty}^{\infty}\left| H\sqrt{S_{xx}}-\frac{S_{yx}}{\sqrt{S_{xx}}} \right|^2d\omega+\frac{1}{2\pi}\int_{-\infty}^{\infty}\left(S_{yy}-\frac{S_{yx}S_{yx}^*}{S_{xx}}\right)d\omega
\end{align*}$

上面的式子采用了提取式子中的平方的方法来使式子得到最小值,当系统的频率响应满足以下条件时,即可得到Minimun MSE

$\color{red}{\displaystyle{ H(j\omega) = \frac{S_{yx}(j\omega)}{S_{xx}(j\omega)} }}$

这也表明只要我们能根据随机过程$x[n],y[n]$之间的关系求得它们在频域上的表示$S_{yx}(j\omega),S_{xx}(j\omega)$,就可以得到最佳的频率响应$H(j\omega)$

此时式子中第一项为0,那么MMSE为

$\begin{align*}
MMSE = R_{ee}(0)
&=\frac{1}{2\pi}\int_{-\infty}^{\infty}\left( S_{yy}-\frac{S_{yx}S_{yx}^*}{S_{xx}} \right)d\omega\\
&=\frac{1}{2\pi}\int_{-\infty}^{\infty}S_{yy}\left(1-\frac{S_{yx}S_{yx}^*}{S_{xx}S_{yy}} \right )d\omega\\
&=\frac{1}{2\pi}\int_{-\infty}^{\infty}S_{yy}(1-\rho\rho^*)d\omega
\end{align*}$

其中频域的correlation coefficient $\rho(j\omega)$为

$\displaystyle{\rho(j\omega) = \frac{S_{yx}(j\omega)}{\sqrt{S_{xx}(j\omega)S_{yy}(j\omega)}}}$

CAUSAL CT WIENER FILTER

观察上一小节推导得到的式子

$\displaystyle{MSE =\frac{1}{2\pi}\int_{-\infty}^{\infty}\left| H\sqrt{S_{xx}}-\frac{S_{yx}}{\sqrt{S_{xx}}} \right|^2d\omega+\frac{1}{2\pi}\int_{-\infty}^{\infty}\left(S_{yy}-\frac{S_{yx}S_{yx}^*}{S_{xx}}\right)d\omega}$

当所设计的系统的频率响应使得第一项为0的时候就能得到MMSE,不过如果我们对该系统有因果性的要求,也就意味着对频率响应$H(j\omega)$有所限制,此时的$H(j\omega)$可能就无法使得上述等式的第一项为0,因此对于因果系统,我们需要寻求其它的求解方法。

在WSS Process On Causal LTI System中,我们得到了一个结论:一个Casual LTI系统可以把white noise建模成WSS process。我们这里假设一个频率响应为$M_{xx}(j\omega)$的因果系统把white noise建模成了WSS process $x(t)$,那么就可以把$S_{xx}(j\omega)$分解为

$S_{xx}(j\omega) = M_{xx}(j\omega)M^*_{xx}(j\omega)$

那么前面的式子就可以变形为

$\displaystyle{MSE =\frac{1}{2\pi}\int_{-\infty}^{\infty}\left| HM_{xx}-\frac{S_{yx}}{M_{xx}^*} \right|^2d\omega+\frac{1}{2\pi}\int_{-\infty}^{\infty}\left(S_{yy}-\frac{S_{yx}S_{yx}^*}{S_{xx}}\right)d\omega}$

其中$H(j\omega)$为因果系统,$M_{xx}(j\omega)$也是因果系统,$HM_{xx}$是这两个因果系统的级联,因此也是一个因果的。此时,我们可以把$\displaystyle{\frac{S_{yx}(j\omega)}{M_{xx}^*(j\omega)}}$分成两部分之和

$\displaystyle{\frac{S_{yx}(j\omega)}{M_{xx}^*(j\omega)}=\left[\frac{S_{yx}(j\omega)}{M_{xx}^*(j\omega)}\right]_+ + \left[\frac{S_{yx}(j\omega)}{M_{xx}^*(j\omega)}\right]_-}$

其中$\displaystyle{\left[\frac{S_{yx}(j\omega)}{M_{xx}^*(j\omega)}\right]_+}$代表的是因果部分,$\displaystyle{\left[\frac{S_{yx}(j\omega)}{M_{xx}^*(j\omega)}\right]_-}$代表的是非因果部分。当$H(j\omega)$使得积分中的因果部分为0时,就能得到MMSE。此时有

$\color{red}{\displaystyle{H(j\omega) = \frac{1}{M_{xx}(j\omega)}\left[\frac{S_{yx}(j\omega)}{M_{xx}^*(j\omega)}\right]_+ }}$

MMSE为

$\displaystyle{MMSE=\frac{1}{2\pi}\int_{-\infty}^{\infty}\left|\left[\frac{S_{yx}}{M_{xx}^*} \right ]_-\right|^2d\omega+\frac{1}{2\pi}\int_{-\infty}^{\infty}\left( S_{yy}-\frac{S_{yx}S_{yx}^*}{S_{xx}} \right)d\omega}$

CAUSAL DT WIENER FILTER

Causal DT的求解方式与Causal CT的求解方式基本一样

$\color{red}{\displaystyle{H(e^{j\Omega}) = \frac{1}{M_{xx}(e^{j\Omega})}\left[\frac{S_{yx}(e^{j\Omega})}{M_{xx}^*(e^{j\Omega})}\right]_+ }}$

Dealing with Nonzero Means

前文所讨论都是基于LTI系统,而LTI系统的数学定义如下(CT):

$\displaystyle{y(t) = \int_{-\infty}^{\infty}h(t-k)x(k)dk}$

不过,有时随机过程$y(t)$除了跟$x(t)$有关,还有可能有常数偏差,比如我们之前在讨论LMMSE预测的时候会假设$y = ax+b$。对比上面LTI系统的定义,可以发现这种假设并不符合LTI系统,这也是我们在前面的讨论中把随机过程$x(t),y(t)$的mean都设为0的原因。

对于mean不为0的情况,我们可以假设LTI系统的输入是$x(t)-\mu_x$,输出的是$\hat{y}(t)-\mu_y$。

image

为了输出最佳的预测process,此时的LTI系统有如下频率响应

$\displaystyle{H(j\omega) = \frac{D_{yx}(j\omega)}{D_{xx}(j\omega)}}$

其中$D_{yx}(j\omega),D_{xx}(j\omega)$分别为covariance $C_{yx}(\tau),C_{xx}(\tau)$的傅里叶变换。

Reference:

Alan V. Oppenheim: Signals, Systems and Inference, Chapter 11:Wiener Filtering

转载于:https://www.cnblogs.com/TaigaCon/p/9290484.html

相关文章:

c++ string replace_JAVA应用程序开发之String类常用API

【本文详细介绍了JAVA应用开发中的String类常用API&#xff0c;欢迎读者朋友们阅读、转发和收藏&#xff01;】1 基本概念API ( Application Interface 应用程序接口)是类中提供的接口&#xff0c;类库是类的集合。在 Java 语言中可以通过 import 关键字导入相关的类&#xff0…

强大的Charles的使用,强大的flutter1.9

<a href"http://www.cocoachina.com/articles/37551?filterios"> 强大的Charles强大的flutter转载于:https://www.cnblogs.com/henusyj-1314/p/11586350.html

多层次架构设计前言

因为 php 原生来就是要辅助 HTML 的产生&#xff0c;所以程式码跟 HTML 码混在一起写&#xff0c;正是 PHP 的特点也是优点&#xff0c;但正也造成很多分工上的问题&#xff0c;也就是你在写 php 的同时&#xff0c;你也必须很了解 前端、后端技能&#xff0c;像是 DataBase, H…

在java的程序里date类型比较大小

Date a; Date b; 假设现在你已经实例化了a和b a.after(b)返回一个boolean&#xff0c;如果a的时间在b之后&#xff08;不包括等于&#xff09;返回trueb.before(a)返回一个boolean&#xff0c;如果b的时间在a之前&#xff08;不包括等于&#xff09;返回truea.equals(b)返回一个…

linux安装ActiveMQ

1. 下载&#xff1a; # wget https://archive.apache.org/dist/activemq/5.14.0/apache-activemq-5.14.0-bin.tar.gz 2. 解压&#xff1a; # tar zxvf apache-activemq-5.14.0-bin.tar.gz -C ../ 3. 配置环境变量&#xff1a; # vim /etc/profile 4. 启动&#xff1a; # active…

用递归来判断输入的字符串是否是回文

设计思路&#xff1a;导入Scanner类输入字符串&#xff0c;再将输入的字符串转化为字符数组&#xff0c;然后从字符串左右两侧依次比较字符chu是否相同&#xff0c;若相同递归返回读取的字符个数&#xff0c;若返回字符的个数输入字符串的长度&#xff0c;则输出该字符串是回文…

js高级程序设计之跨浏览器事件处理

//事件 var EventUtil { //添加事件 addHandler:function (element, type, handler) { //element:DOM对象,type:事件类型,handler:事件函数 if (element.addEventListener) { //是否存在DOM2级方法 element.addEventListener(type, handler, false); } else if (element.attac…

在python中使用关键字define定义函数_python自定义函数def的应用详解

这里是三岁&#xff0c;来和大家唠唠自定义函数&#xff0c;这一个神奇的东西&#xff0c;带大家白话玩转自定义函数 自定义函数&#xff0c;编程里面的精髓&#xff01; def 自定义函数的必要函数&#xff1a;def 使用方法&#xff1a;def 函数名(参数1&#xff0c;参数2&…

在Win7 + VMware7下安装Xcode 4

我的Mac OS X是在Win7下虚拟机上安装的&#xff0c;我先把xcode_4.0.2_and_ios_sdk_4.3.dmg下载到Win7下某个目录下&#xff0c;然后共享该目录&#xff0c;然后启动Mac OS X&#xff0c;开始安装&#xff1a;1. 找到Win7下xcode_4.0.2_and_ios_sdk_4.3.dmg所在的共享文件夹&am…

plsql误删除数据,提交事务后如何找回?

select *from tbs_rep_template as of timestamp to_timestamp(2018-07-12 14:23:00, yyyy-mm-dd hh24:mi:ss)where tplname like %工业管道定期检验报告%;--其中2018-07-12 14:23:00为:误删数据的大致时刻的提前时间转载于:https://www.cnblogs.com/demon09/p/9300756.html

配置flutter For IOS

https://www.cnblogs.com/lovestarfish/p/10628205.html第一步&#xff0c;下载flutter最新版&#xff0c;解压到自己的目录里&#xff1a; 提供网址&#xff1a;https://flutter.io/setup-macos/ 第二步&#xff0c;终端配置环境&#xff0c;这里我配知道了IOS&#xff0c;安…

Unity3D 镜面反射

原创文章如需转载请注明&#xff1a;转载自 脱莫柔Unity3D学习之旅 QQ群&#xff1a;【119706192】 本文链接地址: Unity3D 镜面反射 这是官方CharacterCustomization事例中的镜面反射shader。 1.首先需要一个plane当镜子&#xff0c;将代码MirrorReflection.cs文件绑定到镜子…

python后端学什么框架_献给正在学习python的你, 10个最受欢迎的Python开源框架

很多小伙伴在学习wen的时候说&#xff0c;有没有几个常用的框架&#xff0c;好多小伙伴都只说对了其中几个&#xff0c;只有少部分是说正确的&#xff0c;想要了解更多&#xff0c;欢迎大家订阅微信公众号&#xff1a;Python从程序猿到程序员&#xff0c;或者加4913.08659&…

HubbleDotNet 简介 (转)

系统简介 HubbleDotNet 是一个基于.net framework 的开源免费的全文搜索数据库组件。开源协议是 Apache 2.0。HubbleDotNet提供了基于SQL的全文检索接口&#xff0c;使用者只需会操作SQL&#xff0c;就可以很快学会使用HubbleDotNet进行全文检索。 HubbleDotNet可以实现全文索引…

JavaScript夯实基础系列(四):原型

在JavaScript中有六种数据类型&#xff1a;number、string、boolean、null、undefined以及对象&#xff0c;ES6加入了一种新的数据类型symbol。其中对象称为引用类型&#xff0c;其他数据类型称为基础类型。在面向对象编程的语言中&#xff0c;对象一般是由类实例化出来的&…

python中意外缩进是什么意思_Python 的缩进是不是反人类的设计?

前些天&#xff0c;我写了《Python为什么使用缩进来划分代码块&#xff1f;》&#xff0c;文中详细梳理了 Python 采用缩进语法的 8 大原因。我极其喜欢这种简洁优雅的风格&#xff0c;所以对它赞美有加。 然而文章发出去后&#xff0c;非常意外&#xff0c;竟收到了大量的反对…

netstat命令

使用netstat -nap可以查看当前发送和接收队列&#xff0c;Send-Q 很高时表示发送队列太长&#xff0c;可能网络阻塞 转载于:https://www.cnblogs.com/wx170119/p/11606909.html

mysql操作数字名称的schema时字符的逃逸问题

一个简单的问题折腾了好大一会儿&#xff0c;mysql不支持直接操作数字名称的schema&#xff0c;在sql操作时必须做字符逃逸&#xff0c;如&#xff1a; char sql_str[1000]; memset(sql_str, 0x0, 1000); sprintf(sql_str, "CREATE TABLE IF NOT EXIST %s.%s(data_id INT(…

使用XMLSpyDocEditPlugIn2.dll,页面加载失败

维护项目中遇到问题&#xff0c;项目用到XMLSpyDocEditPlugIn2.dll的acticex控件&#xff0c;客户换了其他pc后&#xff0c;不能下载安装acticex控件&#xff0c;所以不能使用此功能。解决方法&#xff1a; 1 下载 XMLSpyDocEditPlugIn2.dll&#xff0c; 路径 http://download.…

[bzoj4562][Haoi2016]食物链_记忆化搜索_动态规划

食物链 bzoj-4562 Haoi-2016 题目大意&#xff1a;给你n个点&#xff0c;m条边的DAG&#xff0c;求所有的满足条件的链&#xff0c;使得每条链的起点是一个入度为0的点&#xff0c;中点是一条出度为0的点。 注释&#xff1a;$1\le n\le 10^5$&#xff0c;$1\le m\le 2*10^5$。 …

Apache源码包在LINUX(CENTOS6.8)中的安装(出现问题及解决)

任务&#xff1a;在CENT6.8系统中安装Apache&#xff08;版本为&#xff1a;httpd-2.4.41&#xff09; 前提&#xff1a;由于源码包必须先编译后安装&#xff0c;所以必须先安装编译器&#xff1a;gcc 理论步骤&#xff1a; 1.检测gcc软件包&#xff0c;如果不存在则进行安装。…

append函数_连载|想用Python做自动化测试?函数的参数传递机制及变量作用域

“ 这一节有点难。看不懂没关系。继续往后学&#xff0c;回头再来看。”10.6 函数参数传递的机制10.6.1 值传递与引用传递编程语言的参数传递机制通常有两种&#xff1a;值传递拷贝参数的值&#xff0c;然后传递给函数里的新变量。这样&#xff0c;原变量和新变量之间互相独立&…

PowerDesigner生成数据库

此文中图片不小心被删除了&#xff0c;特重写了PowerDesigner生成数据库修改 一、 用POWERDESIGNER生成数据库 FILE&#xff0d;》NEW 在MODEL NAME中输入模版名 在DBMS中选择要连接的数据库类型 点击确定 确定后出现如下页面 选中工具条面版上的 表按钮 在…

随想_8_Windows_XP_Explorer_错误

最近发现微软的系统的稳定性&#xff0c;还是有待提高啊&#xff0c;这不XP SP3的资源管理器&#xff0c;就犯毛病了&#xff0c;俗话说有图 有真相&#xff0c;各位请看&#xff1a; 大家看&#xff0c;资源管理器左边的导航栏&#xff0c; 就可以发现&#xff0c;里面很多东西…

webpack笔记(6)调试模式

在配置devtool时&#xff0c;webpack给我们提供了四种选项。 source-map:在一个单独文件中产生一个完整且功能完全的文件。这个文件具有最好的source map,但是它会减慢打包速度&#xff1b;cheap-module-source-map:在一个单独的文件中产生一个不带列映射的map&#xff0c;不带…

nicstat命令安装与分析

nicstat安装包下载与安装&#xff1a; wget https://downloads.sourceforge.net/project/nicstat/nicstat-1.95.tar.gz tar -zxvf nicstat-1.95.tar.gz cd nicstat-1.95 cp Makefile.Linux Makefile vi Makefile 后修改 CFLAGS $(COPT) make && make install //…

component是什么接口_【Android每日一题】从Activity创建到View呈现中间发生了什么?...

前言前段时间公司招人&#xff0c;作为面试官&#xff0c;我经常让面试者简述View的绘制流程。他们基本都能讲明白View的测量(measure)、布局(layout)、绘制(draw)等过程。还有少数人会提到DecorView和ViewRootImp的作用。但是&#xff0c;当我继续追问关于Window的内容时&…

wp 删除独立存储空间文件(多级非空文件夹删除)

void DelFile(string unZipFilePath)//unZipFilePath第一次传递的是根目录名 { using (var store IsolatedStorageFile.GetUserStoreForApplication()) { if (store.DirectoryExists(unZipFilePath)) { …

重拾博客小序与杂思

寒假期间&#xff0c;条件所限&#xff0c;不能上网&#xff0c;也不能更新博客。寒假结束&#xff0c;懈怠了两个星期&#xff0c;打算重拾博客&#xff0c;继续更新。这学期&#xff08;2012年2月到2012年8月&#xff09;在专业学习上将突出几个集中研究的领域&#xff0c;在…

Ubuntu iso镜像文件写入U盘

Ubuntu iso镜像文件写入U盘 Ubuntu iso镜像文件写入U盘方法 分步指南 命令行输入 usb-creator-gtk如下&#xff1a;3、Device 选择插入的U盘 4、image 选择镜像文件 5、make startup disk