ip_07_10.m

来自「matlab信道模型」· M 代码 · 共 65 行

M
65
字号
% 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 + =
减小字号Ctrl + -
显示快捷键?