1bit数字信号互相关系数的计算

1bit数字信号互相关系数的计算

最近的一个项目里面需要对1bit的数字信号做相关,没有找到非常直接的解答,所以把互相关系数在数字信号的情况下做了一个推导,并用matlab验证了其正确性

推导过程

首先,我们将X和Y视为两个相同长度N的信号,每个信号都有两个可能的取值:0和1。
并且我们有以下定义:

  • N11:表示X和Y同时为1的样本数量。
  • N00:表示X和Y同时为0的样本数量。
  • N10:表示X为1且Y为0的样本数量。
  • N01:表示X为0且Y为1的样本数量。
    接下来,我们用这些参数来估计协方差和标准差。
    协方差的定义为:
    C o v ( X , Y ) = E ( ( X − μ X ) ∗ ( Y − μ Y ) ) Cov(X, Y) = E((X-μX)*(Y-μY)) Cov(X,Y)=E((XμX)(YμY))
    其中,X和Y是对应的随机变量。μX是X的期望值(均值)。μY是Y的期望值(均值)。
    将X和Y的样本均值代入协方差的定义中,可以得到:
    C o v ( X , Y ) = E ( ( X − μ X ) ∗ ( Y − μ Y ) ) = E ( ( X − ( N 11 + N 10 ) / N ∗ X ) ∗ ( Y − ( N 11 + N 01 ) / N ∗ Y ) ) Cov(X, Y) = E((X-μX)*(Y-μY)) = E((X - (N11 + N10)/N*X) * (Y - (N11 + N01)/N*Y)) Cov(X,Y)=E((XμX)(YμY))=E((X(N11+N10)/NX)(Y(N11+N01)/NY))
    = E ( X Y − X ( N 11 + N 01 ) / N − Y ( N 11 + N 10 ) / N + ( N 11 + N 01 ) ( N 11 + N 10 ) / ( N 2 ) ) = E(XY - X(N11 + N01)/N - Y(N11 + N10)/N + (N11 + N01)(N11 + N10)/(N^2)) =E(XYX(N11+N01)/NY(N11+N10)/N+(N11+N01)(N11+N10)/(N2))

展开每一项:
E ( X Y ) = ( N 11 / N ) E(XY) = (N11 / N) E(XY)=(N11/N)

E ( X ( N 11 + N 01 ) / N ) = ( N 11 + N 10 ) / N ∗ ( N 11 + N 01 ) / N E(X(N11 + N01)/N) = (N11 + N10)/N*(N11 + N01)/N E(X(N11+N01)/N)=(N11+N10)/N(N11+N01)/N

E ( Y ( N 11 + N 10 ) / N ) = ( N 11 + N 01 ) / N ∗ ( N 11 + N 10 ) / N E(Y(N11 + N10)/N) = (N11 + N01)/N*(N11 + N10)/N E(Y(N11+N10)/N)=(N11+N01)/N(N11+N10)/N

E ( ( N 11 + N 01 ) ( N 11 + N 10 ) / ( N 2 ) ) = ( N 11 + N 10 ) ( N 11 + N 01 ) / ( N 2 ) E((N11 + N01)(N11 + N10)/(N^2)) = (N11 + N10)(N11 + N01) / (N^2) E((N11+N01)(N11+N10)/(N2))=(N11+N10)(N11+N01)/(N2)

因此,将这些项代回协方差的表达式中,我们得到:
C o v ( X , Y ) = ( N 11 ∗ N 00 − N 10 ∗ N 01 ) / N 2 Cov(X, Y) =(N11 * N00 - N10 * N01) /N^2 Cov(X,Y)=(N11N00N10N01)/N2

σX:同理对于X的标准差,我们有:
σ X = s q r t ( ( N 11 + N 10 ) ∗ ( N 01 + N 00 ) / N 2 ) σX = sqrt((N11 + N10) * (N01 + N00)/N^2) σX=sqrt((N11+N10)(N01+N00)/N2)

σY:同理对于Y的标准差,我们有:
σ Y = s q r t ( ( N 10 + N 00 ) ∗ ( N 11 + N 01 ) / N 2 ) σY = sqrt((N10 + N00) * (N11 + N01)/N^2) σY=sqrt((N10+N00)(N11+N01)/N2)
接下来,我们可以将这些结果代入互相关系数的定义,得到:
r = C o v ( X , Y ) / ( σ X ∗ σ Y ) = ( N 11 ∗ N 00 − N 10 ∗ N 01 ) / s q r t ( ( N 11 + N 10 ) ( N 01 + N 00 ) ( N 10 + N 00 ) ( N 11 + N 01 ) ) r = Cov(X, Y) / (σX * σY) = (N11 * N00 - N10 * N01) / sqrt((N11 + N10) (N01 + N00) (N10 + N00) (N11 + N01)) r=Cov(X,Y)/(σXσY)=(N11N00N10N01)/sqrt((N11+N10)(N01+N00)(N10+N00)(N11+N01))

MATLAB仿真验证

计算1bit相关系数的代码如下

function [N11, N00, N10, N01, N1x, Nx0, r] = crossCorrelation(signal1, signal2)
    N = length(signal1);
    N11 = 0;
    N00 = 0;
    N10 = 0;
    N01 = 0;
    for i = 1:N
        if signal1(i) && signal2(i)
            N11 = N11 + 1;
        elseif ~signal1(i) && ~signal2(i)
            N00 = N00 + 1;
        elseif signal1(i) && ~signal2(i)
            N10 = N10 + 1;
        elseif ~signal1(i) && signal2(i)
            N01 = N01 + 1;
        end
    end
   r = (N11 * N00 - N10 * N01) / sqrt((N11 + N01) * (N11 + N10) * (N00 + N01) * (N00 + N10));
end

与定义式计算结果比较

% 生成随机的二进制信号
N = 1000; % 信号长度
signal1 = randi([0, 1], 1, N);
% signal2 = randi([0, 1], 1, N);
noise= randi([0, 1], 1, 500);
signal2=[signal1(1:500),noise];
% 计算互相关系数
[N11, N00, N10, N01, N1x, Nx0, r] = crossCorrelation(signal1, signal2);

% 验证结果
cov_matrix = cov(signal1, signal2); % 计算协方差矩阵
cov_xy = cov_matrix(1, 2); % 获取信号1和信号2的协方差
std_x = std(signal1); % 计算信号1的标准差
std_y = std(signal2); % 计算信号2的标准差
r_verify = cov_xy / (std_x * std_y); % 计算验证的互相关系数

% 打印结果
disp(['N11: ', num2str(N11)]);
disp(['N00: ', num2str(N00)]);
disp(['N10: ', num2str(N10)]);
disp(['N01: ', num2str(N01)]);
disp(['计算得到的互相关系数 r: ', num2str(r)]);
disp(['验证的互相关系数 r_verify: ', num2str(r_verify)]);

结果如下
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值