📄 de8psk.m
字号:
%该程序用来完成对输入信号进行8PSK解调,属于《链路级仿真软件设计》程序二的8PSK解调模块
function [llr]=de8psk(x,h,SNR_db)
%[llr]=de8psk(x)
%x是复向量,其中向量元素表示输入到解调器中的信号
%h为信道估值向量,是复向量,其中向量元素表示对应采样时刻的信道状态。
%SNR_db为信道噪比。
%llr为x通过解调器后的输出信号,是实向量,表示经过相关解调后的数据“似然比“信息。
%SNR_db为信道信噪比,信号功率为1,噪声功率为n_power
% |
% 4
% 3 | 2
% ----7--------1---
% 8 | 5
% 6
% |
%
%wdy
%编程日期:2006-7-7
%8psk符号对应的二进制比特数
const_8psk=3;
%以二进制比特数来表示所有8psk符号
binary_table=[0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1];
%计算8psk相应符号位0或1到相应符号位为1或0的符号的距离,所采用的表(三个比特位)
const_num=[1 2 3 4];
%计算1/2/3位比特时,相对于被解调星座位置的偏差(十进制表示)
const_num_1=[4 4 4 4;2 2 4 4;1 2 3 4];
const_num_0=[0 0 0 0;0 0 2 2;0 1 2 3];
%星座图表
constel_diagram=[sqrt(2),1+j,-1+j,sqrt(2)*j,1-j,-j*sqrt(2),-sqrt(2),-1-j]/sqrt(2);%[1 2 3 4 5 6 7 8]
%mapping=[1,sqrt(2)/2+sqrt(2)/2*j,-sqrt(2)/2+sqrt(2)/2*j,j,sqrt(2)/2-sqrt(2)/2*j,-j,-1,-sqrt(2)/2-sqrt(2)/2*j];
%SNR_db为信道信噪比,信号功率为1
SNR_linr=exp(SNR_db*log(10)/10);
%SNR_linr=exp(SNR*log(10)/10);
%噪声方差
%len为输入信号的长度
len=length(x);
h_square=abs(h).^2;
llr=zeros(1,const_8psk*len);
temp=[];
for k=1:2^const_8psk
temp=[temp,abs(x-constel_diagram(k)).^2];
end
for m=1:len
temp2=temp(m:len:2^const_8psk*len);
[y,z]=sort(temp2); %按列重新排列,选择距离最近的
binary_num=binary_table(const_8psk*(z(1)-1)+1:const_8psk*z(1));%输出相应的比特序列
for n=1:const_8psk
%计算第n位比特为1的星座图到被解调星座的最小距离
pad_num_1=const_num+const_num_1(n,:);
dist_square_1=min(abs(temp2(z(1))-temp2(pad_num_1)));
%计算第n位比特为0的星座图到被解调星座的最小距离
pad_num_0=const_num+const_num_0(n,:);
dist_square_0=min(abs(temp2(z(1))-temp2(pad_num_0)));
%得到释然比信息
llr(const_8psk*(m-1)+n)=h_square(m)*(dist_square_1-dist_square_0);
end
end
llr=llr*SNR_linr;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -