资源描述
MPSK的仿真分析
一、MPSK简介
在数字相位调制中,M进制信号波形可表示为:
smt=Regtej2πm-1Mej2πfct, m=1,2``````M
=gtcos2πfct+2πMm-1
=gtcos2πMm-1cos2πfct-gtsin2πMm-1sin2πfct (1)
式中,gt是信号脉冲形状,θ=2π(m-1)/M是载波的M个可能的相位,用于传送发送信息。
信息与承载信号之间存在的对应关系称为“映射”,不同的调制技术就在于它们所采用的映射方式不同。在MPSK中,M个信号对应的M中映射点均匀分布在0~2π的相位上。
MPSK信号可以用两个正交的载波信号实现相干解调。正交路和同相路分别设置两个相关器,得到I(t)和Q(t),经电平判决和并串转换即可恢复原始信息。
MPSK信号可等效为两个正交载波进行多电平双边带调幅所得已调波之和,因此其带宽与MASK信号带宽相同,理论上没有码间串扰的最大频谱效率为log2M (bit/s/Hz)。
二、仿真流程
I路
匹配滤波
匹配滤波
90°移相
同步载波
载波信号
I路
成型滤波
成型滤波
串并转换
相位映射
信号源
高斯信道
s(t)
Q路
并串转换
判决
Q路
三、仿真过程
1. 生成信号源
首先生成一串二进制随机序列,通过串并转换,分成k*N/k的序列,并转换成M进制序列。
2.建立符号与载波相位之间的映射关系
θ=2π(m-1)/M是载波的M个可能的相位,用于映射M个符号,以8PSK为例, (0, π/4,π/2, 3π/4, π, 5π/4, 3π/2,7π/4)共8个相位分别映射了0~7八个符号,其8个星座点分布在复平面的单位圆上。下图是pt=ej2πm-1M得到的8个相位点。
3.分成两路正交信号
将映射后的信号分别投影到两坐标轴上,形成两路相互正交的信号,记为I路和Q路。
4.成型滤波
若是在此处直接加载波,会造成信号的突变,带宽无穷大。信号在经过带限信号后,码间干扰会非常严重。为了解决这一问题,可以使用一种平滑的成型滤波器,使其不仅可以较为平滑,而且其拖尾在其他码元的位置拖尾为0,这样就可以有效解决码间干扰。此处使用的一种滤波器就是升余弦滤波器。
过采样的数字信号处理起来对低通滤波器的要求相对较低,如果不过采样,滤波的时候滤波器需要很陡峭,指标会很严格。
5.加载波
将I/Q两路信号合并,并调到载频上。
可以进一步得到MPSK频谱(8PSK)。
6.通过高斯信道
7.做相干
将接收信号分别与两路同步相干载波相乘,然后通过一个积分器,便可以得到解调后的I/Q路信号。
8.匹配滤波
在AWGN信道中,最佳匹配滤波器的系统函数是成型滤波器的共轭匹配。时域呈现出倒置关系。
9.抽样判决
匹配滤波之后,经过抽样即可得到原始信号。
I/Q两路信号经过相位信息判决,通过符号映射关系得到传输符号,然后通过并串转换得到原始bit信号。
四、仿真代码
clear all;
close all;
M=8;
k=log2(M);
% t=0:2*pi/99:2*pi;
N=300; %要传输的bit数
Ts=0.01;
fs=1/Ts;
Tsym =2; %每个码元持续时间
t = 0:Ts:Tsym;
L=length(t);
T=L*N/k;
fc = 0.5; %载波频率
f1 = exp(j*fc*t*2*pi); %载波
c1=cos(fc*t*2*pi); %I路载波
c2=sin(fc*t*2*pi); %Q路载波
SNR=8; %信噪比
x_bit = randint(N,1); %生成二进制随机信号
%转换
x_symbol = bi2de(reshape(x_bit,k,length(x_bit)/k).','left-msb'); %binary to decimal,串并转换
figure(1);
stem(x_symbol);
title('串并转换后得到的M进制符号');
%生成M组映射关系,分成2π/M个相位
for i=1:M
pt(i) = exp(j*2*pi*(i-1)/M);
end
mapping=0:M-1;
y=[];
xm=[];
for i=1:length(x_symbol)
for m=1:M
if(x_symbol(i) == mapping(m))
x_mapping(i) = pt(m);
ts(i)=m-1;
else
end
end
tx = x_mapping(i).* f1;
y=[y tx];
xm=[xm x_mapping(i)]; %每个符号对应的相位
end
I=real(xm); %I路符号
Q=imag(xm); %Q路符号
figure(2);
subplot(211);
stem(I);title('I路信号');
subplot(212)
stem(Q);title('Q路信号');
xm2=[];
%过采样的数字信号处理起来对低通滤波器的要求相对较低,如果不过采样,滤波的时候滤波器需要很陡峭,指标会很严格
%滤波器参数
oversampling_rate = 4; %过采样率
filtorder = 24;
delay = filtorder/(oversampling_rate * 2);
rolloff = 0.5;
filter=rcosine(1,oversampling_rate,'fir/sqrt',rolloff,delay);%升余弦滚降滤波器
figure(3);
stem(filter);title('升余弦滚降滤波器');
%经过一个滚降升余弦滤波器,成型滤波
I2=rcosflt(I,1,oversampling_rate,'filter',filter);
Q2=rcosflt(Q,1,oversampling_rate,'filter',filter);
%加载波
figure(4);
subplot(211);
plot(I2);title('I路信号成型滤波后');
subplot(212)
plot(Q2);title('Q路信号成型滤波后');
%加载波
for i =1:length(I2)
yy = (I2(i)+j*Q2(i))*f1;
xm2=[xm2 yy];
end
s = real(xm2);
figure(5);
plot(s);
title('已调信号波形');
%MPSK的频谱
figure(6);
N1=length(s);
ff=[0:N1-1]*fs/N1;
ff=ff(1:N1/2);
y_s=fft(real(s));
y_s=abs(y_s(1:(N1/2)));
plot(ff,y_s);
title('MPSK频谱');
%加噪
ynoise=awgn(s,SNR,'measured');
figure(7);
plot(ynoise);
title('通过高斯信道后信号波形');
L1=N/k*oversampling_rate+2*delay*oversampling_rate;%过采样后的点数
for i=1:L1
%乘以I/Q相干载波,提取I/Q两路信号
I_dem(i)=2*mean(ynoise(((i-1)*L+1):i*L).*c1);
Q_dem(i)=2*mean(ynoise(((i-1)*L+1):i*L).*c2);
end
figure(8);
subplot(211);
plot(I_dem);title('I路解调信号');
subplot(212)
plot(Q_dem);title('Q路解调信号');
%信号经过低通滤波器(匹配滤波器)
I_mat=rcosflt(I_dem,1,oversampling_rate,'Fs/filter',filter);
I_sel=downsample(I_mat,oversampling_rate);%通过下采样抽样提取出来原数据
I_sel=I_sel(2*delay+1:end-2*delay);
Q_mat=rcosflt(Q_dem,1,oversampling_rate,'Fs/filter',filter);
Q_sel=downsample(Q_mat,oversampling_rate);%通过下采样抽样提取出来原数据
Q_sel=Q_sel(2*delay+1:end-2*delay);
figure(9);
subplot(211);
stem(I_sel);title('Isel');
subplot(212)
stem(Q_sel);title('Qsel');
%判决
z_symbol1=[];
for i=1:N/k
%由I/Q信号得到相位
c(i) = acos(I_sel(i));
if(Q_sel(i)>0)
c(i)=-c(i);
else
end
if(c(i)<-pi/M)
c(i)=c(i)+2*pi;
else
end
%进行判决,得出对应符号
for m=1:M
if((c(i)>=(2*pi*(m-1)/M-pi/M)) && (c(i)<(2*pi*(m-1)/M+pi/M)))
z_symbol=mapping(m);
z_symbol1=[z_symbol1 z_symbol];
else
end
end
end
z_bit=de2bi(z_symbol1,'left-msb');
z_bit=reshape(z_bit.',numel(z_bit),1);%恢复成bit信息
figure(10);
subplot(2,1,1);
stem(x_bit,'filled');
title('随机二进制信号源');
subplot(2,1,2);
stem(z_bit,'filled');
title('解调信号');
[number_of_errors,bit_error_rate]=biterr(x_bit,z_bit)%错误bit数,及误bit率
展开阅读全文