精华内容
下载资源
问答
  • 数据白化

    千次阅读 2017-06-02 19:11:08
     在CC的系统芯片中都有数据白化功能.whiting的中文件直译为白化,真实的意思应该是数据加噪. 白化处理主要是为了避免在传输过程中出现过长的连续0或1的位流模式。基带处理器需要从接收到的模拟数据信号中判断...

    出处:http://blog.163.com/qiu_zhi2008/blog/static/60140977201262132339388/


     在CC的系统芯片中都有数据白化功能.whiting的中文件直译为白化,真实的意思应该是数据加噪.


    白化处理主要是为了避免在传输过程中出现过长的连续0或1的位流模式。基带处理器需要从接收到的模拟数据信号中判断数据是0还是1,但过长的连续0或1位流会造成问题。因为在接收到的模拟数据信号中并不存在象直流信号中那样的参考点,因此必须依靠接收到的最后几个传输信号进行校正。任何连续的0或1的长序列位流串都可能导致校正失败。因此需要采用数据白化技术对信号进行扰码处理,以大大降低出现长序列0或1位流串的可能性。


    白化的原理: 

        随机向量的“零均值化”和“空间解相关”(也叫白化)是最常用的两个预处理过程,其中“零均值化”比较简单,而“空间解相关”涉及一些矩阵的知识。

        设有均值为零的随机信号向量 x ,其自相关矩阵

     

    Rx =E[xxT ] ≠ I 

      

    很明显, Rx  是对称矩阵,且是非负定的(所有特征值都大于或等于0)。

         现在,寻找一个线性变换 B 对 x 进行变换,即 y = Bx ,使得

     

    Ry B E[xxT ]BT 

     

    上式的含义是:y的各分量是不相关的,即 E[yi yj ]=δ ij 。通常将这个过程称为“空间解相关”、“空间白化”或“球化”。 称为空间解相关矩阵(空间白化矩阵、球化矩阵)。

        由 Rx  的性质可知,其存在特征值分解:

    Rx  Q Σ QT 

     

    是正交矩阵, Σ 是对角矩阵,其对角元素是 Rx  特征值。

        令

    B = Σ −1/2QT        (1)   

       则有

    Ry  =(Σ −1/2 QT Q Σ QT(Σ −1/2 QTT 

     

    因此,通过矩阵 B 线性变换后, y 的各个分量变得不相关了。

     

        对于 Rx 来说,特征值分解和奇异值分解是等价的,而奇异值分解的数值算法比特征值分解的数值算法具有更好的稳定性,因此一般都用奇异值分解来构造白化矩阵 B 

     

        术语“白”来自于白噪声的能谱在所有频率上是一个常数这一事实,就像含有各种颜色的白光谱一样。白化的本质就是去相关加缩放。从上述原理可以看出,白化的过程跟PCA是一样的,经过PCA处理过之后的数据是不相关的,且具有压缩数据的作用,但只能保证各分量信号之间“不相关”,不能保证的“独立性”,,但它能够简化盲分离算法或改善分离算法的性能。

       

        此外,白化矩阵B 肯定不是唯一的。容易看到,任何矩阵 UB ( U 为正交矩阵)也是白化矩阵。这是因为对 y = UBx ,下式成立:

    E[yyT ]=UB E[xxT ]BTUT UIUT I 

     

        一个重要的例子是矩阵 QΣ −1/2 QT 。这也是一个白化矩阵,因为它是用正交矩阵 Q 左乘式(1) 的 B 得到的。这个矩阵称为 Cx  的逆均方根,并用 Cx −1/2    表示,因为它来自于均方根概念向矩阵的标准推广。

     

    图像数据的白化代码(matlab):

     

    pca函数接口形式为:  [Y,V,E,D] = pca(X)

     

        其中X为输入数据,X的每一列是一个输入样本。返回值Y是对X进行PCA分析后的投影矩阵。V是与X有关的协方差矩阵特征向量的白化矩阵,E是对应的特征向量(列)构成的矩阵,D是对应的特征值构成的对角矩阵(特征值处于对角线上)。返回值中的白化矩阵,特征向量和特征值都是按照对应特征值大小进行排序后了的。

     

    function [Y,V,E,D] = pca(X)
    % do PCA on image patches
    % INPUT variables:
    % X                  matrix with image patches as columns
    % OUTPUT variables:
    % Y                  the project matrix of the input data X without whiting
    % V                  whitening matrix
    % E                  principal component transformation (orthogonal)
    % D                  variances of the principal components
     
    %去除直流成分
    X = X-ones(size(X,1),1)*mean(X);
    %其中r=size(A,1)该语句返回的时矩阵A的行数,c=size(A,2) 该语句返回的时矩阵A的列%数
     
    % Calculate the eigenvalues and eigenvectors of the new covariance matrix.
    covarianceMatrix = X*X'/size(X,2); % 求出其协方差矩阵

    %E是特征向量构成,它的每一列是特征向量,D是特征值构成的对角矩阵
    %这些特征值和特征向量都没有经过排序
    [E, D] = eig(covarianceMatrix); 

    % Sort the eigenvalues  and recompute matrices
    % 因为sort函数是升序排列,而需要的是降序排列,所以先取负号,diag(a)是取出a的对角元素构成
    % 一个列向量,这里的dummy是降序排列后的向量,order是其排列顺序
    [dummy,order] = sort(diag(-D));
    E = E(:,order);%将特征向量按照特征值大小进行降序排列,每一列是一个特征向量
    Y = E'*X;
    d = diag(D); %d是一个列向量

    %dsqrtinv是列向量,特征值开根号后取倒,仍然是与特征值有关的列向量
    %其实就是求开根号后的逆矩阵
    dsqrtinv = real(d.^(-0.5));
    Dsqrtinv = diag(dsqrtinv(order));%是一个对角矩阵,矩阵中的元素时按降序排列好了的特征值(经过取根号倒后)
    D = diag(d(order));%D是一个对角矩阵,其对角元素由特征值从大到小构成
    V = Dsqrtinv*E';%特征值矩阵乘以特征向量矩阵
    end

     

     

     

     

        在进行 ICA或者ISA处理之前,首先要对训练样本图像集进行预处理,包括去均值和白化,分为两步进行:首先要对观测数据阵X进行主成分分析,再对X进行白化。

    1.    对X进行主成分分析

    求X的协方差矩阵,如下式:

    C = X * X’;

    对C进行奇异值分解,如下式:

    C = U*D*U’;

    式中D为特征值的对角阵,U为C的奇异值分解中的左奇异阵,U的各个分量u1,u2,...,um为C的特征向量。

         2.  对X进行白化

    观测数据阵X的白化过程如下:

    Z = M * X;

    上式中的M为白化矩阵,M = inv(sqrt(D)) * U',其中D极为X的协方差矩阵C的奇异值分解中的特征根对角阵。Z即为白化后的数据阵。


    C语言代码:

    unsigned short whiting_data(unsigned char *data, unsigned short whiting_pn9){
        unsigned char i, c;
        *data ^= (whiting_pn9&0xFF);
        for(i=0; i<8; i++){
            c = whiting_pn9 & 0x21;
            whiting_pn9 >>= 1;
            if ((c==0x21)||(c==0)){
                whiting_pn9 &= 0x0FF;
            }else{
                whiting_pn9 |= 0x100;
            }
        }
        return whiting_pn9;
    }


    // 数据串白化处理
    void whiting_buff(unsigned char *buff, unsigned short len)
    {
        unsigned short whiting_pn9;
        whiting_pn9 = 0x1FF;
        while (len--){
            whiting_pn9 = whiting_data(buff++, whiting_pn9);
        }
    }


    展开全文
  • 数据白化处理matlab代码数据白化处理matlab代码数据白化处理matlab代码
  • 数据白化预处理

    万次阅读 2016-03-15 17:43:13
    数据白化预处理 随机向量的“零均值化”和“空间解相关”是最常用的两个预处理过程,其中“零均值化”比较简单,而“空间解相关”涉及一些矩阵的知识。 设有均值为零的随机信号向量 ,其自相关矩阵为 很明显,...

    欢迎关注公众号,更多知识分享,多谢


    数据白化预处理

        随机向量的“零均值化”和“空间解相关”是最常用的两个预处理过程,其中“零均值化”比较简单,而“空间解相关”涉及一些矩阵的知识。

        设有均值为零的随机信号向量 x ,其自相关矩阵

    R_x=E[xx^T]\neq I

    很明显, R_x 是对称矩阵,且是非负定的(所有特征值都大于或等于0)。

        现在,寻找一个线性变换 Bx 进行变换,即 y=Bx ,使得

    R_y=BE[xx^T]B^T=I

    上式的含义是:y的各分量是不相关的,即 E[y_i y_j]=\delta_{ij} 。通常将这个过程称为“空间解相关”、“空间白化”或“球化”。 B 称为空间解相关矩阵(空间白化矩阵、球化矩阵)。

        由 R_x 的性质可知,其存在特征值分解:

    R_x = Q\Sigma Q^T

    Q 是正交矩阵, \Sigma 是对角矩阵,其对角元素是 R_x 特征值。

        令

    \begin{equation}\label{eq:B}B=\Sigma^{-1/2} Q^T\end{equation}

    则有

    R_y = (\Sigma^{-1/2} Q^T)Q \Sigma Q^T (\Sigma^{-1/2} Q^T)^T = I

    因此,通过矩阵 B 线性变换后, y 的各个分量变得不相关了。

        对于 R_x 来说,特征值分解和奇异值分解是等价的,而奇异值分解的数值算法比特征值分解的数值算法具有更好的稳定性,因此一般都用奇异值分解来构造空间解相关矩阵 B

        应该注意到,“空间解相关”不能保证各分量信号之间的“独立性”,但它能够简化盲分离算法或改善分离算法的性能。

    注:以上来自戴老师《盲信号处理》的课件。

        最为熟知的例子是白噪声。元素 x_i 可以是一个时间序列在相继时间点 i=1,2,... 的值,且在噪声序列中没有时间上得相关性。术语“白”来自于白噪声的能谱在所有频率上是一个常数这一事实,就像含有各种颜色的白光谱一样。白化的本质就是去相关加缩放。

        式\eqref{eq:B}的解相关矩阵 B 肯定不是唯一的白化矩阵。容易看到,任何矩阵 UBU 为正交矩阵)也是白化矩阵。这是因为对 y=UBx ,下式成立:

    E[yy^T] = UBE[xx^T]B^TU^T = UIU^T = I

        一个重要的例子是矩阵 Q \Sigma^{-1/2} Q^T 。这也是一个白化矩阵,因为它是用正交矩阵 Q 左乘式\eqref{eq:B}的 B 得到的。这个矩阵称为 C_x 的逆均方根,并用 C_x^{-1/2} 表示,因为它来自于均方根概念向矩阵的标准推广。

    注:以上来自《Independent Component Analysis》

        关于白化代码的实现,其实很简单,下面给一个

    function [z_w varargout] = myWhiten(z)

    %--------------------------------------------------------------------------

    % 语法:z_w = myWhiten(z);

    %     [z_w T] = myWhiten(z);

    % 输入:z是一个mxn的矩阵,包含m维随机变量的各n个采样点。

    % 输出:z_w是白化版本的z。T是mxm的白化变换矩阵。

    %--------------------------------------------------------------------------

     

    %% 计算样本协方差

    R = cov(z'); % 1表示除以N来计算协方差

     

    %% 白化z

    [U D ~] = svd(R, 'econ'); % 用eig也行,[U, D] = eig(R);

     

    %% 下面求白化矩阵

    T = U * inv (sqrt(D)) * U'; % 称为协方差矩阵的逆均方根,inv计算不会太耗时间,因为D为对角阵。inv(sqrt(D))*U'也是一个可行白化矩阵

     

    %% 乘以白化矩阵实现白化

    z_w = T * z;

     

    if (nargout == 2)

        varargout{1} = T;

    end

        另外可以直接利用FastICA的白化函数whitenv,它要配合其提供的PCA函数pcamat.m完成白化,其提供的例子中有提示如下

    % EXAMPLE

    %       [E, D] = pcamat(vectors);

    %       [nv, wm, dwm] = whitenv(vectors, E, D);

        之前写过关于FastICA工具箱的使用,再把使用白化的例子给出来吧:

     

     

    % 测试whitenv函数

    clc

    clear

    close all

     

    % 加载matlab自带的数据

    load cities

    stdr = std(ratings);

    sr = ratings./repmat(stdr,329,1);

    sr = sr';

     

    figure

    boxplot(sr','orientation','horizontal','labels',categories)

     

    % 测试

    firstEig = 1;

    lastEig = 9;

    s_interactive = 'off';

     

    sr = remmean(sr); % 下面的pcamat和whitenv都没有去均值,这里先做取均值处理

    [E, D] = pcamat(sr, firstEig, lastEig, s_interactive);

    [nv, wm, dwm] = whitenv(sr, E, D);

     

    figure

    boxplot(nv','orientation','horizontal','labels',categories)

     

     

     

    结果如下

     

    PCA:    PCA的具有2个功能,一是维数约简(可以加快算法的训练速度,减小内存消耗等),一是数据的可视化。    PCA并不是线性回归,因为线性回归是保证得到的函数是y值方面误差最小,而PCA是保证得到的函数到所降的维度上的误差最小。另外线性回归是通过x值来预测y值,而PCA中是将所有的x样本都同等对待。    在使用PCA前需要对数据进行预处理,首先是均值化,即对每个特征维,都减掉该维的平均值,然后就是将不同维的数据范围归一化到同一范围,方法一般都是除以最大值。但是比较奇怪的是,在对自然图像进行均值处理时并不是不是减去该维的平均值,而是减去这张图片本身的平均值。因为PCA的预处理是按照不同应用场合来定的。    自然图像指的是人眼经常看见的图像,其符合某些统计特征。一般实际过程中,只要是拿正常相机拍的,没有加入很多人工创作进去的图片都可以叫做是自然图片,因为很多算法对这些图片的输入类型还是比较鲁棒的。在对自然图像进行学习时,其实不需要太关注对图像做方差归一化,因为自然图像每一部分的统计特征都相似,只需做均值为0化就ok了。不过对其它的图片进行训练时,比如首先字识别等,就需要进行方差归一化了。    PCA的计算过程主要是要求2个东西,一个是降维后的各个向量的方向,另一个是原先的样本在新的方向上投影后的值。    首先需求出训练样本的协方差矩阵,如公式所示(输入数据已经均值化过):        求出训练样本的协方差矩阵后,将其进行SVD分解,得出的U向量中的每一列就是这些数据样本的新的方向向量了,排在前面的向量代表的是主方向,依次类推。用U’*X得到的就是降维后的样本值z了,即:        (其实这个z值的几何意义是原先点到该方向上的距离值,但是这个距离有正负之分),这样PCA的2个主要计算任务已经完成了。用U*z就可以将原先的数据样本x给还原出来。   在使用有监督学习时,如果要采用PCA降维,那么只需将训练样本的x值抽取出来,计算出主成分矩阵U以及降维后的值z,然后让z和原先样本的y值组合构成新的训练样本来训练分类器。在测试过程中,同样可以用原先的U来对新的测试样本降维,然后输入到训练好的分类器中即可。

     

    有一个观点需要注意,那就是PCA并不能阻止过拟合现象。表明上看PCA是降维了,因为在同样多的训练样本数据下,其特征数变少了,应该是更不容易产生过拟合现象。但是在实际操作过程中,这个方法阻止过拟合现象效果很小,主要还是通过规则项来进行阻止过拟合的。   并不是所有ML算法场合都需要使用PCA来降维,因为只有当原始的训练样本不能满足我们所需要的情况下才使用,比如说模型的训练速度,内存大小,希望可视化等。如果不需要考虑那些情况,则也不一定需要使用PCA算法了。    Whitening:    Whitening的目的是去掉数据之间的相关联度,是很多算法进行预处理的步骤。比如说当训练图片数据时,由于图片中相邻像素值有一定的关联,所以很多信息是冗余的。这时候去相关的操作就可以采用白化操作。数据的whitening必须满足两个条件:一是不同特征间相关性最小,接近0;二是所有特征的方差相等(不一定为1)。常见的白化操作有PCA whitening和ZCA whitening。    PCA whitening是指将数据x经过PCA降维为z后,可以看出z中每一维是独立的,满足whitening白化的第一个条件,这是只需要将z中的每一维都除以标准差就得到了每一维的方差为1,也就是说方差相等。公式为:        ZCA whitening是指数据x先经过PCA变换为z,但是并不降维,因为这里是把所有的成分都选进去了。这是也同样满足whtienning的第一个条件,特征间相互独立。然后同样进行方差为1的操作,最后将得到的矩阵左乘一个特征向量矩阵U即可。   ZCA whitening公式为

     

    展开全文
  • matlab白化代码数据白化ICA 该程序显示了如何对ICA算法进行数据白化。 代码模板 该程序是通过在上找到的MATLAB文件编写的。 它仅作一些微小的更改:处理的信号是不同的,并且修改了信息的打印。 作者 Arnaud DELORME...
  • 在CC的系统芯片中都有数据白化功能.whiting的中文件直译为白化,真实的意思应该是数据加噪. 白化处理主要是为了避免在传输过程中出现过长的连续0或1的位流模式。基带处理器需要从接收到的模拟数据信号中判断数据是...

     

     在CC的系统芯片中都有数据白化功能.whiting的中文件直译为白化,真实的意思应该是数据加噪.

     

    白化处理主要是为了避免在传输过程中出现过长的连续0或1的位流模式。基带处理器需要从接收到的模拟数据信号中判断数据是0还是1,但过长的连续0或1位流会造成问题。因为在接收到的模拟数据信号中并不存在象直流信号中那样的参考点,因此必须依靠接收到的最后几个传输信号进行校正。任何连续的0或1的长序列位流串都可能导致校正失败。因此需要采用数据白化技术对信号进行扰码处理,以大大降低出现长序列0或1位流串的可能性。

     

     

    白化的原理: 

        随机向量的“零均值化”和“空间解相关”(也叫白化)是最常用的两个预处理过程,其中“零均值化”比较简单,而“空间解相关”涉及一些矩阵的知识。

        设有均值为零的随机信号向量 x ,其自相关矩阵

     

    Rx =E[xxT ] ≠ I 

      

    很明显, Rx  是对称矩阵,且是非负定的(所有特征值都大于或等于0)。

         现在,寻找一个线性变换 B 对 x 进行变换,即 y = Bx ,使得

     

    Ry B E[xxT ]BT = 

     

    上式的含义是:y的各分量是不相关的,即 E[yi yj ]=δ ij 。通常将这个过程称为“空间解相关”、“空间白化”或“球化”。 称为空间解相关矩阵(空间白化矩阵、球化矩阵)。

        由 Rx  的性质可知,其存在特征值分解:

    Rx  = Q Σ QT 

     

    是正交矩阵, Σ 是对角矩阵,其对角元素是 Rx  特征值。

        令

    B = Σ −1/2QT        (1)   

       则有

    Ry  =(Σ −1/2 QT ) Q Σ QT(Σ −1/2 QTT = 

     

    因此,通过矩阵 B 线性变换后, y 的各个分量变得不相关了。

     

        对于 Rx 来说,特征值分解和奇异值分解是等价的,而奇异值分解的数值算法比特征值分解的数值算法具有更好的稳定性,因此一般都用奇异值分解来构造白化矩阵 B 。

     

        术语“白”来自于白噪声的能谱在所有频率上是一个常数这一事实,就像含有各种颜色的白光谱一样。白化的本质就是去相关加缩放。从上述原理可以看出,白化的过程跟PCA是一样的,经过PCA处理过之后的数据是不相关的,且具有压缩数据的作用,但只能保证各分量信号之间“不相关”,不能保证的“独立性”,,但它能够简化盲分离算法或改善分离算法的性能。

       

        此外,白化矩阵B 肯定不是唯一的。容易看到,任何矩阵 UB ( U 为正交矩阵)也是白化矩阵。这是因为对 y = UBx ,下式成立:

    E[yyT ]=UB E[xxT ]BTUT = UIUT = I 

     

        一个重要的例子是矩阵 QΣ −1/2 QT 。这也是一个白化矩阵,因为它是用正交矩阵 Q 左乘式(1) 的 B 得到的。这个矩阵称为 Cx  的逆均方根,并用 Cx −1/2    表示,因为它来自于均方根概念向矩阵的标准推广。

     

    图像数据的白化代码(matlab):

     

    该pca函数接口形式为:  [Y,V,E,D] = pca(X)

     

        其中X为输入数据,X的每一列是一个输入样本。返回值Y是对X进行PCA分析后的投影矩阵。V是与X有关的协方差矩阵特征向量的白化矩阵,E是对应的特征向量(列)构成的矩阵,D是对应的特征值构成的对角矩阵(特征值处于对角线上)。返回值中的白化矩阵,特征向量和特征值都是按照对应特征值大小进行排序后了的。

     

    function [Y,V,E,D] = pca(X)
    % do PCA on image patches
    % INPUT variables:
    % X                  matrix with image patches as columns
    % OUTPUT variables:
    % Y                  the project matrix of the input data X without whiting
    % V                  whitening matrix
    % E                  principal component transformation (orthogonal)
    % D                  variances of the principal components
     
    %去除直流成分
    X = X-ones(size(X,1),1)*mean(X);
    %其中r=size(A,1)该语句返回的时矩阵A的行数,c=size(A,2) 该语句返回的时矩阵A的列%数
     
    % Calculate the eigenvalues and eigenvectors of the new covariance matrix.
    covarianceMatrix = X*X'/size(X,2); % 求出其协方差矩阵

    %E是特征向量构成,它的每一列是特征向量,D是特征值构成的对角矩阵
    %这些特征值和特征向量都没有经过排序
    [E, D] = eig(covarianceMatrix); 

    % Sort the eigenvalues  and recompute matrices
    % 因为sort函数是升序排列,而需要的是降序排列,所以先取负号,diag(a)是取出a的对角元素构成
    % 一个列向量,这里的dummy是降序排列后的向量,order是其排列顺序
    [dummy,order] = sort(diag(-D));
    E = E(:,order);%将特征向量按照特征值大小进行降序排列,每一列是一个特征向量
    Y = E'*X;
    d = diag(D); %d是一个列向量

    %dsqrtinv是列向量,特征值开根号后取倒,仍然是与特征值有关的列向量
    %其实就是求开根号后的逆矩阵
    dsqrtinv = real(d.^(-0.5));
    Dsqrtinv = diag(dsqrtinv(order));%是一个对角矩阵,矩阵中的元素时按降序排列好了的特征值(经过取根号倒后)
    D = diag(d(order));%D是一个对角矩阵,其对角元素由特征值从大到小构成
    V = Dsqrtinv*E';%特征值矩阵乘以特征向量矩阵
    end

     

     

     

     

        在进行 ICA或者ISA处理之前,首先要对训练样本图像集进行预处理,包括去均值和白化,分为两步进行:首先要对观测数据阵X进行主成分分析,再对X进行白化。

    1.    对X进行主成分分析

    求X的协方差矩阵,如下式:

    C = X * X’;

    对C进行奇异值分解,如下式:

    C = U*D*U’;

    式中D为特征值的对角阵,U为C的奇异值分解中的左奇异阵,U的各个分量u1,u2,...,um为C的特征向量。

         2.  对X进行白化

    观测数据阵X的白化过程如下:

    Z = M * X;

    上式中的M为白化矩阵,M = inv(sqrt(D)) * U',其中D极为X的协方差矩阵C的奇异值分解中的特征根对角阵。Z即为白化后的数据阵。

     

    C语言代码:

    unsigned short whiting_data(unsigned char *data, unsigned short whiting_pn9){
        unsigned char i, c;
        *data ^= (whiting_pn9&0xFF);
        for(i=0; i<8; i++){
            c = whiting_pn9 & 0x21;
            whiting_pn9 >>= 1;
            if ((c==0x21)||(c==0)){
                whiting_pn9 &= 0x0FF;
            }else{
                whiting_pn9 |= 0x100;
            }
        }
        return whiting_pn9;
    }


    // 数据串白化处理
    void whiting_buff(unsigned char *buff, unsigned short len)
    {
        unsigned short whiting_pn9;
        whiting_pn9 = 0x1FF;
        while (len--){
            whiting_pn9 = whiting_data(buff++, whiting_pn9);
        }
    }

     

    #include "albinism.h"

    Albinism::Albinism()
    {
        this->pn9 = 0x21;
    }
    void Albinism::StatisticsBit(unsigned char *pIn, unsigned int InSLen, unsigned int *Num){
        int Max = 0;
        /* 循环找相同的bit */
        int Cur = 0;
        unsigned char CurFlag = 0;
        unsigned char MaxCurFlag = 0;
        CurFlag = 0x01;
        for (unsigned int i=0; i<InSLen; i++) {
            for(int j=0; j<8; j++){
                CurFlag = pIn[i]&(0x80>>j);
                CurFlag >>= (7-j);
                if(MaxCurFlag==CurFlag){
                    Cur ++;
                }else{
                    if(Cur >= Max){
                        Max = Cur;
                    }
                    Cur = 1;
                    MaxCurFlag = CurFlag;
                }
            }
        }
        if(Cur >= Max){
            Max = Cur;
        }
        *Num = Max;
    }

    void Albinism::SetKey(unsigned char pn9){
        this->pn9 = pn9;
    }

    unsigned char Albinism::GetKey(){
        return this->pn9;
    }

    void PrintfBin(unsigned char *pIn, int InSLen, int Num){
        char Temp[InSLen*8/Num+1+InSLen*8];
        int ops = 0;
        int Tempops = 0;
        memset(Temp, 0, sizeof(Temp));

        for(int i=0; i<InSLen; i++) {
            for (int j=0; j<8; j++) {
                if(pIn[i]&(0x80>>j)){
                    Temp[ops+Tempops] = '1';
                }else{
                    Temp[ops+Tempops] = '0';
                }
                ops ++;
                if((ops>=Num)&&(!(ops%Num))){
                    Temp[ops+Tempops] = ' ';
                    Tempops ++;
                }
            }
        }
        QString Log(Temp);
        qDebug() << Log << "\r\n";
    }
    unsigned char Albinism::whiting_data(unsigned char *In, unsigned char *Out, unsigned char whiting_pn9){
        unsigned char i, c, j=0;
        unsigned char y = 0;
        c = whiting_pn9;
        for(i=0; i<8; i++){
            if((c&0xE0) == 0xC0){
                c &= (~(0x40));
            }else if((c&0xE0) == 0x20){
                c |= 0x40;
            }
            j = (c >> 7)&0x01;
            y <<= 1;
            y |= j;
            c <<= 1;
            c += j;
            if(c&0x10){
                j ^= 0x01;
            }else{
                j ^= 0x00;
            }
            j &= 0x01;
            j <<= 4;
            c &= (~(0x10));
            c |= j;

            //PrintfBin((char *)&c, 1, 100);
        }
       // PrintfBin((char *)&c, 1, 100);
        PrintfBin(&y, 1, 100);
        *Out = *In^(y &0xFF);
        whiting_pn9 = c;
    #if 0
        for(i=0; i<8; i++){
            c = (whiting_pn9&0xFF) & this->pn9;
            whiting_pn9 >>= 1;
            if ((c==this->pn9)||(c==0)){
                whiting_pn9 &= 0x0FF;
            }else{
                whiting_pn9 |= 0x100;
            }
        }
    #endif

        return whiting_pn9;
    }

    unsigned short whiting_data1(unsigned char *In, unsigned char *Out, unsigned char whiting_pn9){
        unsigned char i, c, j=0;
        *Out = *In^(whiting_pn9&0xFF);
        c = *Out;
        for(i=0; i<8; i++){
            j = 0;
            if(c&0x80){
              j = 1;
            }
            if(whiting_pn9&0x80){
                j ^= 1;
            }else{
                j ^= 0;
            }
            j &= 0x01;
            if(whiting_pn9&0x10){
                j ^= 1;
            }else{
                j ^= 0;
            }
             j &= 0x01;
            if(whiting_pn9&0x01){
                j ^= 1;
            }else{
                j ^= 0;
            }
             j &= 0x01;
            whiting_pn9 = (whiting_pn9 << 1) + j;
            c <<= 1;
        }
    #if 0
        for(i=0; i<8; i++){
            c = (whiting_pn9&0xFF) & this->pn9;
            whiting_pn9 >>= 1;
            if ((c==this->pn9)||(c==0)){
                whiting_pn9 &= 0x0FF;
            }else{
                whiting_pn9 |= 0x100;
            }
        }
    #endif

        return whiting_pn9;
    }

    void Albinism::Code(unsigned char *pIn, unsigned int InSLen, unsigned char *pOut){
        unsigned char whiting_pn9;
        whiting_pn9 = 0xFF;
        while (InSLen--){
           whiting_pn9 = whiting_data(pIn++, pOut++, whiting_pn9);
        }
    }
    void Albinism::Decode(unsigned char *pIn, unsigned int InSLen, unsigned char *pOut){
        unsigned char whiting_pn9;
        whiting_pn9 = 0xFF;
        while (InSLen--){
           whiting_pn9 = whiting_data(pIn++, pOut++,  whiting_pn9);
        }
    }

    展开全文
  • 1.图像加载 12x12 的patch,共10000个,转换为 144x10000的矩阵,即数据是144维 x = sampleIMAGESRAW(); 随机显示200个图像块,如下图: 2.零均值化 meanVal = mean(x); x = bsxfun(@minus,x,meanVal); 此时 ...

    matlab 实例

    1.图像加载 12x12 的patch,共10000个,转换为 144x10000的矩阵,即数据是144维

    x = sampleIMAGESRAW();
     
    随机显示200个图像块,如下图:

    2.零均值化

    meanVal = mean(x);
    x = bsxfun(@minus,x,meanVal);
     
    此时 x
     为零均值数据

    3.求协方差矩阵,并对协方差矩阵进行奇异值分解,再对数据进行特征向量投影

    xRot = zeros(size(x)); 
    [u,d] = svd(x*x'/size(x,2)); 
    xRot = u' * x;
     
    4.PCA 检测,计算协方差矩阵

    covar = zeros(size(x, 1)); 
    covar = xRot*xRot'/size(xRot,2);
     
    此时的协方差矩阵为144x144的矩阵,显示为图像如下:

    对角线为数据的自相关,也就是方差,值最大,所以颜色最亮,两边为协方差,值比较小,故颜色较暗,这里为蓝色。

    5. 寻找能够保留90%方差的最小 k
     值

    k = 0; 
    dVal = diag(d); % 列向量
    sumDVal = sum(dVal);
    kP = 0;
    while kP<0.9
        k = k+1;
        kP = sum(dVal(1:k)) / sumDVal;
    end
     
    此时 k为43,当设置为保留 99% 的方差时,k为116.

    6. PCA降维

    xHat = zeros(size(x));  
    xHat = u(:,1:k) * xRot(1:k,:);

    将 144维的数据降维到43维,并用43维数据还原图像如下:

    7. PCA白化与规则化

    epsilon = 0.1;
    xPCAWhite = zeros(size(x));
    xPCAWhite =  bsxfun(@rdivide,xRot,sqrt((dVal+epsilon)));

    8. 检测PCA白化是否正确,计算协方差矩阵并显示

    covar = xPCAWhite * xPCAWhite' / size(xPCAWhite,2);
     
    白化后的协方差矩阵图像如下:

    如果没有进行规则化,也就是我们将 ϵ
     设置为0,此时白化后的协方差矩阵如下图:

    9.ZCA白化

    xZCAWhite = zeros(size(x));
    xZCAWhite = u*xPCAWhite;
     
    ZCA白化后图像如下:

     

    展开全文
  • 通过加白噪声来增强蓝牙数据抗干扰能力的方法。这一方法的提出起源于时钟的同步:为了同步发射信号和接受信号的时钟,可以利用数据来对两者...蓝牙数据白化算法 Bluetooth Whitening Algorithm - 知乎 (zhihu.com) ...
  • 当每个样本都除以根号“莱姆的“后,其实就相当于矩阵A变成了,A/(莱姆的),这样特征值也就变成了原来的1/(莱姆的),也就是特征值变成了 1 。其中 v 是协方差矩阵的单位特征向量,t i为每一个样本(多维的)在这...
  • 计算数据矩阵的 ZCA 白化并返回白化数据白化/去白化变换矩阵。
  • 白化whitening原文地址:http://blog.csdn.net/hjimce/article/details/50864602作者:hjimce一、相关理论 白化这个词,可能在深度学习领域比较常遇到,挺起来... 白化的目的是去除输入数据的冗余信息。假设训练数
  • 白化

    2021-01-21 17:17:16
    白化的目的是去除输入数据的冗余信息。  例如:训练数据是图像,由于图像中相邻像素之间具有很强的相关性,因此输入是冗余的。白化的目的就是降低输入的冗余性。  输入数据集,经过白化处理后,生成的新数据集满足...
  • 二维数据白化处理

    2016-04-30 10:47:38
    二维数据白化处理 这篇博客实现起来比较简单,首先先去下载pca_2d.zip,然后打开pca_2d.m改代码,具体代码见下面 close all %%================================================================ %% Step...
  • 数据预处理之白化-Whitening

    千次阅读 2017-09-26 21:55:35
    理论知识 随机向量的“零均值化”和“空间解相关”是最常用的两个预处理过程,其中“零均值化”比较简单,而“空间解相关”涉及一些矩阵的知识。  设有均值为零的随机...数据白化预处理
  • Whiten process——数据白化处理

    千次阅读 2019-11-07 16:08:48
    1.什么是白化处理 “白化”这个词最早来源于信号处理领域,跟其中最常见的一种噪声——白噪声有很大的联系[1]。在信号处理理论中,白噪声指的是一种在不同频率都有相同功率的随机信号,即其功率谱密度为常数,功率...
  • 之前在看斯坦福教程中whiteining这一章时,由于原始图像相邻像素值具有高度相关性,所以图像数据信息冗余,对于白化的作用的描述主要有两个方面:1,减少特征之间的相关性;2,特征具有相同的方差(协方差阵为1);...
  • 数据标准化与PCA白化原理探索

    千次阅读 2016-05-14 14:13:25
    PCA是实验中很常用的工具,一般用来做降维,它的实现有很多很多种,其中牵涉相当多的细节,笔者在实现PCA时常常有困惑,为什么查到的各种代码总...1 Whitening (白化白化1有两种,一种是PCA Whitening,一种是ZCA Wh
  • 深度学习中的白化预处理

    千次阅读 2018-04-27 17:15:57
    数据白化过程中,最主要的还是参数epsilon的选择,因为这个参数的选择对deep learning的结果起着至关重要的作用。在基于重构的模型中(比如说常见的RBM,Sparse coding, autoencoder都属于这一类,因为他们基本上...
  • 白化(Whitening) PCA白化 ZCA白化

    万次阅读 多人点赞 2014-12-25 15:46:34
    白化是一种重要的预处理过程,其目的就是降低输入数据的冗余性,使得经过白化处理的输入数据具有如下性质:(i)特征之间相关性较低;(ii)所有特征具有相同的方差。   白化处理分PCA白化和ZCA白化,PCA白化保证数据各...
  • PCA 白化 ZCA白化

    千次阅读 2016-07-01 09:43:28
    白化是一种重要的预处理过程,其目的就是降低输入数据的冗余性,使得经过白化处理的输入数据具有如下性质:(i)特征之间相关性较低;(ii)所有特征具有相同的方差。   白化处理分PCA白化和ZCA白化,PCA白化保证...
  • 使用 LFSR 序列 X^9 + X^5 + 1 的白化

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,891
精华内容 1,956
关键字:

数据白化