clc;
clear;
close all;
%信号参数
M = 4; %码元符号表示的进制数
k = log2(M); %码元符号表示的信息量(bit)
n = 2048; %要处理的比特流数量
sym = n/k; %码元数;符号率
Rb = 1e6; %比特率
Rs = Rb/k; %码元速率
Fs = 32e6; %采样速率
Ts = 1/Fs; %采样时间间隔
fc = 1e6; %载波
% 整形滤波参数
beta = 0.25;
span = 10;
rrc_sps = 4;
rrcfilter = rcosdesign(beta,span,rrc_sps);
% 中频上采样
if_sps = 4;
lpfilt = designfilt('lowpassfir', 'PassbandFrequency', .25, 'StopbandFrequency', .40, 'PassbandRipple', 0.5, 'StopbandAttenuation', 65, 'DesignMethod', 'kaiserwin');
%产生信源
data = randi([0 1],1,n);
data1 = 2*data-1; %generate NRZ
data_1 = data1(1:2:end);
data_2 = data1(2:2:end);
msg = ones(size(data_1));
for i = 1:length(data_1)
if(data_1(i) == 1 && data_2(i) == 1)
msg(i) =3;
end
if(data_1(i) == -1 && data_2(i) == 1)
msg(i) =1;
end
if(data_1(i) == -1 && data_2(i) == -1)
msg(i) = 0;
end
if(data_1(i) == 1 && data_2(i)== -1)
msg(i) =2;
end
end
data_modull = complex(data_1 ,data_2);
% 成形滤波
bb_data = upfirdn(data_modull,rrcfilter,rrc_sps);
%scatterplot(bb_data);
%调制
%t = linspace(0,Ts*(length(bb_data)-1));
t = (0:Ts:Ts*(length(bb_data)-1));
si = sin(2 * pi * fc * t);
sq = cos(2 * pi * fc * t);
si_data = si.* bb_data;
sq_data = sq.* bb_data;
%上采样
resi_data = resample(si_data,if_sps,1);
firresi_data = filter(lpfilt,resi_data);
resq_data = resample(sq_data,if_sps,1);
firresq_data = filter(lpfilt,resq_data);
%随意加的热噪声
s_data = firresi_data + firresq_data;
r_bb_data = s_data + randn(size(s_data)) * 0.01;
% s_data = si_data + sq_data;
% r_bb_data = s_data + randn(size(s_data)) * 0.01;
%下采样
res_data1 = resample(r_bb_data,1,if_sps);
firres_data1 = filter(lpfilt,res_data1);
%解调
t = linspace(0,Ts*(length(firres_data1)-1));
t = (0:Ts:Ts*(length(firres_data1)-1));
si1 = sin(2 * pi * fc * t);
sq1 = cos(2 * pi * fc * t);
r_si_data = si1.* firres_data1;
r_sq_data = sq1.* firres_data1;
r_data = r_si_data + r_sq_data;
% t = (0:Ts:Ts*(length(r_bb_data)-1));
% si1 = sin(2 * pi * fc * t);
% sq1 = cos(2 * pi * fc * t);
% r_si_data = si1.* r_bb_data;
% r_sq_data = sq1.* r_bb_data;
% r_data = r_sq_data + r_sq_data;
% 匹配滤波
bb_rx_data = upfirdn(r_data,rrcfilter,1,rrc_sps);
scatterplot(bb_rx_data),title('匹配滤波后星座图');
rx_data = qamdemod(bb_rx_data,4);
%计算误比特数
err=length(find(msg~=rx_data(1,sym)));%计算解调信号中错误码元个数
BER_test=err/(sym);%计算误码率
%画图
figure()
subplot(211)
stairs(data_1,'r--o');
hold on
stairs(data_2,'b-');
legend('data_1','data_2');
axis([0 130 -2 2]);
subplot(212)
stairs(rx_data);
axis([0 130 -1 4]);
title('bit信息');
%
%scatterplot(data_modull),title('未处理信息的星座图');
%axis([-2 2 -2 2]);
N = length(r_bb_data);
n = -1*N/2:1:N/2-1;
f = Fs/N*(n-1);
qpsk = 10*log10(abs(fftshift(fft(r_bb_data))).^2)-max(10*log10(abs(fftshift(fft(r_bb_data))).^2));
figure(),
plot(f,qpsk),title('信道中信号');
xlabel('frequency'), ylabel('amplitude');