clear all; % 清除所有变量
close all; % 关闭所有窗口
clc; % 清屏
%% 基本参数
M=4; % 产生码元数
L=150; % 每码元复制L次,每个码元采样次数
Ts=0.001; % 每个码元的宽度,即码元的持续时间
RB=1/Ts; % 码元速率1K
dt=Ts/L; % 采样间隔
TotalT=M*Ts; % 总时间
t=0:dt:TotalT-dt; % 时间
Fs=1/dt; % 采样间隔的倒数即采样频率
SSI = 30; % 扩频比50,也就是说原本的1个bit,现在要对应50个bit,信号带宽增加为50倍
osr = 2*L/SSI; % 扩频后,1个bit上的采样点,扩频后,1个bit的持续时间短了 ...
% 仅有1ms / 50 = 20us, 对应同样的采样率1MHz,1个bit里只有20个采样时钟
%% 产生双极性波形
wave=randi([0,1],1,M); % 产生二进制随机码,M为码元个数
tx_data = 2 * wave-1; % 进行符号映射,得到双极性信号
xtn1=reshape(ones(L,1)*tx_data,1,L*M); % 产生单极性不归零矩形脉冲波形,将刚得到的L*M矩阵,按列重新排列形成1*(L*M)的矩阵
%% 串并转换
%% I、Q路码元
% I路码元是基带码元的奇数位置码元,Q路码元是基带码元的偶数位置码元
% 生成I路信号
x_i= tx_data(1 : 2: end);
% 生成Q路信号
x_q = tx_data(2 : 2: end);
%% 进行扩频,用m序列代替原始的0、1序列 '表示行和列的转置
stg=4;
taps=[1 4];
inidata=[1 0 1 1];
mout=funct_m_reg(stg,taps,inidata);
PN=2*mout-1;
PN_m = ones(SSI/length(PN),1)*PN; % 行列交换后,排列为一行N列多组(对PN取SSI/length(PN)个周期)
PN_temp=reshape(PN_m',1,[]);
PN_xn=reshape(PN_temp'*x_i,1,[]);
PN_temp2=reshape((ones(2*L/length(PN_temp),1)*PN_xn),1,[]);
%% I 路扩频
data_temp1 = reshape(ones(2*L,1)*x_i,1,[]);
I_lu=data_temp1.*PN_temp2;
%% Q 路扩频
data_temp2 = reshape(ones(2*L,1)*x_q,1,[]);
Q_lu=data_temp2.*PN_temp2; % 将原始信息中的0、1bit,用PN序列进行扩展
%%
% 调制
fc=200*RB; % 载波频率1kHz
%I路调制
ct1=cos(2*pi*fc*t); % 载波1
psk1=I_lu.*ct1; % PSK1的调制
%Q路调制
ct2=-sin(2*pi*fc*t); % 载波2
psk2=Q_lu.*ct2; % PSK2的调制
qpsk=psk1+psk2; % QPSK的实现
%% 加噪声
qpsk = awgn(qpsk,1);
%% 相干解调,解扩
y_demod_i = qpsk.*ct1.*PN_temp2;
y_demod_q = qpsk.*ct2.*PN_temp2;
%%
wc=(4*pi)/(Fs); %理想低通滤波器截止频率(关于pi归一化)
Ms=100;
hn=fir1(Ms,wc,kaiser(Ms+1));%使用窗函数设计
ytn1=filtfilt(hn, 1,y_demod_i);
ytn2=filtfilt(hn, 1,y_demod_q);
%%
y_end_i = [];y_end_q = [];
%取码元的中间位置上的值进行判决
for j=L:2*L:L*M
if ytn1(j)>0
y_end_i=[y_end_i,1];
else
y_end_i=[y_end_i,-1];
end
end
for k=L:2*L:L*M
if ytn2(k)>0
y_end_q=[y_end_q,1];
else
y_end_q=[y_end_q,-1];
end
end
%%
rx_data = zeros(1, 2 * length(y_end_i));
rx_data(1, 1: 2: end) = y_end_i;
rx_data(1, 2 : 2: end) = y_end_q;
rcdat = reshape(ones(L,1)*rx_data,1,L*M);% 将刚得到的L*(M/2)矩阵,按列重新排列形成1*L*M的矩阵
bit_R=length(find(tx_data~=rx_data));%统计错误比特数
%%
figure(1); % 绘制第1幅图
subplot(211); % 窗口分割成3*1的,当前是第1个子图
plot(t,xtn1,'LineWidth',2); % 绘制基带码元波形,线宽为2
title('基带信号波形');xlabel('时间/s'); ylabel('幅度');
subplot(211); % 窗口分割成3*1的,当前是第1个子图
plot(t,I_lu,'LineWidth',2); % 绘制基带码元波形,线宽为2
title('I路 扩频后的基带波形');xlabel('时间/s'); ylabel('幅度');
subplot(212);
plot(t,Q_lu,'LineWidth',2); % 绘制基带码元波形,线宽为2
title('Q路 扩频后的基带波形');xlabel('时间/s'); ylabel('幅度');
%%
figure(2);
subplot(311);
plot(t,psk1,'LineWidth',2);% 绘制基带码元波形,线宽为2
title('I 路扩频信号波形');xlabel('时间/s'); ylabel('幅度');
subplot(312);
plot(t,psk2,'LineWidth',2);% 绘制基带码元波形,线宽为2
title('Q 路扩频信号波形');xlabel('时间/s'); ylabel('幅度');
subplot(313);
plot(t,qpsk,'LineWidth',2);% 绘制基带码元波形,线宽为2
title('QPSK扩频信号波形');xlabel('时间/s'); ylabel('幅度');
%%
figure(3);
subplot( 2,1,1 );plot(t,y_demod_i);title('乘上相干载波的信号波形');
subplot( 2,1,2 );plot(t,y_demod_q);
%%
figure(4);
subplot( 2,1,1 );plot(t,ytn1);title('低通滤波器信号波形');
subplot( 2,1,2 );plot(t,ytn2);
%%
figure(5);
subplot(211);
plot(t,rcdat,'LineWidth',2);% 绘制基带码元波形,线宽为2
subplot(212);
plot(t,xtn1,'LineWidth',2);% 绘制基带码元波形,线宽为2
title('基带信号波形')
【扩频通信】基于matlab QPSK直序列扩频通信系统仿真【含Matlab源码 4010期】.zip
版权申诉
80 浏览量
2024-02-28
16:16:11
上传
评论 4
收藏 152KB ZIP 举报
海神之光
- 粉丝: 3w+
- 资源: 2092