clear;
close all;
clc;
snr=input('请你输入信号经信道时的信噪比snr(以dBW为单位):');
N=128;%N为载波数,即一个OFDM符号的长度
%----------------------------发射部分----------------------------
for k=1:N
X(k)=fix(rand()*16);%随机产生64个[0,15]之间的整数
X1(k)=QAM16_mod(X(k));%进行星座图映射,X 可以认为是已经进行串/并转换后的输出信号
end
disp('原输入的数据为:')
disp(X)
figure(1)
plot(real(X1),imag(X1),'.r');
title('随机输入数据的星座图');
xlabel('An(实部)');
ylabel('Bn(虚部)');
X2=ifft(X1,N);%对X进行傅里叶反变换
X3=[X2((N-0.25*N+1):N),X2];%在该OFDM符号中加入循环前缀
X4=awgn(X3,snr);%接收机最终接收的信号
figure(2)
subplot(2,2,1)
plot(1:numel(X3),real(X3),'r');
title('加入噪声前的信号波形(实部部分)');
subplot(2,2,3)
plot(1:numel(X4),real(X4),'r');
title('加入噪声后的信号波形(实部部分)');
subplot(2,2,2)
plot(1:numel(X3),imag(X3),'b');
title('加入噪声前的信号波形(虚部部分)');
subplot(2,2,4)
plot(1:numel(X4),imag(X4),'b');
title('加入噪声后的信号波形(虚部部分)');
%------------------------------接收部分------------------------------
Y1=X4(0.25*N+1:N+0.25*N);
Y2=fft(Y1,N);
figure(3)
plot(real(X1),imag(X1),'.r',real(Y2),imag(Y2),'.b');
title('接收的OFDM符号的星座图')
xlabel('An(实部)');
ylabel('Bn(虚部)');
for k=1:numel(Y1)
[Y(k),Y3(k)]=QAM16_demod(Y2(k));
end
disp('接收机最终得到的数据为:')
disp(Y)
error=0;%解调后错误的个数
for k=1:N
if X(k)~=Y(k)
error=error+1;
end
end
disp('解调后错误的个数为:')
disp(error)
disp('误码率为:')
disp(error/N)