基于CDMA的多用户水下无线光通信(2)——系统模型和基于子空间的延时估计

本文主要是介绍基于CDMA的多用户水下无线光通信(2)——系统模型和基于子空间的延时估计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  本文首先介绍了基于CDMA的多用户UOWC系统模型,并给出了多用户收发信号的数学模型。然后介绍基于子空间的延时估计算法,该算法只需要已知所有用户的扩频码,然后根据扩频波形的循环移位在观测空间的信号子空间上的投影进行延时估计。

1、基于CDMA的多用户UOWC系统模型

  首先介绍基于CDMA的多用户UOWC系统模型,系统框图如下图所示。
在这里插入图片描述
  该系统包括发送端、UOWC信道和接收端。该系统包含 K K K个用户,每个用户配备一个LED光源,且为其分配了独一无二的m序列作为扩频码。与射频通信不同的是,LED属于非相干光源,因此发送端只能采用强度调制(调制LED发光的亮灭或者亮的程度),并且LED只能发送单极性的实信号,需要用Bias-T将双极性信号叠加上直流偏置以使LED工作在输出光功率和输入电压关系曲线的线性区间。在接收端采用隔直的雪崩光电二极管(Avalanche Photodiode,APD)作为接入点(Access Point,AP)的光电探测器。光信号被隔直APD转换为电信号并去除直流分量,交流电信号经ADC采样后获得离散数字信号。
  假设这 K K K个用户有相同的比特周期 T b T_\text{b} Tb和码片周期 T c T_\text{c} Tc。比特周期与码片周期的关系为 T c = T b L , T_\text{c} = \frac{T_\text{b}}{L}, Tc=LTb, 其中 L L L为扩频因子。第 k k k个用户发送的信号可以表示为 s tx , k ( t ) = ∑ i = − ∞ ∞ P k b k [ i ] s k ( t − i T b ) + m k , s_{\text{tx},k}(t) = \sum_{i=-\infty}^{\infty} { P_k b_k [i] s_k (t - i T_\text{b})} + m_k, stx,k(t)=i=Pkbk[i]sk(tiTb)+mk,其中, i i i是信息比特的索引, P k P_k Pk表示第 k k k个用户发送信号的幅度, b k [ i ] ∈ { + 1 , − 1 } b_k [i]\in\{+1,-1\} bk[i]{+1,1}表示第 k k k个用户发送的第 i i i个比特, s k ( t ) s_k (t) sk(t)表示第 k k k个用户扩频波形,它在区间 [ 0 , T b ] [0,T_\text{b}] [0,Tb]以外的值为 0 0 0 m k m_k mk是加在第 k k k个用户的LED上的直流偏置。
  所有用户的光信号经过水下信道后在接收端叠加,叠加的光信号经过隔直APD的光电转换和去直后变成双极性电信号。ADC以 T s = T c / N s T_\text{s}= {T_\text{c}}/{N_\text{s}} Ts=Tc/Ns为采样间隔对电信号采样获得离散数字信号,其中 N s N_\text{s} Ns是上采样率。 n T s nT_\text{s} nTs时刻的采样信号表示为 s rx [ n ] = ∑ k = 1 K ∑ i = − ∞ ∞ A k b k [ i ] s k [ n − i L N s − q k ] + w [ n ] , s_\text{rx}[n] = \sum\limits_{k = 1}^K{\sum\limits_{i=-\infty}^{\infty} {A_k b_k [i] s_k \left[n -iLN_\text{s} - q_k\right]}} + w[n], srx[n]=k=1Ki=Akbk[i]sk[niLNsqk]+w[n], 其中, A k = P k h k A_k=P_k h_k Ak=Pkhk表示电信号的幅值, h k h_k hk表示包括电光转换、水下信道功率损耗和光电转换的等效信道增益(不考虑多径传输), s k [ n ] = s k ( n T s ) s_k [n]=s_k (nT_\text{s}) sk[n]=sk(nTs)表示扩频波形的采样值, q k q_k qk表示延时对应的采样点数量, w [ n ] w[n] w[n]是均值为 0 0 0方差为 σ 2 \sigma^2 σ2的高斯白噪声。

2、延时估计

  基于异步CDMA的多用户UOWC系统的信号如下图所示。
