%% ------------------------------------------------------------
% 软件无线电课程设计
%
% 方形、星形16QAM调制解调仿真
%
%%------------------------------------------------------------
%%主程序
clc
clear
%% 定义参数
fd=250*10^6; %码元速率250M
fs=2500*10^6; %滤波器采样率
fc=2500*10^6; %载波频率2.5G
f=10000*10^6; %对载波采样
data_len=200000; %数据长度
sym_len=data_len/4; %码元序列长度
M_QAM=16;%QAM数
k=log2(M_QAM);
SNR=1:12;%白噪声信噪比,
%% ------------------------------------------------------------
bit_tx=randint(1,data_len);%产生随机序列
echo off;
rec_qam16=QamMod(bit_tx,16); %方形16QAM调制
star_qam16=SrarQamMod(bit_tx); %星形16QAM调制
base_rec=base_shape(fd,fs,f,rec_qam16); %基带成型滤波
base_star=base_shape(fd,fs,f,star_qam16); %基带成型滤波
for i=1:length(SNR) %信噪比从1dB到12dB计算误码率
SNR_=i
%方形映射16QAM
rf_rec_qam16=CarrierMod(fc,f,base_rec); %载波调制
rf_rec_qam16_n=awgn(rf_rec_qam16,SNR(i),'measured'); %加噪声
[rec_qam16_rx base_rec_rx]=CarrierDemod(fd,fs,fc,f,rf_rec_qam16_n); %载波解调
bit_rec_rx=QamDemod(rec_qam16_rx,16); %MQAM解调
[num_qam16,perr_qam16_rec(i)]=biterr(bit_tx,bit_rec_rx);%误码率
qam16_data_rec(i,:)=rec_qam16_rx;
%scatterplot(rec_qam16_rx);
%星形映射16QAM
rf_star_qam16=CarrierMod(fc,f,base_star); %载波调制
rf_star_qam16_n=awgn(rf_star_qam16,SNR(i),'measured'); %加噪声
[star_qam16_rx base_star_rx]=CarrierDemod(fd,fs,fc,f,rf_star_qam16_n); %载波解调
bit_star_rx=StarQamDemod(star_qam16_rx); %MQAM解调
[num_qam16,perr_qam16_star(i)]=biterr(bit_tx,bit_star_rx);%误码率
qam16_data_star(i,:)=star_qam16_rx;
%scatterplot(star_qam16_rx);
end
%% 理论误码率计算
SNRtheo=0:0.1:length(SNR);
for i=1:length(SNRtheo)
SNRdec=10.^(SNRtheo(i)/10);
theo_perr_qam16(i)=(3/8)*erfc(sqrt(SNRdec*2/5));
end
%% 基带波形
N=200;
n=1:N;
t=1:N*10;
%发送端波形
figure;
stem(n,bit_tx(n)); title('发送序列'); %发送序列
figure('Name','发送端基带信号');
subplot(411);
plot(t,real(base_rec(t))); title('方形映射-Q路');
subplot(412);
plot(t,imag(base_rec(t))); title('方形映射-I路');
subplot(413);
plot(t,real(base_star(t))); title('星形映射-Q路');
subplot(414);
plot(t,imag(base_star(t))); title('星形映射-I路');
%接收端波形
figure;
subplot(211);
stem(n,bit_rec_rx(n)); title('方形接收序列');
subplot(212);
stem(n,bit_star_rx(n)); title('星形接收序列');
figure('Name','接收端基带信号');
subplot(411);
plot(t,real(base_rec_rx(t))); title('方形映射-Q路');
subplot(412);
plot(t,imag(base_rec_rx(t))); title('方形映射-I路');
subplot(413);
plot(t,real(base_star_rx(t))); title('星形映射-Q路');
subplot(414);
plot(t,imag(base_star_rx(t))); title('星形映射-I路');
%基带眼图
N1=20000;
Tn=f/fd;
eye_rex=base_rec(1:N1);
eyediagram(eye_rex,Tn*4,Tn); title('方形基带眼图');
eye_star=base_star(1:N1);
eyediagram(eye_star,Tn*4,Tn); title('星形基带眼图');
%% 接收端星座图
%scatterplot(qam16_data_rec(12,:));
figure('Name','方形16QAM接收端星座图');
for i=3:3:12
subplot(2,2,i/3);
plot(real(qam16_data_rec(i,:)),imag(qam16_data_rec(i,:)),'.');
xmax=5;axis([-xmax xmax -xmax xmax])
title(['Snr=',num2str(SNR(i)),' dB']);
end
figure('Name','星形16QAM接收端星座图');
for i=3:3:12
subplot(2,2,i/3);
plot(real(qam16_data_star(i,:)),imag(qam16_data_star(i,:)),'.');
xmax=3;axis([-xmax xmax -xmax xmax])
grid on; title(['Snr=',num2str(SNR(i)),' dB']);
end
%% 功率谱密度
f_plot;
%% 误码率分析
%16QAM误码率曲线
figure('Name','16QAM误码性能对比');
% semilogy(SNRtheo,theo_perr_qam16);
% hold on;
semilogy(SNR,perr_qam16_rec,'*');
hold on;
semilogy(SNR,perr_qam16_star,'o');
xlabel('SNR in dB');
ylabel('Prb of Err');
legend('方形16QAM','星形16QAM');
title('16QAM误码性能对比');
16QAM解调_高频载波解调
需积分: 19 138 浏览量
2018-07-26
20:22:26
上传
评论 2
收藏 5KB ZIP 举报
拦路雨g
- 粉丝: 725
- 资源: 24
最新资源
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
- C语言实现直接插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序、计数排序,并带图详解.zip
- 常用工具集参考用于图像等数据处理
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