【CDMA-DS-SS+QPSK 系统分析】CDMA+QPSK协议的仿真及其特性测试(Matlab代码实现)

    💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

 ⛳️赠与读者

💥1 概述

📚2 运行结果

🎉3 参考文献 

🌈4 Matlab代码实现


 ⛳️赠与读者

👨‍💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能解答你胸中升起的一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。

     或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎

💥1 概述

CDMA-DS-SS+QPSK 系统分析

本文研究了 CDMA-DS-SS+QPSK 系统,该系统用于在上行链路中在不同条件下进行传输,其中 N = 8 个用户在同一覆盖范围内接入共同的接收器(例如基站)。研究了以下情况:理想/非理想功率控制、用户速度相同/不同、不同的处理增益以及存在/不存在额外外部干扰。

为了实现发射机,我们通过形成一个二维矩阵来实现,其中一维表示第 i 个用户,另一维表示第 j 个比特,即后续的码片。对于每个用户,最初生成一个信号,通过选择该信号可以得到填充二维矩阵的值。矩阵中每个用户的每个比特都乘以一个唯一的序列(正交序列)的值(码片),从而实现信号的扩频。相邻帧的比特/码片在矩阵中依次排列。对于每个用户,这在两个分支(同相分支和正交分支)中完成,从而模拟了 QPSK 调制。调制是在基本频带(低频等效)中完成的,其中两个分支在将信息发送到信道之前相加,同相分支的值为实数,正交分支的值为复数,即在相加之前乘以复常数 j。

上述低频等效的二维矩阵被简化为一维序列。所有用户的所有值都被合并为一个值(信号),该信号实际上通过信道发送。这样的信号到达接收器的输入端,根据传输信号的强度及其在信道中的衰减,每个用户的信号被缩放。除了缩放后的信号值外,一维序列中还添加了复随机噪声。序列首先被分成两个分支,同相分支和正交分支(信号的实部和虚部)。通过将每个分支乘以相应的正交序列,可以从信号中分离出每个用户的信号。通过乘以正交序列,我们在发射机中扩展的信号频谱被聚集。正交序列相乘后,每个用户的信号进入积分器,根据积分器的输出确定每个用户最初生成的信号。

我们分析了一个具有恒定噪声功率(10dBW)的信道,并研究了理想/非理想功率控制、不同处理增益以及存在/不存在额外外部干扰的情况。以下是每个用户在特定情况下测试的每比特错误概率表。

扩频因子/功率控制理想非理想 3dB非理想 6dB
6400.0010.0058
320.010.00550.036
160.0050.0350.1

通过比较结果,我们得出结论:随着非理想功率控制的增加,每比特错误概率增加。在相同的信道条件下和相同的功率控制下,随着处理增益的降低,每比特错误概率增加。我们也可以通过理论分析得出相同的结论。

当添加额外的外部干扰时,每比特错误概率会根据外部干扰的强度而增加。以下是表格,其中列出了在非理想功率控制和不同扩频因子下,每个用户在同相分支和正交分支中的每比特错误概率值。信道中的噪声功率为 10dBW。

% 用户输入端的功率分配
[0.25 0.125 0.0625 0.25 0.0625 0.0375 0.125 0.875]

% 每个用户的扩频因子分配
[16 32 64 16 64 32 16 32]

分支/用户12345678
同相0.100.180.220.50.10.430.0360.25
正交0.200.230.210.50.10.440.0340.26

📚2 运行结果

部分代码:

%rand(10013,1);

Nuser = 8;          % Broj korisnika
ChByUser = 2;       % Broj Data/Signaling kanala po korisniku
ChByI = 1;          % Broj Data/Signaling kanala u I-grani
ChByQ = 1;          % Broj Data/Signaling kanala u Q-grani
MAIPowerVector(1:Nuser,1) = [0.25 0.125 0.0625 0.25 0.0625 0.0375 0.125 0.875];  % Raspodela snage po korisnicima na ulazu BS - Default vrednost je za slucaj idealne kontrole snage
                                                
NoDemodUser = 3;    % Redni broj korisnika ciji se signal demodulise                                            
                                

ChipByFrame = 16000;            % Broj chip-ova po frejmu 
FramePeriod = 1;             % Trajanje frejma - 1s
FrameRate = 1/FramePeriod;      % Protok frejmova - 100 frames/s
Vchip = FrameRate*ChipByFrame;  % Protok chip-ova 3.84Mchip/s
Tchip = 1/Vchip;                % Trajanje chip-a
TimeSlotsByFrame = 5;          % Broj vremenskih slotova u frejmu

DataBitsByTimeSlotVector(1:3,1) = [50 100 200];                % Broj bita u kanalu po vremenskom slotu za svih 7 brzina signaliziranja
DataBitsByFrameVector(1:3,1) = TimeSlotsByFrame*DataBitsByTimeSlotVector;   % Broj bita u kanalu po frejmu za svih 7 brzina signaliziranja
DataRateVector(1:3,1) = DataBitsByFrameVector*FrameRate;    % Bitski protok po kanalu za svih 7 brzina signaliziranja
SpreadingFactorVector(1:3,1) = [64 32 16];      % Spreading Factor (SF) za korisnika - za svih 7 brzina signaliziranja

BitRatesByUserFlag(1:Nuser,1) = [3 2 1 3 1 2 1 2];    % Zadavanje Protoka/SF po korisniku - redni broj u vektorima iznad

BitsByFrame(1:Nuser,1) = DataBitsByFrameVector(BitRatesByUserFlag(1:Nuser,1));  % Broj bita u svakom kanalu po frejmu za svakog korisnika
ChipByBit(1:Nuser,1) = ChipByFrame./BitsByFrame(1:Nuser,1);                     % Broj chip-ova po bitu za svakog korisnika

Nframe = 100;     % Ukupan broj frejmova koji se prenosi

% Generisanje Channelizing (OVSF) sekvenci za pojedine kanale za korisnike 

ChannelizingCodesMatrix(1:Nuser,1:ChipByFrame*Nframe,1:ChByUser) = zeros(Nuser,ChipByFrame*Nframe,ChByUser);
index = 0;
for user = 1:Nuser
    % Generisanje ortogonalnog skupa OVSF sekvenci - zavise od broja kanala za korisnika
    for chan = 1:ChByUser
        SF = SpreadingFactorVector(BitRatesByUserFlag(user,1),1);
        hOVSF = comm.OVSFCode('SamplesPerFrame',ChipByFrame*Nframe,'SpreadingFactor',SF,'Index',index);    
        seq = 0;
        index = index + 1;
        seq(1:ChipByFrame*Nframe,1) = step(hOVSF);
        ChannelizingCodesMatrix(user,1:ChipByFrame*Nframe,chan) = seq;
    end;    
end;
clear hgld user scs scsmatrix chan hOVSF seq

🎉3 参考文献 

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。(文章内容仅供参考,具体效果以运行结果为准)

[1]管云峰,张朝阳,焦向峰,等.突发模式DS—CDMA—QPSK接收机的设计与实现[J].电路与系统学报, 2001, 6(4):6.

[2]管云峰,张朝阳,焦向峰,等.突发模式DS-CDMA-QPSK接收机的设计与实现[J].电路与系统学报, 2001.

[3]蒋文娟.基于多相正交序列的DS-CDMA系统及其性能分析[D].河北工业大学,2007.

[4]蒋文娟.基于多相正交序列的DS-CDMA系统及其性能分析[D].河北工业大学,2008.

🌈Matlab代码实现

资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取

                                                           在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值