在这里插入图片描述
  假设数据以连续比特进行传输,每个用户的扩频码已知。由于各个用户和接收机之间是异步的,每个用户的信号在不同时刻到达接收机,接收机一开始不知道每个用户的比特的确切位置。延时估计的目标是确定每个用户的信号解扩时积分区间的起始点,也可以视为位同步。以 n 0 T s n_0T_\text{s} n0Ts为参考采样时刻,对于第 k k k个用户,第 n 0 n_0 n0个采样点所处的比特记为 b k [ 0 ] b_k[0] bk[0],待估计的延时就是从第 n 0 n_0 n0个采样点到 b k [ 1 ] b_k[1] bk[1]比特第一个采样点之间的时间间隔。从上图中容易看出,待估计的延时不超过一个比特周期。即使某个用户的延时 τ k \tau_k τk超过了一个比特周期,也可以对 τ k \tau_k τk按比特周期取模将其限制在一个比特周期以内,即 ( τ k mod  T b ) ∈ [ 0 , T b ) (\tau_k~\text{mod}~T_\text{b}) \in [0, T_\text{b}) (τk mod Tb)[0,Tb)。因此,可以不失一般性的假设每个用户的延时不超过一个比特周期,即 τ k ∈ [ 0 , T b ) \tau_k \in [0, T_\text{b}) τk[0,Tb)。由于采样间隔 T s T_\text{s} Ts是系统中最小的时间单元,估计延时 τ k \tau_k τk就是估计 τ k \tau_k τk对应的采样点数量 q k q_k qk q k = ⟨ τ k T s ⟩ mod  ( L N s ) , q_k = \langle\frac{\tau_k}{T_\text{s}}\rangle~\text{mod}~(LN_\text{s}), qk=Tsτk mod (LNs),其中, ⟨ ⋅ ⟩ \langle \cdot\rangle 表示四舍五入取整, q k q_k qk从集合 { 0 , 1 , ⋯ , L N s − 1 } \{0,1,\cdots,LN_\text{s}-1\} {0,1,,LNs1}中取值。

2.1 滑动相关法延时估计

  常规的延时估计方法是滑动相关法,该方法用滑动相关器与接收信号做相关运算,通过最大化滑动窗口内的相关值来估计信号延时。滑动相关器是一个与待估计用户的扩频波形匹配的FIR结构滤波器,第 k k k个用户的滑动相关器的滤波器系数就是其扩频波形在区间 [ 0 , T b ] [0,T_\text{b}] [0,Tb]内的采样值,用向量表示为 s k = [ s k [ 0 ] , s k [ 1 ] , ⋯ , s k [ L N s − 1 ] ] . \boldsymbol{s}_k = \left[s_k[0],s_k[1],\cdots,s_k[LN_\text{s}-1]\right]. sk=[sk[0],sk[1],,sk[LNs1]]. 假设用持续 M M M个比特周期的接收信号估计第 k k k个用户的延时,滑动相关法的公式表示为 q ^ k = arg ⁡ max ⁡ q ∈ { 0 , ⋯ , L N s − 1 } ∑ i = 0 M − 1 ∣ s k r ( q , i ) ∣ , \hat{q}_k = \mathop{\arg\max}\limits_{q \in \{0,\cdots,LN_\text{s}-1\}}\sum_{i=0}^{M-1}{\left|\boldsymbol{s}_k\boldsymbol{r}(q,i)\right|}, q^k=q{0,,LNs1}argmaxi=0M1skr(q,i), 其中, r ( q , i ) = [ s rx [ n 0 + q + i L N s ] s rx [ n 0 + q + i L N s + 1 ] ⋮ s rx [ n 0 + q + ( i + 1 ) L N s − 1 ] ] ∈ R L N s × 1 . \boldsymbol{r}(q,i) = \left[\begin{array}{c} s_\text{rx}[n_0+q+iLN_\text{s}] \\ s_\text{rx}[n_0+q+iLN_\text{s}+1] \\ \vdots \\ s_\text{rx}[n_0+q+(i+1)LN_\text{s}-1] \end{array}\right] \in \mathbb{R}^{LN_\text{s}\times 1}. r(q,i)= srx[n0+q+iLNs]srx[n0+q+iLNs+1]srx[n0+q+(i+1)LNs1] RLNs×1.
  滑动相关法将MAI视为噪声,它能够在单用户或者多用户扩频波形相互正交的情况下工作。然而,在有MAI,尤其是存在远近效应的情况下,互相关峰可能大于自相关峰,导致滑动相关法不能正常工作。不准确的延时估计结果将使多用户检测器的检测性能变差,因此有必要研究抗远近效应的延时估计算法。

