%例程7-19 QPSK调制与解调
function modsymbols=qpsk(moduinput)
inputbits=moduinput;
full_len=length(inputbits);
table=exp(j*[-3/4*pi 3/4*pi 1/4*pi -1/4*pi]); % 生成QPSK星座图
table=table([0 1 3 2]+1);
inmodu=reshape(inputbits,2,full_len/2); % 把输入序列分成两路
modsymbols=table([2 1]*inmodu+1); % 实现输入比特流的QPSK映射
%利用距离矢量判决解调QPSK的过程也可以由MATLAB程序说明如下:
function output_bits = deqpsk(input_symbols)
input=input_symbols;
d=zeros(4,length(input)); % d是信道传输值与各星座点的距离
m=zeros(1,length(input));
temp=[-1-j -1+j 1-j 1+j]/sqrt(2); % 对应 00 01 10 11
for i=1:length(input)
for n=1:4
d(n,i)=(abs(input(i)*sqrt(2)-temp(n))).^2; %求出传输值与星座图所有点的“距离”
end
[min_distance,constellation_point] = min(d(:,i));
m(i) = constellation_point;
end
A=de2bi([0:3],'left-msb'); %对应于 A=[0 0;0 1;1 0;1 1]
for i=1:length(input)
out(i,:)=A(m(i),:); % 最小值对应的星座点序号的二进制
end % 表示即为解调结果
output_bits=reshape(out',1,length(input)*2);