数字调制解调——QAM调制

QAM调制(Quadrature Amplitude Modulation,正交振幅调制)是一种数字调制技术,通过调整调制信号的振幅和相位来携带数字信息。它基于两个正交的调制信号(I信号和Q信号),将数字信息转换为调制信号的振幅和相位。

通俗来讲,在信号中,所谓的正交是指两个两个信号相差90°,那么在QAM中即存在相位的调制,也是存在着振幅的调制。

QAM调制的原理可以分为两个主要步骤:符号映射和载波调制。

符号映射:
在符号映射阶段,数字信息被分成多个符号,每个符号代表一个特定的振幅和相位组合。常见的QAM调制包括16-QAM、64-QAM和256-QAM等,它们分别使用16、64和256个不同的符号来表示数字信息。

QAM调制将数字信息映射到不同的调制符号,其中M表示QAM调制的阶数(符号数),通常为2的幂次方。

举个例子来具体说明一下吧,对于一个2bit的数,它每一个bit位数有两种情况(0,1),也就是说这个2bit 的数可以是00、01、10、11四种情况,那么这四种情况代表了4bit的信息,推导一下,4bit的数所包含的信息是2^4
个,对于Mbit的数呢,它所包含的信息是2^M个,所以比特位越多,所能传输的信息量就越大。回到我们的QAM调制中,数字16表示调制的阶数或调制符号的数量。
每个二进制位可以表示2个不同的状态(0或1),因此4位二进制可以表示2^4 = 16个不同的组合。这样,每个4位二进制序列可以对应一个唯一的调制符号。也就是需要一组4位的二进制数来表示。 所以从理论上来说,m-QAM中的m越大,所能传输的信息量就越大,传输速率也就越快。
QAM信号生成框图
QAM的解调框图

接下来给出16-QAM调制的MATLAB代码:

%%%%%**** 16-QAM调制   ****%%%%%
%%%%%**** data:20230626   ****%%%%%

clear all;
clc;
close all;

N=1000;    %设定码元数量
fb=1;      %基带信号频率
fs=16;     %抽样频率
fc=4;      %载波频率,为便于观察已调信号,把载波频率设得较低

msg=randi([0 1],1,N);   %产生二进制信号序列

%%%%%%%%串并转换%%%%%%%%
I_bit = msg(1:2:length(msg));    %% N/2 个比特
Q_bit = msg(2:2:length(msg));    %% N/2 个比特

T=[0 1;3 2];
for i=1:2:length(I_bit)
    I_bit2=I_bit(i:i+1)+1;
    ISymbol((i+1)/2)=T(I_bit2(1),I_bit2(2))-1.5;
    Q_bit2=Q_bit(i:i+1)+1;
    QSymbol((i+1)/2)=T(Q_bit2(1),Q_bit2(2))-1.5;   
end

figure(1);
subplot(2,1,1);
stem(ISymbol);title('I路符号');
subplot(2,1,2);
stem(QSymbol);title('Q路符号');

%对基带信号进行16QAM调制,fb=1;I路和Q路的符号速率分别为1/4,而fs=32,因此
% 过采样率为32X4=128,所以最后产生的数据有N/4X128个

OverSamp=fs/(fb/4);     %过采样率=32/(1/2)=64
span=3;                %表示滚降系数的时间范围
alpha=0.5;              %滚降系统; B=1000/2*(1+0.5)=750Hz
h = rcosdesign(alpha,span,OverSamp,'sqrt');   %成型滤波器设计
ISymbol_OverSample= kron(ISymbol,[1 zeros(1,OverSamp-1)]);
QSymbol_OverSample= kron(QSymbol,[1 zeros(1,OverSamp-1)]);


% ISymbol_OverSample=upsample(I_bit,32);
% QSymbol_OverSample=upsample(Q_bit,32);

SendShape_I = filter(h,1,ISymbol_OverSample);   %I路滤波
SendShape_Q = filter(h,1,QSymbol_OverSample);   %Q路滤波

figure

freqz(h);
subplot(2,1,1);
plot(SendShape_I); title('脉冲成型后的I路波形');
subplot(2,1,2);
plot(SendShape_Q); title('脉冲成型后的Q路波形');


N=0:length(SendShape_I)-1;

QamSignal=SendShape_I.*cos(2*pi*fc*N/fs)-SendShape_Q.*sin(2*pi*fc*N/fs);
 
figure;
plot(abs(fft(QamSignal))); title('QAM信号的频谱');

%%%%%%%%%%% 解调  %%%%%%%%%%%%
DemodeWave_I = QamSignal.*cos(2*pi*fc*N/fs);
DemodeWave_Q = QamSignal.*sin(2*pi*fc*N/fs);

figure;
subplot(2,2,1);plot(DemodeWave_I);title('解调后的I路时域波形');
subplot(2,2,2);plot(abs(fft(DemodeWave_I)));title('解调后的I路频域波形');
subplot(2,2,3);plot(DemodeWave_Q);title('解调后的Q路时域波形');
subplot(2,2,4);plot(abs(fft(DemodeWave_Q)));title('解调后的Q路频域波形');


%%%%%%%%%%  匹配滤波接收  %%%%%%%%%%%%
RcvMatch_I = filter(h,1,SendShape_I);
RcvMatch_Q = filter(h,1,SendShape_Q);

figure;
subplot(2,1,1); plot(RcvMatch_I);
title('匹配滤波后的I路');
subplot(2,1,2); plot(RcvMatch_Q);
title('匹配滤波后的Q路');

%%%%%%%%%%    抽样判决   %%%%%%%%%%%%
%%%% 符号抽样  %%%%
SymPosi=1:OverSamp:length(RcvMatch_I)-1;
RcvI=RcvMatch_I(SymPosi);
RcvQ=RcvMatch_Q(SymPosi);

figure;
subplot(2,1,1);stem(RcvI);
title('I路抽样判决后的符号');
subplot(2,1,2);stem(RcvQ);
title('Q路抽样判决后的符号');

%%%%%% 4电平到2比特的映射  %%%%%%
%%%先把 +-0.5,+-1.5转换为0,1,2,3.然后再转换为00,01,11,10%%%%
%%%映射规则:-1.5-->00;0.5-->10; 0.5-->11; -0.5-->10%%%

I0=find(RcvI<-1);
YoutI(I0) = 0;
I1=find(-1<RcvI&RcvI<0);
YoutI(I1) = 1;
I2=find(0<RcvI&RcvI<1);
YoutI(I2) = 3;
I3=find(RcvI>1);
YoutI(I3) = 2;

Q0=find(RcvQ<-1);
YoutQ(Q0) = 0;
Q1=find(-1<RcvQ&RcvQ<0);
YoutQ(Q1) = 1;
Q2=find(0<RcvQ&RcvQ<1);
YoutQ(Q2) = 3;
Q3=find(RcvQ>1);
YoutQ(Q3) = 2;

% 一位四进制码元转换为两位二进制码元
for i=1:length(msg)/4
    YoutIbit(2*i-1:2*i) = de2bi(YoutI(i),'left-msb',2);
    YoutQbit(2*i-1:2*i) = de2bi(YoutQ(i),'left-msb',2);
end

YoutIQ = [YoutIbit;YoutQbit];
Yout = YoutIQ(:)';

figure;
subplot(2,1,1);
plot(msg);title('原始信号时域图');
subplot(2,1,2);
plot(Yout);title('最终信号时域图');
errorbit = sum(abs(Yout-msg))
  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值