⭐️作者简介:
小瑞同学
,主要学习FPGA、信号处理、通信等。
🍎个人主页:小瑞同学的博客主页
🌻个人信条:越努力,越幸运!
⏰日期:2023.11.16
📖文章内容概述:简单介绍了QPSK的基本原理和具体流程,并使用MATLAB进行了仿真分析。
1.QPSK简介
👻QPSK(正交相移键控),是一种广泛使用的数字调制方式,具有较高的频道利用率和很强的抗干扰性能。QPSK是通过不同的载波相位来区分传输的信息,传输的码元中每2个bit代表一个符号,符号映射成4种相位,各相位之间相差 π / 2 \pi/2 π/2。相位映射关系如下表所示:
2bit码元 | A方式 | B方式 |
---|---|---|
0 0 | 0 0 0 | 5 π / 4 5\pi/4 5π/4 |
0 1 | π / 2 \pi/2 π/2 | 3 π / 4 3\pi/4 3π/4 |
1 1 | π \pi π | π / 4 \pi/4 π/4 |
1 0 | 3 π / 2 3\pi/2 3π/2 | 7 π / 4 7\pi/4 7π/4 |
👻在实际系统中,通常使用两路正交的BPSK信号相加来产生QPSK信号,每路各传输符号的1bit,而且B方式使用的更多,B方式的星座图如下图所示。
下面就介绍一下QPSK的具体实现过程。
2.QPSK调制
👻流程图取自知乎,过程如下:
2.1 双极性转换
👻对码元序列中的每个bit进行极性转换,即0->-1,1->1,这样原来的01序列就变成-1,+1序列。这样做的目的是将一个符号在QPSK星座图中表示出来,符号在星座图中的位置对应于不同的相位。
2.2 串并转换
👻将序列分为IQ两路传输,序列的奇数位进入I路,偶数位进入Q路。
2.3 成型滤波
👻波成型,即基带调制,是将一个符号序列映射成一个连续波形信号的过程,本质上是将离散信号转化为连续信号,调制后的信号仍是基带信号。为了实现无码间串扰传输,一般采用具有升余弦特性的滚降滤波器进行波成型。
2.4 载波调制
👻载波调制就是将基带信号调制到载波频率附近的过程。I、Q两路信号分别与相差
π
\pi
π\2的正弦载波相乘,得到两路相互正交的BPSK信号。将两路信号相加即得到QPSK调制信号。
3.已调信号经过信道
👻这里采用信噪比为5的高斯白噪声信道。
4.QPSK解调
👻解调过程如下:
4.1 相干解调
👻相干解调就是将QPSK信号分别乘与发射机同频同相的相干载波,进行频谱搬移,这样又得到两路信号。
4.2 低通滤波器
👻相干解调后同时产生了高频成分和低频成分,需要将高频成分滤除,低通滤波器的截止频率设置为码元速率
R
b
R_b
Rb。
4.3 匹配滤波
👻匹配滤波器是一种最佳滤波,当信号具有某种波形时,其输出信噪比最大,匹配滤波器一般选取与成型滤波器相同。
4.4 抽样判决
👻选取信号中间时刻进行判决,值大于0判定为1,小于0则判定为0。判决后将两路合并即得到最终接收到的信号。可以看到波形与发送的数字序列相同,由于中间滤波器的影响,波形产生了少许平移。
5.QPSK误码性能曲线
👻随着信噪比的增大,误码率越来越小。
文章来源:https://www.toymoban.com/news/detail-851682.html
6.参考程序
% =========QPSK.m=======================
% Author : 小瑞同学
% Date : 2023.11.13
% Description : QPSK调制解调通信系统仿真
% Source : 课程设计
% ======================================
clc;
close;
clear all;
%% 定义参数
Rb=1e3;%码元速率
Tb=1/Rb;%码元间隔
L=50;%码元长度
N=30;%一个码元的采样次数,N=Tb/Ts
Ts=Tb/N;%采样间隔
Fs=1/Ts;%采样频率
T=Tb*L;%基带波形总时间
t=0:Ts:T-Ts;%基带波形时间向量
t_iq=0:Ts:T/2-Ts;%I、Q两路波形时间向量
t0=0:Tb:Tb*L-Tb;%输入信号波形时间向量
%% 双极性转换
wave=randi([0,1],1,L);%产生随机码元序列
wave=2*wave-1;%变换极性
figure(1);
subplot(211);
plot(t0,wave);
title('输入的数字信号波形');
%采样
for i=1:N
x1(i,:)=wave;
end
wave_base=reshape(x1,1,L*N);
subplot(212);
plot(t,wave_base);
title('采样后的基带信号波形');
%% QPSK符号映射
%基带信号奇数位映射为I路,偶数位映射为Q路
I_t=wave(1:2:end);
Q_t=wave(2:2:end);
%采样(另一种写法)
m=ones(1,N);
x2=I_t(m,:);
I=reshape(x2,1,L*N/2);
x3=Q_t(m,:);
Q=reshape(x3,1,L*N/2);
figure(2);
subplot(211);
plot(t_iq,I);
title('采样后的I路信号波形');
subplot(212);
plot(t_iq,Q);
title('采样后的Q路信号波形');
figure(3);
scatter(I_t,Q_t);
set(gca,'XAxisLocation','origin');
set(gca,'YAxisLocation','origin');
title('QPSK星座图');
%%波成形
a=rcosdesign(0.5,6,N);%升余弦滚降滤波器
filter_delay1=(length(a)-1)/2;%滤波器有一定的延迟
I=filter(a(filter_delay1:end),1,I);
Q=filter(a(filter_delay1:end),1,Q);
figure(4);
subplot(211);
plot(t_iq,I);
title('I路信号成形滤波后的波形');
subplot(212);
plot(t_iq,Q);
title('Q路信号成形滤波后的波形');
%% 载波调制
fc=8e3;%这里为了便于观察,取了较低的载波频率
carrier1=cos(2*pi*fc*t_iq);
psk1=I.*carrier1;
carrier2=-sin(2*pi*fc*t_iq);
psk2=Q.*carrier2;
qpsk=psk1+psk2;
figure(5);
plot(t_iq,qpsk);
title('QPSK调制信号');
%% 已调信号经过高斯白噪声信道
SNR=5;%信噪比
qpsk_trans=awgn(qpsk,SNR);
figure(6);
plot(t_iq,qpsk_trans);
title('经过高斯白噪声信道的已调信号');
%% 相干解调
I_dem=qpsk_trans.*carrier1;
Q_dem=qpsk_trans.*carrier2;
figure(7);
subplot(211);
plot(t_iq,I_dem);
title('相干解调后的I路信号波形');
subplot(212);
plot(t_iq,Q_dem);
title('相干解调后的Q路信号波形');
%% 低通滤波
fp=Rb;
wp=2*fp/Fs;
b=fir1(80,wp,'low');
filter_delay2=(length(b)-1)/2;
%求滤波器幅频响应
[h,w]=freqz(b,1,'whole');
f=w*Fs/2/pi;%数字频率转模拟频率
H=20*log(abs(h));
I_dem_filter=filter(b(filter_delay2:end),1,I_dem);
Q_dem_filter=filter(b(filter_delay2:end),1,Q_dem);
figure(8);
subplot(311);
plot(f,H);
title('低通滤波器的幅频响应');
subplot(312);
plot(t_iq,I_dem_filter);
title('I路信号经低通滤波后的波形');
subplot(313);
plot(t_iq,Q_dem_filter);
title('Q路信号经低通滤波的波形');
%%匹配滤波
c=rcosdesign(0.5,6,N);%用与发送端相同的升余弦滚降滤波器
filter_delay3=(length(c)-1)/2;
I_dem_filter=filter(c(filter_delay3:end),1,I_dem_filter);
Q_dem_filter=filter(c(filter_delay3:end),1,Q_dem_filter);
figure(9);
subplot(211);
plot(t_iq,I_dem_filter);
title('I路信号经匹配滤波后的波形');
subplot(212);
plot(t_iq,Q_dem_filter);
title('I路信号经匹配滤波后的波形');
%% 抽样判决
d=0;%判决门限
I_rec=[];
Q_rec=[];
%取码元中间时刻的值进行判决
for i=N/2:N:L*N/2
if I_dem_filter(i)>0
I_rec=[I_rec,1];
else
I_rec=[I_rec,0];
end
end
for j=N/2:N:L*N/2
if Q_dem_filter(j)>0
Q_rec=[Q_rec,1];
else
Q_rec=[Q_rec,0];
end
end
%% I、Q两路合并输出
sig_rec=zeros(1,L);
sig_rec(1:2:end)=I_rec;
sig_rec(2:2:end)=Q_rec;
figure(10);
plot(t0,sig_rec);
title('最终接收到的信号');
%% 误码性能分析
SNR1=1:20;
QPSK_awgn=1/2*erfc(sqrt(10.^(SNR1/10)/2));
figure(11);
semilogy(SNR1,QPSK_awgn,'r-*');
title('QPSK误码性能曲线');
xlabel('信噪比(dB)');ylabel('BER');
❤️如果觉得文章对你有所帮助的话,别忘了点个收藏和赞哦~
❤️更多优质内容可浏览本人主页👇,期待再次与你相遇!
🎉🎉🎉🎉🎉🎉小瑞同学的博客主页🎉🎉🎉🎉🎉🎉文章来源地址https://www.toymoban.com/news/detail-851682.html
到了这里,关于QPSK调制解调原理及MATLAB仿真的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!