网站建设主动型电话销售话术,个人可以建设网站吗不备案,国际学校网站建设,刷赞网站推广永久最近有偶然的机会学习了一次QPSK防止以后忘记又得找资料#xff0c;这里就详细的记录一下 基于 QPSK 的通信系统如图 1 所示#xff0c;QPSK 调制是目前最常用的一种卫星数字和数 字集群信号调制方式#xff0c;它具有较高的频谱利用率、较强的抗干扰性、在电路上实现也较为…最近有偶然的机会学习了一次QPSK防止以后忘记又得找资料这里就详细的记录一下 基于 QPSK 的通信系统如图 1 所示QPSK 调制是目前最常用的一种卫星数字和数 字集群信号调制方式它具有较高的频谱利用率、较强的抗干扰性、在电路上实现也较为简单在后文仅仅使用MATLAB进行模拟。 图 1 基于QOSK调制的通信系统模型 其相位图如图 2 所示二进制数 0 和 1 分别表示两个相位为了提高传输速率通 常可以采用多项调制的方法即将待发的数字信号按两比特一组的方式组合两位二进 制数的组合方式又四种—(00011011)。每个组合是一个双比特码通常可以用四 个不同的相位值表示这四组双比特码。在传输过程中相位改变一次传输两个二进制 数。这种调相方法成为四项调相或四项调制广泛广泛应用 于卫星链路、数字集群等 通信业务。 图2相位图 如图 3 所示QPSK 信号可以采用正交调制器来实现 图3 QPSK信号生成原理图 根据图1和图3的原理图就可以开始着手写MATLAB代码了。 我将其分为以下几个方面 模拟源信号源信号-双极性信号双极性信号转为QPSK信号QPSK信号经过模拟信道传输引起失真。采用相干解调法分离QPSK信号。低通滤波过滤噪音抽样判决获得信号最后将信号极性反转获得源信号 QPSK详细代码如下在代码中已经做好注释了。
%% 采用代码实现的4PSK通信系统仿真
% 假设在T1,加入高斯噪声
clc;
clear all;
close all;
%% 发端
% 1.调制,生成二进制信号
bit_in randi([0 1],1000,1);
% 2.变为双极性码
data -2*bit_in1;
% 3.串并转换模块奇数位为I偶数为为Q
data_I data(1:2:1000); % 间断获取 I
data_Q data(2:2:1000); % 间断获取 Q
data_I1repmat(data_I,20,1);
data_Q1repmat(data_Q,20,1);% 按列优先将data_I1中的数据存入data_I2
for i1:1e4data_I2(i)data_I1(i);data_Q2(i)data_Q1(i);
end% 4.产生升余弦的基带信号
f0:0.1:1;
xrc0.50.5*cos(pi*f); data_I2_rcconv(data_I2,xrc)/5.5;
data_Q2_rcconv(data_Q2,xrc)/5.5;figure
subplot(2,2,1)
stem(bit_in(1:20),black,LineWidth,2);
axis([0,20,0,1]);
title(发送的消息序列);
subplot(2,2,2)
plot(f,xrc,black,LineWidth,2);
title(升余弦信号);
subplot(2,2,3)
plot(data_I2_rc(1:20),black,LineWidth,2);
title(升余弦I信号);
subplot(2,2,4)
plot(data_Q2_rc(1:20),black,LineWidth,2);
title(升余弦Q信号);% 5. 正交调制调相法将基带数字信号双极性与载波信号直接相乘的方法
f11; % 载波频率
t10:0.1:1e30.9;I_rcdata_I2_rc.*cos(2*pi*f1*t1);
Q_rcdata_Q2_rc.*sin(2*pi*f1*t1);
x(sqrt(1/2).*I_rcsqrt(1/2).*Q_rc);figure(1)
subplot(2,1,1);
plot(t1,x,black,LineWidth,2); xlabel(t); ylabel(幅度);
grid on;
axis([0 1/f1*10 -1.2 1.2]); % 输出2个周期的信号
title(QPSK信号); %% 6.仿真信道噪声
n0rand(size(t1))/2;
yxn0;subplot(2,1,2);
plot(t1,y,black,LineWidth,2); xlabel(t); ylabel(幅度);
grid on;
axis([0 1/f1*10 -2 2]); % 输出2个周期的信号
title(带噪声的QPSK信号); %% 仿真接收端
% 7.正交解调只能采用相干解调
I_demoy.*cos(2*pi*f1*t1);
Q_demoy.*sin(2*pi*f1*t1);
% 8.低通滤波
I_recoverconv(I_demo,xrc);
Q_recoverconv(Q_demo,xrc);
II_recover(11:10010);
QQ_recover(11:10010);% 9.抽样判决
data_recover[];
for i1:20:10000data_recover[data_recover I(i:1:i19) Q(i:1:i19)];
end
bit_recover[];
for i1:20:20000if sum(data_recover(i:i19))0data_recover_a(i:i19)1;bit_recover[bit_recover 1];elsedata_recover_a(i:i19)-1;bit_recover[bit_recover -1];end
end% 10.变为单极性码
bit_recovered(1-bit_recover)/2;
figure(2)
subplot(2,1,1)
stem(bit_in(1:20),black,LineWidth,2);
axis([0,20,0,1]);
title(发送的消息序列);subplot(2,1,2)
stem(bit_recovered(1:20),black,LineWidth,2);
axis([0,20,0,1]);
title(接收的消息序列);figure(3)
subplot(2,1,1)
stem(bit_in(1:20),black,LineWidth,2);
axis([0,20,0,1]);
title(发送的消息序列);subplot(2,1,2)
stem(data(1:20),black,LineWidth,2);
axis([0,20,-1,1]);
title(双极性码);
set(gcf,color,w) BSPK的代码也贴在这里
clc
clear
close all;%%初始化参数设置
data_len 100000; % 原始数据长度
SNR_dB 0:10; % 信噪比 dB形式
SNR 10.^(SNR_dB/10); % Eb/N0
Eb 1; % 每比特能量
N0 Eb./SNR ; %噪声功率
error2 zeros(1,length(SNR_dB)); % 码元错误个数
simu_ber_BPSK zeros(1,length(SNR_dB)); % 仿真误误码率
theory_ber_BPSK zeros(1,length(SNR_dB)); % BPSK理论误码率
demod2_signal zeros(1,data_len); % 解调信号%%基带信号产生
data_source round(rand(1,data_len)); % 二进制随机序列%%BPSK基带调制
send_signal2 (data_source - 1/2)*2; % 双极性不归零序列 %%高斯信道无编码
for z 1:length(SNR_dB)noise2 sqrt(N0(z)/2) * randn(1,data_len); %高斯白噪声receive_signal2 send_signal2 noise2;demod_signal2 zeros(1,data_len);for w 1:data_lenif (receive_signal2(w) 0)demod_signal2(w) 1; % 接收信号大于0 则判1elsedemod_signal2(w) 0; % 接收信号小于0 则判0endend%统计错误码元个数for w 1:data_lenif(demod_signal2(w) ~data_source(w) )error2(z) error2(z) 1; % 错误比特个数endend%计算误码率simu_ber_BPSK(z) error2(z) / data_len; % 仿真误比特率theory_ber_BPSK(z) qfunc(sqrt(2*SNR(z))); % 理论误比特率
end%%二进制序列、基带信号图像
figure(1);
stem(data_source);
title(二进制随机序列);
axis([0,50,0,1]);
figure(2);
stem(send_signal2);
title(BPSK基带调制--发送信号);
axis([0,50,-1.5,1.5]);figure(4);
stem(noise2);
title(高斯白噪声);
axis([0,50,-0.5,0.5]);figure(5)
stem(receive_signal2);
title(接收信号);
axis([0,50,-1.5,1.5]);figure(7)
stem(demod_signal2);
title(解调信号);
axis([0,50,0,1]);figure(8);semilogy(SNR_dB,simu_ber_BPSK,M-X,SNR_dB,theory_ber_BPSK,k-s); grid on;
axis([0 10 10^-5 10^-1])
xlabel(Eb/N0 (dB));
ylabel(BER); legend(BPSK仿真误码率,BPSK理论误码率); %%画星座图
scatterplot(send_signal2);
title(发送信号星座图);
scatterplot(receive_signal2);
title(接收信号星座图);
scatterplot(demod_signal2);
title(解码信号星座图); MPSK代码
clc;
clear all;
close all;
%% 调用库函数实现MPSK的通信系统仿真M4;
cycl80; % 运行次数
SNR0:1:30; % 信噪比
srandi([0 M-1],1,1000); % 输入信息一行1000列;BER1zeros(cycl,length(SNR));for n1:cyclfor k1:length(SNR)xpskmod(s,M,pi/4); % M进制PSKyawgn(x,SNR(k),measured); % 在传输序列中加入噪声rpskdemod(y,M,pi/4); % 解调r1reshape(r,1,[]);[num,rat]biterr(r1,s,log2(M)); % 误码率计算BER1(n,k)rat;end
endfigure(1)
subplot(2,1,1)
stem(s(1:20),black,LineWidth,2);
axis([0,20,0,M]);
title(发送的消息序列);subplot(2,1,2)
stem(r1(1:20),black,LineWidth,2);
axis([0,20,0,M]);
title(接收的消息序列);%% 8PSK
M8;
cycl80; % 运行次数
SNR0:1:30; % 信噪比
srandi([0 M-1],1,1000); % 输入信息一行1000列;BER2zeros(cycl,length(SNR));for n1:cyclfor k1:length(SNR)xpskmod(s,M,pi/4); % M进制PSKyawgn(x,SNR(k),measured); % 在传输序列中加入噪声rpskdemod(y,M,pi/4); % 解调r1reshape(r,1,[]);[num,rat]biterr(r1,s,log2(M)); % 误码率计算BER2(n,k)rat;end
endfigure(2)
subplot(2,1,1)
stem(s(1:20),black,LineWidth,2);
axis([0,20,0,M]);
title(原始消息序列);subplot(2,1,2)
stem(r1(1:20),black,LineWidth,2);
axis([0,20,0,M]);
title(传递消息序列);% 统计平均误码率
figure(3)BER1mean(BER1);
subplot(2,1,1)
semilogy(SNR,BER1,k-o,LineWidth,2);
xlabel(SNR/dB); ylabel(BER);
title(4PSK);
grid onBER2mean(BER2);
subplot(2,1,2)
semilogy(SNR,BER2,k-o,LineWidth,2);
xlabel(SNR/dB); ylabel(BER);
title(8PSK);
grid on
QAM代码也在这里
clc;
clear all;
close all;
%% 基于16QAM的通信系统仿真
% 发端
nbit10000;
M16; % M表示QAM调制的阶数
klog2(M);
graycode[0 1 3 2 4 5 7 6 12 13 15 14 8 9 11 10]; % 格雷映射编码规则
EsN05:20; % 信噪比范围
snr10.^(EsN0/10); % 将db转换为线性值
% 产生16进制的消息符号
srandi([0,1],1,nbit);
s_reshapereshape(s,k,nbit/k); % 对数据流进行分组对于16QAM则每4位一组
msgbi2de(s_reshape,left-msb); % 转化成10进制作为qammod的输入
% 进行格雷映射
msg1graycode(msg1);
% 调制
rqammod(msg1,M); % 调用matlab中的qammod函数16QAM调制方式的调用(输入0到15的数M表示QAM调制的阶数)得到调制后符号
spow1norm(r).^2/nbit; % 取abj的模.^2得到功率除整个符号得到每个符号的平均功率
for i1:length(EsN0)% 信道sigmasqrt(spow1/(2*snr(i))); % 16QAM根据符号功率求出噪声的功率xrsigma*(randn(1,length(r))1i*randn(1,length(r))); % 16QAM混入高斯加性白噪声% 16QAM的解调y1qamdemod(x,M); % 格雷逆映射y2graycode(y11); % 返回译码出来的信息十进制testde2bi(y2,k,left-msb);y3reshape(test,1,nbit);[err1,ber1(i)]biterr(s,y3);
end
%% 绘图
figure(1)
subplot(2,1,1)
stem(s(1:20),black,LineWidth,2);
axis([0,20,0,1.2]);
title(发送的消息序列);subplot(2,1,2)
stem(y3(1:20),black,LineWidth,2);
axis([0,20,0,1.2]);
title(接收的消息序列);scatterplot(r); % 调用matlab中的scatterplot函数,画星座点图
scatterplot(x); % 调用matlab中的scatterplot函数,画rx星座点图% 16QAM调制信号在AWGN信道的性能
figure( )
semilogy(EsN0,ber1,black,LineWidth,2); % ber ser比特仿真值 ser1理论误码率 ber1理论误比特率
title(16QAM调制信号在AWGN信道的性能分析);grid;
xlabel(Es/N0(dB));
ylabel(误比特率);