CDMA调制解调器,适用于2个用户(Matlab代码实现)

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

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

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

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

目录

 ⛳️赠与读者

💥1 概述

一、系统概述

二、PN序列分配

三、调制/解调过程

四、数字窗口显示

五、性能评估

六、结论

📚2 运行结果

2.1 AmitCDMA

2.2 testCDMA

🎉3 版本和参考文献

🌈4 Matlab代码实现


 ⛳️赠与读者

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

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

💥1 概述

CDMA调制解调器,适用于2个用户研究文档

用户1和用户2同时通过噪声信道传输数据,并使用相同的载波频率。两个用户被分配了不同的PN序列,这些序列在接收机处再次用于解调和解码所传输的数据。使用的信道是awgn,信噪比为10db。将弹出3个数字窗口,显示调制/解调过程中的每个步骤。

CDMA(码分多址)调制解调器在多个用户共享相同载波频率的通信系统中起着关键作用,它通过为每个用户分配独特的PN(伪随机噪声)序列来区分不同用户的数据。以下是一个关于CDMA调制解调器在用户1和用户2通过噪声信道(awgn信道,信噪比为10dB)传输数据的研究文档概要:

一、系统概述

  1. CDMA原理:CDMA是一种多址接入技术,它允许多个用户在同一时间和频率上传输数据,通过不同的PN序列来区分各个用户的信号。
  2. 应用场景:本研究文档关注两个用户(用户1和用户2)在awgn信道中的数据传输。
  3. 信道条件:awgn信道,即加性高斯白噪声信道,信噪比为10dB。

二、PN序列分配

  1. PN序列特性:PN序列具有尖锐的自相关特性和较好的互相关特性,这使得接收机能够准确地识别出特定用户的信号。
  2. 序列分配:用户1和用户2被分配了不同的PN序列,以确保他们的信号在接收端能够被正确区分和解调。

三、调制/解调过程

  1. 调制过程

    • 数字数据通过CDMA调制解调器进行调制,转换为模拟信号。
    • 每个用户的信号使用其独特的PN序列进行扩频。
    • 调制后的信号通过awgn信道传输。
  2. 解调过程

    • 接收机接收到混合了噪声的模拟信号。
    • 使用与发送端相同的PN序列对接收到的信号进行解调,提取出特定用户的信号。
    • 通过相关器检测与预定PN序列匹配的信号,并滤除其他用户的信号和噪声。

四、数字窗口显示

在调制/解调过程中,将弹出三个数字窗口,分别显示以下信息:

  1. 窗口1:原始数据与用户PN序列

    • 显示用户1和用户2的原始数据。
    • 显示分配给每个用户的PN序列。
  2. 窗口2:调制后的信号

    • 显示用户1和用户2调制后的信号波形。
    • 波形中应包含扩频后的PN序列特征。
  3. 窗口3:解调后的数据

    • 显示接收机解调后恢复出的用户1和用户2的数据。
    • 数据应与原始数据一致,验证调制/解调过程的准确性。

五、性能评估

  1. 误码率分析:通过比较解调后的数据与原始数据,计算误码率,评估系统的通信质量。
  2. 信噪比影响:分析不同信噪比对系统性能的影响,验证系统在10dB信噪比下的通信可靠性。

六、结论

本研究文档通过模拟CDMA调制解调器在用户1和用户2通过awgn信道传输数据的过程,验证了CDMA技术在多用户通信中的有效性和可靠性。通过分配不同的PN序列,系统能够准确地识别和解调各个用户的信号,实现高效的多址接入。同时,通过数字窗口的显示,可以直观地了解调制/解调过程中的每个步骤,为进一步优化系统性能提供依据。

📚2 运行结果

2.1 AmitCDMA

2.2 testCDMA

部分代码:

basebandsig1=rectpulse(user1,100);
subplot(4,2,3);
plot(basebandsig1);
title('Baseband signal user 1 NRZ form');
axis([0 100*length_user1 -1.2 1.2]);
basebandsig2=rectpulse(user2,100);
subplot(4,2,4);
plot(basebandsig2);
title('Baseband signal user 2 NRZ form');
axis([0 100*length_user1 -1.2 1.2]);

%% BPSK signal for user1 and user2
t=0.01:0.01:length_user1;
modwave=sqrt(2*eb)*cos(2*pi*fc*(t));
bpsk_user1=basebandsig1.*modwave;
bpsk_user2=basebandsig2.*modwave;
subplot(4,2,5)
plot(bpsk_user1)
title(' BPSK signal for user 1');
axis([0 100*length_user1 -2 2]);
subplot(4,2,6)
plot(bpsk_user2)
axis([0 100*length_user2 -2 2]);
title(' BPSK signal for user 2');

%% FFTs of BPSK for user 1 and user2
subplot(4,2,7);
plot(real(fft(bpsk_user1)));
title('FFT of BPSK signal for user1 is');
subplot(4,2,8);
plot(real(fft(bpsk_user2)));
title('FFT of BPSK signal for user2 is');

%% PN sequence for user 1
% let initial seed for user1 is 1010
seed1=[1 -1 1 -1];  %convert it into bipolar NRZ format 
pn1=[];

