clc
clear ;
close all;
M=16;%mqam的进制数
mqam_count =400;
snr=13; %信噪比
%-------------------------------------&
bit_per_symbol=log2(M); % 每个符号占的比特等于4
bit_length = mqam_count*bit_per_symbol; %所有符号加起来占的比特数量= 4x400
bit_signal = round(rand(1,bit_length))'; %生成一个1600x1的包含 1,0 的矩阵
figure(1);plot(bit_signal);
axis([0 100 -1 2]); %这里是限定横轴是从0-100, 纵轴是从-1到2
title('发射码元')
xlabel('第几bit'); ylabel('二进制值');
bit_moded1 = qammod(bit_signal,M,'InputType','bit'); %输出使用正交幅度调制消息信号X的复包络。
%M是字母表大小,必须是2的整数幂,表示调制阶数。消息信号X必须由0到M-1之间的整数组成。X可以是标量、矢量、矩阵或三维数组。
figure(2)
scatter(real(bit_moded1),imag(bit_moded1),'*g');
title('调制后的星座图');
%-------------------------------------%
signal_time_C_W_R=awgn(real(bit_moded1),snr); %在信号中加入高斯白噪声
signal_time_C_W_i=awgn(imag(bit_moded1),snr);
signal_time_C_W=complex(signal_time_C_W_R,signal_time_C_W_i);
figure(3)
scatter(1.5*real(signal_time_C_W),1.5*imag(signal_time_C_W),'.g');
title('接收的星座图');
%-------------------------------------%
eyediagram(bit_moded1,2)
title('眼图');
eyediagram(signal_time_C_W,2)
title('眼图');
%-------------------------------------%
snr_qq=0;
qq=zeros(150,1);
for i=0:149
bit_moded_qq = qammod(bit_signal,M,'InputType','bit');
snr_qq=snr_qq+0.1;
signal_time_C_W_R=awgn(real(bit_moded_qq),snr_qq);
signal_time_C_W_i=awgn(imag(bit_moded_qq),snr_qq);
signal_time_C_W=complex(signal_time_C_W_R,signal_time_C_W_i);
bit_demod_sig=qamdemod(signal_time_C_W,M,'OutputType','bit');
error_bit = sum(bit_demod_sig~=bit_signal);
error_rate = error_bit/length(bit_signal);
qq(i+1)=error_rate;
end
figure;plot(bit_demod_sig);
axis([0 100 -1 2]); %这里是限定横轴是从0-100, 纵轴是从-1到2
title('接收')
xlabel('第几bit'); ylabel('二进制值');
%功率谱
Ns=32; %每码元的采样点数
Ts=2; %ms
T=M*Ts;
dt=Ts/Ns;
t=[-T/2:dt:T/2-dt];
[f1,tmp1]=t2f(t,bit_signal);
[f2,tmp2]=t2f(t,bit_demod_sig);
Tmp1=10*log10(tmp1);
Tmp2=10*log10(tmp2);
Tmp1=abs(Tmp1).^2;
Tmp2=abs(Tmp2).^2;
figure
subplot(2,1,1)
plot(f1,Tmp1)
title('发射时功率谱');
% axis([-2,2,-50,20])
subplot(2,1,2)
plot(f2,Tmp2)
title('接收时功率谱');
figure
plot(0:0.1:14.9,qq)
title('误码率曲线16qam');
%-----------------------------------%
fs = 1000;
sps = 32;
txfilter = comm.RaisedCosineTransmitFilter('OutputSamplesPerSymbol',sps);
ed = comm.EyeDiagram('SampleRate',fs*sps,'SamplesPerSymbol',sps);
txSig = txfilter(signal_time_C_W);
ed(txSig)