首页/文章/ 详情

射频工程师进阶——玩转波形设计QPSK

1年前浏览1407
做射频的我相信都遇到过和其他部门拉扯的情况,每次查到问题在波形或者基带,他们会说“你怎么证明问题是我的,哪个环节出问题了”,由于不熟悉波形设计,经常需要把所有问题的排查掉,甚至帮他们把问题定位到具体的环节才能脱身。

所以我一直有计划看看中频处理,上次看了零中频的闪烁噪声后,更加坚定了我要学习一下中频的决心。希望通过学习编解码的过程打通薄弱环节,下一次产品会议的时候直接怼到软件工程师的脸上。

就从最简单的QPSK开始。

QPSK的产生机理很简单。

QPSK是英文Quadrature Phase Shift Keying的缩略语简称,意为正交相移键控,是一种数字调制方式。在数字信号的调制方式中QPSK四相移键控是目前最常用的一种卫星数字信号调制方式,它具有较高的频谱利用率、较强的抗干扰性。

对着框图理解代码

下面的代码是我在网上获取的资源


clc; close all;

fs = 8; fd = 1;

N = 64;


%% 产生0,1 信号

x = randi([0,1],1,N);

xi = x;                            %存储输入信号

%% 调制

x = 2*x(1:2:end)+x(2:2:end);       %QPSK调制用数值代替信号运算

const = [1+1i,-1+1i,1-1i,-1-1i];   %映射准备,使其符合genqammod规则

x = genqammod(x,const);            %映射

figure(1);

subplot(211);

stem(real(x));

title('QPSK调制后的同向分量');

subplot(212);

stem(imag(x),'r');

title('QPSK调制后的正交分量');


scatterplot(x);

title('QPSK星座图');

axis([-2,2,-2,2]);

line([-pi,0],[0,0]);

line([pi,0],[0,0]);

line([0,0],[0,pi]);

line([0,0],[0,-pi]);


%% 插值

y = upsample(x,8);                  %对信号进行插值


figure(3);

subplot(211);

stem(real(y));

title('上采样后的同向分量');

subplot(212);

stem(imag(y),'r');

title('上采样后的正交分量');


%% 低通滤波

% y = rcosflt(x,fd,fs,'fir/sqrt',0.25,1);   %低通滤波

filter = rcosine(fd,fs,'fir/sqrt',0.25,1);

y = conv(y,filter);


figure(4);

subplot(211);

stem(real(y),'.');

title('滤波后的同向分量');

subplot(212);

stem(imag(y),'r','.');

title('滤波后的正交分量');


%% 装载波

% t = 1:length(upsample(x,8));

% y_c = cos(20*pi*t+angle(upsample(x,8)));

% figure('zaibo')

% stem(y_c,'.');


%% 加入awgn噪声

y = awgn(y,100);


%% 匹配滤波器

y = conv(y,filter);

figure(5)

subplot(211)

stem(real(y),'.');

title('匹配滤波后的同向分量');

subplot(212)

stem(imag(y),'r','.')

title('匹配滤波后的正交分量');


%% 采样

y = y(16:8:end-17);         %去掉前后16个点(由两次卷积导致的冗余)

scatterplot(y)

title('采样后星座图')

axis([-2,2,-2,2]);

line([-pi,0],[0,0]);

line([pi,0],[0,0]);

line([0,0],[0,pi]);

line([0,0],[0,-pi]);


%% 解调

y_s = zeros(2*length(y));   %设置长度为两倍y的空矩阵

for n=1:length(y)           %解调,根据星座图映射复原

if imag(y(n))>=0

y_s(2*n-1) = 0;

else

y_s(2*n-1) = 1;

end

if real(y(n))>=0

y_s(2*n) = 0;

else

y_s(2*n) = 1;

end

end


%% 对比

figure(7)

subplot(211)

stem(y_s,'.')

title('解调后的01信号');

subplot(212)

stem(xi,'blue','.')

title('原01信号');

图片是用代码仿真的图形,图1到图5是IQ信号产生的过程(由于图片占用空间大,有些图片删除),在这一个过程中,我们可以发现数字化的过程,如果波形发生恶化,通常发生在成型滤波的过程,往往这一步也决定了系统的EVM和邻道指标。在产生数字IQ信号后,还有个数字模拟化的过程,通常就是我们说的DAC过程。



图5、6和图7是解调的过程,也就是ADC的后处理过程,可以看到图4和图5的波形产生了失真,在发射转解调的过程中往往会有噪声的引入,这也是为甚对发射的EVM有很高的要求的原因。



QPSK的编解码过程能够让射频工程师更好的理解信号的传输链。

祝好!


来源:RF通信
通用科普
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-08-01
最近编辑:1年前
匹诺曹
签名征集中
获赞 6粉丝 33文章 90课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