发布时间 : 星期一 文章8psk更新完毕开始阅读
3.3 8PSK 解调部分
采用双正交相干解调。这里有四个不周相位的本地载波,分别分0,π/2,-π/4,π/4,其频率与发送端载波一样。四个不同相位的载波分别与一个周期的已调信号作乘法运算,然后进行判决。具体判决方法是,把所乘结果的离散数据相累加,如果其和大于0,则相应判决码输出1,否则输出0。实际上,由于作乘法运算之后的离散也为一对称的正弦离散信号,故只需取出此信号内的最大值与最小值,进行相加并判断其正负即可,这样减少了运算量。
对应2,b2 对应于输入二进制序列的第一位,b1对应于输入二进制序列的第二位,b3和 b4则对应于第三位,第三位的取值是b3 b4求同或的值。
因此,程序首先生成四种相位的本地载波,然后对输入的已调信号的每一个周期内作乘法,再进行上述的判决。程序如下: rpsk=psk+sn; rs=[];
%加入加性高斯白噪声
%rs用来存放解调后的二进制序列
for m=1:150:50*length(g)-150; rpsk1=rpsk(m:m+149); sit=rpsk1.*cos(f*t); it=cumtrapz(sit)*dt; it=it(end); if it>0
%相关后得的I路电平 %对得到的电平进行判决
%取一个码元
rs=[rs ones(1,50)]; elseif it<0
rs=[rs zeros(1,50)]; end
sqt=rpsk1.*sin(f*t); qt=cumtrapz(sqt)*dt; qt=qt(end); if qt>0
%相关后得的Q路电平 %对得到的电平进行判决
rs=[rs ones(1,50)] ; elseif qt<0
rs=[rs zeros(1,50)];
10
end
sb3=rpsk1.*cos(f*t-pi/4); b3=cumtrapz(sb3)*dt; b3=b3(end);
sb4=rpsk1.*sin(f*t-pi/4); b4=cumtrapz(sb4)*dt; b4=b4(end); b5=abs(b3+b4); if b5<2
rs=[rs ones(1,50)] ; elseif b5>2
rs=[rs zeros(1,50)]; end
仿真结果如下图3.3和3.4所示:
%得到b3的电平并判决
图3.3 8PSK解调输出
11
图3.4 比较图形
3.4 高斯噪声和误码率
直接调用MATLAB的函数RANDN产生均值为0,方差为1的加性高斯随机噪声,误码统计中,对每一次加入噪声后解调输出的二进制序列与输入的二进制序列进行对比,计算解调后的误码数及其比率。程序如下:
EsNodb=2:0.5:12; %设置信噪比范围 Es=1;
No=10.^(-EsNodb/10); sigma=sqrt(No/2); %噪声功率,其值随信噪比而变 error=zeros(1,length(EsNodb)); %错误计数
sdata=zeros(1,length(EsNodb)); %进行比较判决抽样值的总的计数 for i=1:length(EsNodb) error(i)=0; sdata(i)=0;
while error(i)<1000 %误码数<1000
d=ceil(rand(1,10000)*8); %产生信源10000个,返回大于或者等于指定表达式的最小整数
12
s=sqrt(Es)*exp(j*2*pi/8*(d-1)); %复基带形式 r=s+sigma(i)*(randn(1,length(d))+j*randn(1,length(d))); for m = 1 : 8 rd(m,:) = abs(r-sqrt(Es)*exp(j*2*pi/8*(m-1))); %rd有m行,每行对应r与m的差值,8*10000的二维数组 end
for m=1:length(s)
dd(m)=find(rd(:,m)==min(rd(:,m))); %找到rd的m列中最小的值的行序号(与之相对的判决电平值), Y(m)即为接收到的m值,find()函数返回的是行号
if dd(m)~=d(m) %与发送的m相比,进行误码计数
error(i)=error(i)+1; end end
sdata(i)=sdata(i)+10000; end end
pe=error./sdata; %仿真得的误码率 figure(5);
semilogy(EsNodb,pe,'b*:');hold on; axis([2,12,10^(-2),10^0]); grid on
xlabel('Es/No(db)');ylabel('误码率'); legend('仿真结果');
仿真结果如下图3.5所示:
图3.5 误码率分析
13