for i=1:length_user1
    for j=1:10 %chip rate is 10 times the bit rate
        pn1=[pn1 seed1(4)];  
        if seed1 (4)==seed1(3) 
        temp=-1;
        else temp=1;
        end
              seed1(4)=seed1(3);
              seed1(3)=seed1(2);
              seed1(2)=seed1(1);
              seed1(1)=temp;
    end

end
figure(2);
 subplot(2,4,1);
stem(pn1);
axis([0,length(pn1),-1.2,1.2])
title('PN sequence for user1')
 
 
 
pnupsampled1=[];
len_pn1=length(pn1);
for i=1:len_pn1
    for j=0.1:0.1:tb
    pnupsampled1=[pnupsampled1 pn1(i)];
    end
end
subplot(2,4,2)
stem(pnupsampled1);
axis([0,length(pnupsampled1),-1.2,1.2])
title('PN sequence for user1 upsampled');
 
%% PN sequence for user 2
 % let initial seed for user2 is 0101
seed2=[-1 1 -1 1];  %convert it into bipolar NRZ format 
pn2=[];
 
for i=1:length_user2
    for j=1:10 %chip rate is 10 times the bit rate
        pn2=[pn2 seed2(4)];  
        if seed2(4)==seed2(3) 
        temp=-1;
        else temp=1;
        end
              seed2(4)=seed2(3);
              seed2(3)=seed2(2);
              seed2(2)=seed2(1);
              seed2(1)=temp;
    end

end
 
 subplot(2,4,5);
stem(pn2);
axis([0,length(pn2),-1.2,1.2])
title('PN sequence for user2')
pnupsampled2=[];
len_pn2=length(pn2);
for i=1:len_pn2
    for j=0.1:0.1:tb
    pnupsampled2=[pnupsampled2 pn2(i)];
    end
end
length_pnupsampled2=length(pnupsampled2);
subplot(2,4,6)
stem(pnupsampled2);
axis([0,length(pnupsampled2),-1.2,1.2])
title('PN sequence for user2 upsampled');
 
%% transmitted signals and their FFTs
 
subplot(2,4,3);
sigtx1=bpsk_user1.*pnupsampled1;
plot(sigtx1);
title('spread spectrum signal txd for user 1');
 
subplot(2,4,7);
sigtx2=bpsk_user2.*pnupsampled2;
plot(sigtx2);
title('spread spectrum signal txd for user 2');

subplot(2,4,4);
plot(real(fft(sigtx1)));
title('FFT of spreaded signal tx by user1');

subplot(2,4,8);
plot(real(fft(sigtx2)));
title('FFT of spreaded signal tx by user2');

%% Composite Signal with noise

composite_signal=awgn(sigtx1+sigtx2,snr_in_dbs);
figure(3)
subplot(4,2,1);
plot(sigtx1+sigtx2);
title('Composite signal sigtx1+sigtx2');
subplot(4,2,2);
plot(composite_signal);
title(sprintf('Composite signal + noise\n SNR=%ddb',snr_in_dbs));

%% Received Signals for user 1 and user 2

rx1=composite_signal.*pnupsampled1;
rx2=composite_signal.*pnupsampled2;

subplot(4,2,3);
plot(rx1);
title('Received signal from user1 after multiplying it with pn seq');
subplot(4,2,4);
plot(rx2);
title('Received signal from user2 after multiplying it with pn seq');

%% BPSK Demodulation for user 1
bpskdemod1=rx1.*modwave;
subplot(4,2,5)
plot(bpskdemod1)
title('o/p of bpsk demod for user 1 is ')
len_dmod1=length(bpskdemod1);
sum=zeros(1,len_dmod1/100);
%code for performing Integrate and dump operation
for i=1:len_dmod1/100
    for j=(i-1)*100+1:i*100
        sum(i)=sum(i)+bpskdemod1(j);
    end
end
sum;
  
 rxbits1=[];
 for i=1:length_user1
    if sum(i)>0
        rxbits1=[rxbits1 1];
    else
        rxbits1=[rxbits1 0];
    end
 end
opuser1=rxbits1;
rxbits1=rectpulse(rxbits1,100); 
subplot(4,2,7);
plot(rxbits1)
axis([0 length(rxbits1) -0.2 1.2]);
title('Received bits of user1 data')
%% BPSK Demodulation for user 2
bpskdemod2=rx2.*modwave;
subplot(4,2,6)
plot(bpskdemod2)
title('o/p of bpsk demod for user 2 is ')
len_dmod2=length(bpskdemod2);
sum=zeros(1,len_dmod2/100);
%code for performing Integrate and dump operation
for i=1:len_dmod2/100
    for j=(i-1)*100+1:i*100
        sum(i)=sum(i)+bpskdemod1(j);
    end
end

  
 rxbits2=[];
 for i=1:length_user2
    if sum(i)>0
        rxbits2=[rxbits2 1];
    else
        rxbits2=[rxbits2 0];
    end
 end
opuser2=rxbits2;
rxbits2=rectpulse(rxbits2,100); 
subplot(4,2,8);
plot(rxbits2);
axis([0 length(rxbits2) -0.2 1.2]);
title('Received bits of user2 data');
 

🎉3 版本和参考文献

Matlab版本:2018a

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

[1]龙光利.CDMA调制解调器的设计[J].陕西理工学院学报(自然科学版), 2005.

[2]潘申富,王立功.可变速率CDMA调制解调器的设计[J].无线电通信技术, 2002, 28(6):2.

🌈Matlab代码实现

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

                                                           在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值