%%%扩频序列长度为31的Gold序列,采用BPSK调制.每信息比特进行310次抽样,每比特的码片数目是31,每码片抽样10次
close all
clear all
clc
user_data=rand(1,2000); %产生0~1的随机数,用户1的数据
% 将二进制序列转换成双极性非归零形式
length_user_data=length(user_data);
for i=1:length_user_data
if user_data(i)<0.5,
user_data(i)=-1;
else user_data(i)=1; %%user_data,转换为双极性码
end
end
user = user_data;
user(user==-1)=0; %user转换为单极性码,用于最后计算误比特率
figure(1)
subplot(121),stem(user_data(1:100)); title('原始数据');
tt1=abs(fft(user_data));
subplot(122),plot(tt1);title('原始数据幅频特性'); %是否采样率太低,看不出信号的频谱
Lc = 31;
snr_in_dB = 10;
snr=10^ (snr_in_dB/10); %将用分贝表示的功率显性表示
sgma=1; %噪声的标准方差设置为固定值
Eb=2*sgma^2*snr; %达到设定信噪比所需的信号幅度
E_chip=Eb/Lc; %每码片的能量
fc = 1; % 载波频率
Tc=1; % chip周期
Tb=Lc*Tc; % 码片周期
A = 7; %正弦干扰幅度
w0 = 1; %正弦干扰信号频率(以弧度表达)
% 数据的BPSK调制
bpskmod1=[];
for i=1:length_user_data %%%100
for j=1:310
bpskmod(j)=user_data(i)*cos(2*pi*fc*(j/10)); %先进行载波调制
% bpskmod(j)=user_data(i);
end
bpskmod1=[bpskmod1 bpskmod];
end
figure(2)
tt2=abs(fft(bpskmod1));title('原始数据过采样后的幅频特性');
plot(tt2);
% 扩频
pn1 = [0 1 1 1 0 0 0 0 1 0 0 0 0 1 1 0 0 1 0 0 1 0 1 1 1 1 0 0 0 0 0];
pn1(pn1==0) =-1;
pnup1=[];
length_pn1=length(pn1);
for i=1:length_pn1
%下列指令实现PN码每码片的10次抽样(重复)
pnup=ones(1,10)*pn1(i);
pnup1=[pnup1,pnup];
end
pn2=[];
for k = 1:length_user_data %相当于对数据进行重复100次,与重复100抽样不同
pn2=[pn2,pnup1];
end
pn_seq=pn2; %产生扩频码?
sigtx1=sqrt(E_chip)*bpskmod1.*pn_seq;
[B,AA] = butter(3,1/6);
sigtx2=2*filter(B,AA,sigtx1);
figure(3)
% subplot(211),plot(sigtx1(1:1240)); title('乘以扩频码后的数据');
subplot(131),plot(tt2);
title('原始数据过采样后的幅频特性');
tt31=abs(fft(sigtx1));
subplot(132),plot(tt31);title('扩频后的信号频谱');
tt32=abs(fft(sigtx2));
subplot(133),plot(tt32);title('滤波后的扩频信号频谱');
%AWGN信道
% noise = sgma*randn(1,10*Lc*length_user_data);
% %正弦干扰
% interference = [];
% for i=1:length_user_data
% n=(i-1)*10*Lc+1:i*10*Lc;
% interference_noise=A*sin(w0*n/10);
% interference = [interference,interference_noise];
% end
% %%%%%%%%%%%%%%%信号和正弦干扰叠加后的信号%%%%%%%%%%%
% composite_signal = sigtx1+noise+interference;
composite_signal=awgn(sigtx1,-1);
% 解扩
rx1=composite_signal.*pn_seq;
figure(4)
tt41=abs(fft(rx1));
plot(tt41);title('解扩频后的信号频谱');
% BPSK解调
demodcar1=[];
for i=1:length_user_data
for j=1:310
demodcar(j)=cos(2*pi*fc*(j/10));
end
demodcar1=[demodcar1 demodcar];
end
bpskdemod1=rx1.*demodcar1;
len_dmod1=length(bpskdemod1);
sum1=zeros(1,len_dmod1/310);
for i=1:len_dmod1/310
for j=(i-1)*310+1:i*310
sum1(i)=sum1(i)+bpskdemod1(j);
end
end
rxbits1=[];
for i=1:length_user_data
if sum1(i)>0
rxbits1=[rxbits1 1];
else
rxbits1=[rxbits1 0];
end
end
rxbits1;
error_bits = 0;
for n=1:length_user_data
if user(n) ~= rxbits1(n);
error_bits = error_bits+1;
end
end
disp('错误判决的比特数是:')
error_bits
评论0