📄 ip_07_10.m
字号:
% MATLAB script for Illustrative Problem 10, Chapter 7.
% echo on
clear;
K=1024; N=2*K; Ts=25; T=N*Ts; variance=0.5;
noise=sqrt(variance)*randn(1,N);
a=rand(1,(K-1)*4); % k-1符号,1个保护间隔0
a=sign(a-0.5);
b=reshape(a,K-1,4);
% Generate the 16QAM points
XXX=2*b(:,1)+b(:,2)+j*(2*b(:,3)+b(:,4));
XX=XXX';
X=[0 XX 0 conj(XX(K-1:-1:1))];
%x=zeros(1,N);
%for n=0:N-1
% for k=0:N-1
% x(n+1)=x(n+1)+1/sqrt(N)*X(k+1)*exp(j*2*pi*n*k/N);
% end
%end
x=ifft(X,N)*sqrt(N);
% echo on
r=x+noise;
%Y=zeros(1,K);
%for k=0:K-1
% for n=0:N-1
% Y(k+1)=Y(k+1)+1/sqrt(N)*r(n+1)*exp(-j*2*pi*k*n/N);
% end
%end
Y=fft(r,N)/sqrt(N);
% echo on
% Detect the nearest neighbor in the 16QAM constellation
for k=0:K-1
if real(Y(k+1))>0
if real(Y(k+1))>2
Z(k+1)=3;
else
Z(k+1)=1;
end
else
if real(Y(k+1))<-2
Z(k+1)=-3;
else
Z(k+1)=-1;
end
end
if imag(Y(k+1))>0
if imag(Y(k+1))>2
Z(k+1)=Z(k+1)+3*j;
else
Z(k+1)=Z(k+1)+j;
end
else
if imag(Y(k+1))<-2
Z(k+1)=Z(k+1)-3*j;
else
Z(k+1)=Z(k+1)-j;
end
end
% echo off
end
% echo on
%error=max(size(find(Z(2:K)-X(2:K)))) % find:返回不等于0的序号 size:检测不等于0的序号的数目
%errrat=error/(K-1)
[errnum,errrat]=symerr(Z(2:K),X(2:K),'overall')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -