🍁🥬🕒摘要🕒🥬🍁
本文构建直接序列扩频系统模型,使用Matlab对BPSK直接序列扩频通信系统在AWGN信道下性能进行基带建模和仿真,并进行分析。
✨🔎⚡运行结果⚡🔎✨
- 编程产生周期长度为31的m序列;
- 产生随机发送信息,并分别进行BPSK调制;
- 采用m序列作为扩频码,产生扩频信号发送信号;
- 对扩频发送信号加入白噪声,得到接收扩频信号;
- 对接收信号进行解扩;
- 对接收信号进行BPSK解调;
- 通过蒙特卡洛方法,仿真系统误码率,画出误码率曲线。
- 产生周期长度为31的m序列,记为w; (实验6的内容,m序列周期T=2n-1)(需转换成1、-1)
- 产生发送信息0、1比特; (三种方法:循环判断、rand+round、randint/randi)(数据长度L自定,尽量大一些,比如1000)
- 对信息比特进行BPSK调制,记为d; (即码型变换:1→1, 0→-1)(注:出于简化,本实验省略载波调制部分)
- 对发送信息进行扩频,即d*w; (实现提示1:采用循环的方式,对每位数据进行扩频,运行速度较慢) (实现提示2:可将d的每位数据重复31次,w扩大L次(L为发送数据长度),再点乘。可用函数:repmat函数、reshape函数)
- 信号经过信道,叠加白噪声,得到接收端接收信号 ; (噪声功率由信噪比决定,仿真结果横坐标为信噪比,可取-30:5,单位dB) (可使用awgn函数,也可自行实现)
- 对接收端信号进行恢复,包括解扩、解调、判决。方法如下:a. 首先与扩频码相乘进行解扩, ;b. 对每位数据扩大的31次进行求和,以第一个数据b1为例,sum(b1);c. 判决,sum(b1)>0,判为1,否则为-1。
- 误码率统计,并画图。 (画图函数:semilogy)
💂♨️👨🎓Matlab代码👨🎓♨️💂
clc;clear all; r=5; N=2^r-1;%周期31 a=ones(1,r); m=zeros(1,N); for i=1:(2^r-1) temp= mod((a(5)+a(2)),2); for j=r:-1:2 a(j)=a(j-1); end a(1)=temp; m(i)=a(r); end m=m*2-1;%双极性码 %产生随机发送信息,并进行BPSK/QPSK调制 n=1000; Y_BIT_sum=zeros(1,36); for jj=1:100%跑100次,得到平滑曲线 source=randi([0 1],1,n); % s_imag=randi(1,n); s_BPSK=2*source-1; % s=source+j*s_imag; % j=sqrt(-1); % s_QPSK=s*2-(1+j); %产生扩频信号: % for z=1:1:100 % y_QPSK(31*(z-1)+(1:31))=m*s_QPSK(z); % end for z=1:1000 y_BPSK(31*(z-1)+(1:31))=m*s_BPSK(z); end %加入高斯白噪声 SNR=-30:5; for i=1:length(SNR) y(i,:)=awgn(y_BPSK,SNR(i)); end %解扩 for z=1:1000 for i=1:length(SNR) o_BPSK(i,z)=y(i,31*(z-1)+(1:31))/m; end end Y_RE=o_BPSK; %判决 Y_RE(o_BPSK>0)=1; Y_RE(o_BPSK<0)=0; Y_ERRO=zeros(length(SNR),1000); Y_BIT=zeros(1,length(SNR)); for i=1:length(SNR) Y_ERRO(i,:)=abs(Y_RE(i,:)-source); Y_BIT(i)=sum(Y_ERRO(i,:))/n; end Y_BIT_sum=Y_BIT_sum+Y_BIT; end Y_BIT_av=Y_BIT_sum/100; semilogy(SNR,Y_BIT_av); xlabel('SNR');ylabel('误码率'); grid on; title('wml');
📜📢🌈参考文献🌈📢📜
[1]曹旺斌,康辉,谢志远,梁晓林,胡正伟.MIMO-PLC直接序列扩频系统编码方法研究[J].中国电机工程学报,2021,41(S1):121-129.DOI:10.13334/j.0258-8013.pcsee.211063.