通信人家园
标题:
matlab实现QPSK信号的产生与调制
[查看完整版帖子]
[打印本页]
时间:
2024-5-15 19:23
作者:
坡哥
标题:
matlab实现QPSK信号的产生与调制
# 代码
```html
clc;
close all;
clear;
%% 参数设置
M=4; % 调制的符号数
K=log2(M); % 每个符号的比特数
Syml=10000; % 生成的符号个数
sampsPerSym=6; % 上采样率
%% 生成信号
x=randi([0,1],1,Syml);
I=x(1:2:end);
Q=x(2:2:end);
L=length(I);
data=zeros(L,1);
% 00:++,01:-+,11:--,10:+-
% 星座映射
for k=1
if (I(k)==0 && Q(k)==0)
data(k)=sqrt(2)/2 + sqrt(2)/2*1i;
elseif (I(k)==0 && Q(k)==1)
data(k)=-sqrt(2)/2 + sqrt(2)/2*1i;
elseif (I(k)==1 && Q(k)==0)
data(k)=sqrt(2)/2 - sqrt(2)/2*1i;
elseif (I(k)==1 && Q(k)==1)
data(k)=-sqrt(2)/2 - sqrt(2)/2*1i;
end
end
%% 构造升余弦函数
beta=0.35; % 滚降因子,取值0-1之间,一般大于0.2,且越大越陡峭
span=20; % 截断个数,也就是取多少个Tb的波形作为滤波器,左右对称。
sps=4; % 每个Tb周期的采样个数
shape='sqrt'; % 默认取值:'normal'就是正常的升余弦滚降滤波器,也可取值:'sqrt',平方根升余弦滤波器
filter=rcosdesign(beta,span,sps,shape); % 个数=span*sps+1,因为0点位置也有个值,其他的两边对称各span*sps/2个
filter=filter/max(filter); % 最大值归一化到1
Upsample_Phase=0; % 上采样偏移的样本数,在上采样后的样本前+Upsample_Phase个零
% y = upsample(x,n,phase);通过在样本之间插入 n – 1 个零来增加 x 的采样率,phase:指定上采样序列偏移的样本数。
upsample_data=upsample(data,sampsPerSym,Upsample_Phase);
base=conv(filter,upsample_data);% 滤波器与上采样序列卷积
index_start=sampsPerSym*span/2+1;% 舍弃掉滤波器前半段与data序列的卷积
index_end=length(base)-sampsPerSym*span/2; % 舍弃掉滤波器后半段与data序列的卷积
base=base(index_start:index_end);
fre_off=0.01; % 频偏
phase_off=0.1;% 相偏
% n=(0:length(base)-1)';
fc=10000;% 1M 调制到高频载波上f=10000
x=base.*exp(1i*2*pi*fc*(fre_off+phase_off));% 调制时可能会产生频偏和相偏
%% 高斯白噪声信道
SNR=15; %SNR:信噪比,单位dB
base_awgn=awgn(x,SNR,'measured'); % 在信号x中加入高斯白噪声,SIGPOWER为‘measured’,则在加入噪声之前测定信号的强度
scatterplot(base_awgn(1:sampsPerSym:end));% 下采样
title("QPSK信号的星座图");
```
# 补充内容:
## IQ调制
IQ调制就是数据分为两路,分别进行载波调制,两路载波相互正交,频率相同。
- I:in-phase(同相), q: quadrature(正交) 。
- IQ调制是矢量的方向问题,同相就是矢量方向相同的信号;正交分量就是两个信号矢量正交(差90°);
- IQ信号是一路是0°或180°,另一路是90°或270°,叫做I路和Q路,它们就是两路正交的信号 。
- 正交信号就是两路频率相同,相位相差90度的载波,一般用sin和cos,与I,Q两路信号分别调制后一起发射,从而提高频谱利用率。
时间:
2024-5-16 08:41
作者:
nosscoco
这个真就牛了。
通信人家园 (https://www.txrjy.com/)
Powered by C114