function [delay,max_corr] = corr_channel_estimation(rec_data,ss_code,sf,M,L_bit,K,b,sps,isShape)
% rec_data 接收信号
% ss_code 扩频码
% sf 扩频因子
% M 快拍数
% L_bit 信息比特数
% K 用户数
% b 成型滤波抽头系数
% sps 上采样率
% isShape 发射信号是否成型滤波 1 滤波, 0 不滤波
if M >= L_bitM = L_bit-1;
end
if isShape == 1ss_code_upsample = upfirdn(ss_code',b,sps)';ss_code_upsample = ss_code_upsample(:,round(length(b)/2)-round(sps/2)+1:round(length(b)/2)-round(sps/2)+sps*sf);
elsess_code_upsample = rectpulse(ss_code,sps);
end
delay = zeros(K,1);
max_corr = zeros(K,1);
corr = zeros(1,M*sps*sf);
for k = 1:Kfor n = 1:M*sps*sfcorr(n) = rec_data(n:n+sps*sf-1)*ss_code_upsample(k,:)';endcorr_temp = reshape(abs(corr'),sps*sf,[]);[max_corr(k),delay(k)] = max(mean(corr_temp,2));
end
delay = delay-1;
end
2.2 基于子空间的延时估计

  这个方法和阵列信号处理中MUSIC算法很像,阵列信号处理中是用多个天线接获得正弦信号的不同相位,而这里是一个光电探测器长时间采样获得扩频序列的不同相位。
  令一个观测窗口的宽度等于一个比特周期 T b T_\text{b} Tb,有 L N s LN_\text{s} LNs个采样点。从第 n 0 n_0 n0个采样点开始,将每 L N s LN_\text{s} LNs个采样点写入一个观测向量 z ( i ) ∈ R L N s × 1 \boldsymbol{z}(i) \in \mathbb{R}^{LN_\text{s}\times 1} z(i)RLNs×1 z ( i ) \boldsymbol{z}(i) z(i)表示为 z ( i ) = [ s rx [ n 0 + i L N s ] s rx [ n 0 + i L N s + 1 ] ⋮ s rx [ n 0 + ( i + 1 ) L N s − 1 ] ] , \boldsymbol{z}(i) = \left[\begin{array}{c} s_\text{rx}[n_0+iLN_\text{s}] \\ s_\text{rx}[n_0+iLN_\text{s}+1] \\ \vdots \\ s_\text{rx}[n_0+(i+1)LN_\text{s}-1] \end{array}\right], z(i)= srx[n0+iLNs]srx[n0+iLNs+1]srx[n0+(i+1)LNs1] , 其中, i i i表示观测窗口起始位置在第 i i i个比特。虽然每个观测窗口对应一个比特周期,但是 z ( i ) \boldsymbol{z}(i) z(i)是在不考虑比特同步的情况下获得的,每个观测窗口可能包含每个活跃用户的当前比特的末尾和下一个比特的开头。根据 s k \boldsymbol{s}_k sk和延时采样点数量 q k q_k qk可以定义两个向量 u k r ∈ R L N s × 1 \boldsymbol{u}_k^\text{r} \in \mathbb{R}^{LN_\text{s}\times 1} ukrRLNs×1 u k l ∈ R L N s × 1 \boldsymbol{u}_k^\text{l} \in \mathbb{R}^{LN_\text{s}\times 1} uklRLNs×1,其中 u k r \boldsymbol{u}_k^\text{r} ukr s k \boldsymbol{s}_k sk的右半部分和补0组成, u k r \boldsymbol{u}_k^\text{r} ukr表示为 u k r = { 0 L N s × 1 , q k = 0 [ s [ L N s − q k ] , ⋯ , s [ L N s − 1 ] , 0 , ⋯ , 0 ] T , 1 ≤ q k ≤ L N s − 1 , \boldsymbol{u}_k^\text{r} = \left\{ \begin{array}{ll} \textbf{0}_{LN_\text{s}\times 1}, & q_k = 0 \\ \left[s[LN_\text{s}-q_k],\cdots,s[LN_\text{s}- 1],0,\cdots,0\right]^\text{T}, & 1\le q_k \le LN_\text{s} -1 \\ \end{array} \right. , ukr={0LNs×1,[s[LNsqk],,s[LNs1],0,,0]T,qk=01qkLNs1, u k l \boldsymbol{u}_k^\text{l} ukl由补0和 s k \boldsymbol{s}_k sk的左半部分组成, u k l \boldsymbol{u}_k^\text{l} ukl表示为 u k l = { s k T , q k = 0 [ 0 , ⋯ , 0 , s [ 0 ] , ⋯ , s [ L N s − 1 − q k ] ] T , 1 ≤ q k ≤ L N s − 1 . \boldsymbol{u}_k^\text{l} = \left\{ \begin{array}{ll} \boldsymbol{s}_k^\text{T},& q_k = 0 \\ \left[0,\cdots,0,s[0],\cdots,s[LN_\text{s}-1-q_k]\right]^\text{T}, & 1\le q_k \le LN_\text{s}-1 \\ \end{array} \right. . ukl={skT,[0,,0,s[0],,s[LNs1qk]]T,qk=01qkLNs1. 将观测向量 z ( i ) \boldsymbol{z}(i) z(i)进一步表示为 z ( i ) = ∑ k = 1 K [ u k r A k b k [ i ] + u k l A k b k [ i + 1 ] ] + w ( i ) = U ⁣ A d ( i ) + w ( i ) , \begin{aligned} \boldsymbol{z}(i) & = \sum_{k=1}^{K}{\left[\boldsymbol{u}_k^\text{r}A_kb_k[i]+\boldsymbol{u}_k^\text{l}A_kb_k[i+1]\right]}+\boldsymbol{w}(i) \\ & = \boldsymbol{U}\!\boldsymbol{A}\boldsymbol{d}(i)+\boldsymbol{w}(i), \end{aligned} z(i)=k=1K[ukrAkbk[i]+uklAkbk[i+1]]+w(i)=UAd(i)+w(i), 其中, U = [ u 1 r , u 1 l , ⋯ , u K r , u K l ] ∈ R L N s × 2 K \boldsymbol{U} = [\boldsymbol{u}_{1}^\text{r} , \boldsymbol{u}_{1}^\text{l} ,\cdots,\boldsymbol{u}_{K}^\text{r},\boldsymbol{u}_{K}^\text{l}] \in \mathbb{R}^{LN_\text{s}\times 2K} U=[u1r,u1l,,uKr,uKl]RLNs×2K A = diag ( A 1 , A 1 , ⋯ , A K , A K ) ∈ R 2 K × 2 K \boldsymbol{A} = \text{diag}(A_1,A_1,\cdots,A_{K},A_{K}) \in \mathbb{R}^{2K\times 2K} A=diag(A1,A1,,AK,AK)R2K×2K d ( i ) = [ b 1 [ i ] , b 1 [ i + 1 ] , ⋯ , b K [ i ] , b K [ i + 1 ] ] T ∈ { + 1 , − 1 } 2 K × 1 \boldsymbol{d}(i) = \left[b_1[i] , b_1[i+1], \cdots , b_{K}[i] , b_{K}[i+1] \right]^\text{T} \in \{+1,-1\}^{2K\times 1} d(i)=[b1[i],b1[i+1],,bK[i],bK[i+1]]T{+1,1}2K×1 w ( i ) = [ w [ n 0 + i L N s ] , ⋯ , w [ n 0 + ( i + 1 ) L N s − 1 ] ] T ∈ R L N s × 1 \boldsymbol{w}(i) = \left[w[n_0+iLN_\text{s}],\cdots,w[n_0+(i+1)LN_\text{s}-1]\right]^\text{T} \in \mathbb{R}^{LN_\text{s}\times 1} w(i)=[w[n0+iLNs],,w[n0+(i+1)LNs1]]TRLNs×1是高斯白噪声向量。延时估计是利用观测向量 z ( i ) \boldsymbol{z}(i) z(i)识别出发送信号的用户的扩频码并估计信号延时 q k q_k qk
  假设每个用户发送独立同分布的信息比特,噪声与发送的信息无关,并且待估计参数在估计阶段保持不变。首先用多组观测向量 z ( i ) \boldsymbol{z}(i) z(i)估计自相关矩阵 R ^ z = 1 M ∑ i = 0 M − 1 z ( i ) z T ( i ) , \hat{\boldsymbol{R}}_\text{z} = \frac{1}{M}\sum_{i=0}^{M-1}{\boldsymbol{z}(i)\boldsymbol{z}^\text{T}(i)}, R^z=M1i=0M1z(i)zT(i), 其中, M M M是观测窗口数量,即快拍数。下一步对 R ^ z \hat{\boldsymbol{R}}_\text{z} R^z做特征值分解,并根据特征值大小将特征向量分成信号子空间和噪声子空间,表示为 R ^ z = [ V ^ s , V ^ n ] [ Λ ^ s 0 0 Λ ^ n ] [ V ^ s T V ^ n T ] = V ^ s Λ ^ s V ^ s T + V ^ n Λ ^ n V ^ n T . \begin{aligned} \hat{\boldsymbol{R}}_\text{z} & = [\hat{\boldsymbol{V}}_\text{s},\hat{\boldsymbol{V}}_\text{n}] \left[\begin{array}{cc} {\hat{\boldsymbol{\Lambda}}}_\text{s} & \textbf{0} \\ \textbf{0} & {\hat{\boldsymbol{\Lambda}}}_\text{n} \end{array}\right] \left[\begin{array}{c} \hat{\boldsymbol{V}}_\text{s}^\text{T} \\ \hat{\boldsymbol{V}}_\text{n}^\text{T} \end{array}\right] \notag \\ & = \hat{\boldsymbol{V}}_\text{s}\hat{\boldsymbol{\Lambda}}_\text{s}\hat{\boldsymbol{V}}_\text{s}^\text{T}+\hat{\boldsymbol{V}}_\text{n}\hat{\boldsymbol{\Lambda}}_\text{n}\hat{\boldsymbol{V}}_\text{n}^\text{T}. \end{aligned} R^z=[V^s,V^n][Λ^s00Λ^n][V^sTV^nT]=V^sΛ^sV^sT+V^nΛ^nV^nT. 由于信号是异步传输的,相当于每个用户的信号给相关矩阵 R ^ z \hat{\boldsymbol{R}}_\text{z} R^z贡献两个大特征值,因此 Λ ^ s \hat{\boldsymbol{\Lambda}}_\text{s} Λ^s的对角线元素包含 R ^ z \hat{\boldsymbol{R}}_\text{z} R^z的前 2 K 2K 2K个大特征值, V ^ s \hat{\boldsymbol{V}}_\text{s} V^s的列向量张成信号子空间,记为 Span ( V ^ s ) \text{Span}(\hat{\boldsymbol{V}}_\text{s}) Span(V^s)
  第 k k k个用户的 u k r \boldsymbol{u}_k^\text{r} ukr u k l \boldsymbol{u}_k^\text{l} ukl都位于信号子空间 Span ( V ^ s ) \text{Span}(\hat{\boldsymbol{V}}_\text{s}) Span(V^s)中,那么 u k = u k r + u k l \boldsymbol{u}_k = \boldsymbol{u}_k^\text{r}+\boldsymbol{u}_k^\text{l} uk=ukr+ukl也位于 Span ( V ^ s ) \text{Span}(\hat{\boldsymbol{V}}_\text{s}) Span(V^s)中。 u k \boldsymbol{u}_k uk Span ( V ^ s ) \text{Span}(\hat{\boldsymbol{V}}_\text{s}) Span(V^s)上的投影表示为 f ( u k ) = ( u k T V ^ s ) ( u k T V ^ s ) T = ∥ u k T V ^ s ∥ 2 . f(\boldsymbol{u}_k)=(\boldsymbol{u}_k^\text{T}\hat{\boldsymbol{V}}_\text{s})(\boldsymbol{u}_k^\text{T}\hat{\boldsymbol{V}}_\text{s})^\text{T} = \|\boldsymbol{u}_k^\text{T}\hat{\boldsymbol{V}}_\text{s}\|^2. f(uk)=(ukTV^s)(ukTV^s)T=ukTV^s2. k k k个用户的延时的采样点数量 q k q_k qk可以由下式获得 q ^ k = arg ⁡ max ⁡ q k ∈ { 0 , ⋯ , L N s − 1 } f ( u k ) . \hat{q}_k = \mathop{\arg\max}\limits_{q_k \in \{0,\cdots,LN_\text{s}-1\}}f(\boldsymbol{u}_k). q^k=qk{0,,LNs1}argmaxf(uk). 上述最小化问题可以通过遍历 q k q_k qk的所有可能值来找到最优值 q ^ k \hat{q}_k q^k来解决。 对于每个用户,上述方法需要 L N s LN_\text{s} LNs次搜索。第 k k k个用户的延时为 τ ^ k = q ^ k T s \hat{\tau}_k = \hat{q}_kT_\text{s} τ^k=q^kTs

function [delay,sigma] = subspace_geo_channel_estimation(rec_data,ss_code,sf,M,L_bit,K,b,sps,isShape)
% Subspace-based channel estimation, geometric approach
% rec_data 接收信号
% ss_code 扩频码
% sf 扩频因子
% M 快拍数
% L_bit 信息比特数
% K 用户数
% b 成型滤波抽头系数
% sps 上采样率
% isShape 发射信号是否成型滤波 1 滤波, 0 不滤波
if M >= L_bitM = L_bit-1;
end
y = zeros(sf*sps,M);
for m = 1:Mfor l = 1:sf*spsy(l,m) = rec_data(l+sf*sps*(m-1));end
end
Ry = (y*y')./M;
[V,D] = eig(Ry);
[D,ind] = sort(diag(D),'descend'); % 特征值按由大到小排
V = V(:,ind);
V_S = V(:,1:2*K); % signal subspace
if isShape == 1 % 成型滤波ss_code_upsample = upfirdn(ss_code',b,sps)';ss_code_upsample = ss_code_upsample(:,round(length(b)/2)-round(sps/2)+1:round(length(b)/2)-round(sps/2)+sps*sf);
elsess_code_upsample = rectpulse(ss_code',sps)';% 矩形成型
end
J = zeros(K,sf*sps);
for k = 1:K  for v = 0:sf*sps-1a_r_0 = [ss_code_upsample(k,sf*sps+1-v:end),zeros(1,sf*sps-v)]';a_l_0 = [zeros(1,v),ss_code_upsample(k,1:sf*sps-v)]';a_r = a_r_0;a_l = a_l_0;J(k,v+1) = norm((a_r+a_l)'*V_S)^2;end
end
[~,ind] = max(J,[],2);
v = ind-1;
delay = mod(v,sf*sps);
sigma = mean(D(2*K+1:end)); % 噪声方差
end

3、算法仿真

  下面给一个仿真的顶层代码,遍历参数有快拍数、信噪比和信干比,感兴趣的读者可以试一下看看效果。

%% 仿真参数
date = '5_28';
if(~exist(['.\',date,'sim_dadta'],'dir'))mkdir(['.\',date,'sim_data']);
end
K = 3; % 用户数
P = 10 ; % 上采样率 samples/chip
isShape = 1; %是否成型滤波 1 滤波, 0 不滤波
isDC = 0; % 接收机直流耦合 1 直流耦合, 0 交流耦合, 可以直流耦合接收,后面在代码里去直
Target_User = 1; % 目标用户
noise_power = 22:-2:8; % noise power dBW
target_user_power = 0; % AC power (variance) dBW
interference_user_power = [0,5,10,20]; % AC power (variance) dBW
Times = 20;
win_size = [20,25,30,35,40,50:25:200]; %快拍数
% 扩频码的PN序列多项式和初始值
ss_polynomial = [1 0 1 0 0 1;    % z^5+z^3+11 1 1 1 0 1;    % z^5+z^4+z^3+z^2+11 1 0 1 1 1];   % z^5+z^4+z^2+z^1+1
ss_init_state = [1 0 1 0 1;1 0 1 0 1;1 0 1 0 1];
if isShape == 1shape = 'rcos_';
elseshape = [];
end
% 用户发送数据bit的PN序列多项式和初始值
bit_polynomial = [1,zeros(1,16),1,0,0,1; % z^20+z^3+11,zeros(1,10),1,zeros(1,3),1,0,1,0,0,1; % z^20+z^9+z^5+z^3+11,1,zeros(1,14),1,1,0,0,1];% z^20+z^19+z^4+z^3+1
bit_init_state = [repmat([1,0],1,10);repmat([1,0],1,10);repmat([1,0],1,10)];    
L_ss = 2^(length(ss_polynomial)-1)-1; % length of spread spectrum pn sequence, spreading factor
L_bits = 300;
delay_array = 0:8:L_ss*P-1;
%% 生成发送数据
ss_code = zeros(K,L_ss);
user_bits = zeros(K,L_bits);
user_ss_data = zeros(K,L_bits*L_ss);
for k = 1:K% 扩频码ss_code(k,:) = 2*PnCode(ss_polynomial(k,:),ss_init_state(k,:))-1;% 用户数据bituser_bits_temp = 2*PnCode(bit_polynomial(k,:),bit_init_state(k,:))-1;user_bits(k,:) = user_bits_temp(1:L_bits);user_bits_upsample = rectpulse(user_bits(k,:),L_ss);user_ss_data(k,:) = user_bits_upsample.*repmat(ss_code(k,:),1,L_bits); 
end
% 上采样,成型滤波
if isShape == 1sps = P; % upsample ratespan = 6;rolloff = 0.5;b = rcosdesign(rolloff,span,sps,'sqrt');% 设计根升余弦滤波器user_ss_data = upfirdn(user_ss_data',b,sps)';% 成型滤波
elseb = 1;sps = P;user_ss_data = rectpulse(user_ss_data',sps)';% 矩形成型
end
if isDC == 1 % 光信号为正的实信号user_ss_data = user_ss_data-min(user_ss_data,[],2);
end
user_ss_data = user_ss_data./vecnorm(user_ss_data,2,2); %能量归一化
user_ss_data = user_ss_data.*sqrt(length(user_ss_data));%功率归一化
clear user_bits_temp;
clear user_bits_upsample;
%% 接收
user_ss_data(Target_User,:) = user_ss_data(Target_User,:)*sqrt(10^(target_user_power/10));
L_data = length(user_ss_data);
L_sample = L_data+P*L_ss;
% 每行先固定一个snapshots遍历interference_user_power,再遍历snapshots
% 成功捕获时才计算rmse
acquisition_pro_corr = zeros(length(win_size)*length(interference_user_power),length(noise_power));
acquisition_rmse_corr = zeros(length(win_size)*length(interference_user_power),length(noise_power));
acquisition_pro_geo = zeros(length(win_size)*length(interference_user_power),length(noise_power));
acquisition_rmse_geo = zeros(length(win_size)*length(interference_user_power),length(noise_power));
for t = 1:Timesfor n = 1:length(noise_power)for d = 1:length(delay_array)if isShape == 1 % 延时参考delay_ref = round(length(b)/2)-round(sps/2)+[delay_array(d),0,0];delay_ref = mod(delay_ref,sps*L_ss);elsedelay_ref = [delay_array(d),0,0];end         send_data = zeros(K,L_sample);send_data(Target_User,delay_array(d)+1:delay_array(d)+L_data) = user_ss_data(Target_User,:);for p = 1:length(interference_user_power)for k = 1:K%模拟发送信号延时if k~=Target_Usersend_data(k,1:L_data) = user_ss_data(k,:).*sqrt(10^(interference_user_power(p)/10));endendbackground_noise = wgn(1,L_sample,noise_power(n));% background noiserec_data = sum(send_data,1)+background_noise;if isDC == 1rec_data = rec_data-mean(rec_data); % DC blockendfor m = 1:length(win_size)M = win_size(m);% sliding correlatordelay = corr_channel_estimation(rec_data,ss_code,L_ss,M,L_bits,K,b,sps,isShape);if abs(delay(Target_User)-delay_ref(Target_User)) < P/2acquisition_pro_corr((m-1)*length(interference_user_power)+p,n) = acquisition_pro_corr((m-1)*length(interference_user_power)+p,n)+1;acquisition_rmse_corr((m-1)*length(interference_user_power)+p,n) = acquisition_rmse_corr((m-1)*length(interference_user_power)+p,n)+(delay(Target_User)-delay_ref(Target_User))^2;end% subspace-based geometric approach[delay,~] = subspace_geo_channel_estimation(rec_data,ss_code,L_ss,M,L_bits,K,b,P,isShape);if abs(delay(Target_User)-delay_ref(Target_User)) < P/2acquisition_pro_geo((m-1)*length(interference_user_power)+p,n) = acquisition_pro_geo((m-1)*length(interference_user_power)+p,n)+1;acquisition_rmse_geo((m-1)*length(interference_user_power)+p,n) = acquisition_rmse_geo((m-1)*length(interference_user_power)+p,n)+(delay(Target_User)-delay_ref(Target_User))^2;endendendendend
end
acquisition_rmse_corr = sqrt(acquisition_rmse_corr./acquisition_pro_corr)./P;
acquisition_pro_corr = acquisition_pro_corr./(t*d);
acquisition_rmse_geo = sqrt(acquisition_rmse_geo1./acquisition_pro_geo1)./P;
acquisition_pro_geo = acquisition_pro_geo1./(t*d);
SNR = target_user_power-noise_power;
EbN0 = SNR-10*log10(1/L_ss)+10*log10(P/2);
MAI = interference_user_power-target_user_power; % near far ratio
save(['.\',date,'sim_data\',date,'sim_estimation_pro_rmse_avr'],'acquisition_pro_corr','acquisition_rmse_corr',...'acquisition_pro_geo','acquisition_rmse_geo','SNR','EbN0','MAI','win_size');
function p=PnCode(polynomial,reg)
%  PN码产生器函数
% polynomial的长度=reg的长度+1,polynomial的值不能为全0
%  polynomial为本原多项式,从左到右依次为高位到低位,且最高位与最低位必须为1;低位表示延时一个周期,高位依次顺延
%  reg为置寄存器初始值,也相当于PN码的初始相位,左边为高位,如[1 0 0 1 0]表示延时5个周期的寄器和2个周期的寄存器初值为1
% 如产生5级31位的PN码,则多项式形式为[1 * * * * 1]
%  例:5级PN码45E,参数为[1 0 0 1 0 1],左边为高位
% PN:0 1 0 0 0 0 1 0 1 0 1 1 1 0 1 1 0 0 0 1 1 1 1 1 0 0 1 1 0 1 0
grade=length(polynomial)-1;%根据多项式计算延时级数
PN_Length=(2^grade-1);     %计算PN码一个周期的长度 
%找出本原多项式中除最低位外为1的位,并依次存放在寄存器c中
%例如对于ploynomial=[1 0 0 1 0 1],则c(1)=2,c(2)=5
n=0;                         
c=zeros(1,grade);
for i=grade:-1:1if polynomial(i)==1n=n+1;c(n)=grade+1-i;end
end  
p = zeros(1,PN_Length);
for i=1:PN_Length %从最高延时的寄存器中输出PN码p(i)=reg(1);m = mod(reg*polynomial(1:grade)',2);%完成各抽头寄存器取值的模2加reg(1:(grade-1)) = reg(2:grade);%寄存器的值依次移位reg(grade)=m;
end

  代码有点多,可能有的函数没贴上来,缺代码的话请留言、私信或者点此下载未删减的全套代码。
  捕获概率定义为估计的延时与实际延时的误差小于半个码片周期的概率 P ( ∣ τ k − τ ^ k ∣ < T c 2 ) , P\left(\left|\tau_k-\hat{\tau}_k\right|<\frac{T_\text{c}}{2}\right), P(τkτ^k<2Tc), 其中, τ k \tau_k τk表示实际延时, τ ^ k \hat{\tau}_k τ^k表示估计的延时。这里给一个信噪比为 − 4 -4 4 dB,用户2与用户1的功率比为 20 20 20 dB时,用户1的捕获概率随快拍数变化的仿真结果,如下图所示。
在这里插入图片描述
  滑动相关法的捕获概率一直很差。这是因为受MAI和远近效应的影响,滑动相关法极有可能将互相关峰出现的位置作为延时位置。基于子空间的延时估计算法能克服MAI带来的负面影响,它的捕获概率随快拍数的增加而增大,并且在快拍数为 75 75 75时达到 100 % 100\% 100%的捕获概率。

参考文献

[1] PICKHOLTZ R, SCHILLING D, MILSTEIN L. Theory of spread-spectrum communications-a tutorial[J]. IEEE Transactions on Communications, 1982, 30(5): 855-884.
[2] BENSLEY S E, AAZHANG B. Subspace-based channel estimation for code division multiple access communication systems[J]. IEEE Transactions on Communications, 1996, 44(8):1009-1020.
[3] STROM E G, PARKVALL S, MILLER S L, et al. Propagation delay estimation in asynchronous direct-sequence code-division multiple access systems[J]. IEEE Transactions on Communications, 1996, 44(1):84-93.

这篇关于基于CDMA的多用户水下无线光通信(2)——系统模型和基于子空间的延时估计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1088750

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验