clear;clc;echo off;close all;
N=512; %设定码元数量
fb=2; %基带信号频率
fs=32; %抽样频率
fc=4; %载波频率,为便于观察已调信号,我们把载波频率设的较低
Kbase=2; % Kbase=1,不经基带成形滤波,直接调制;
% Kbase=2,基带经成形滤波器滤波后,再进行调制
info=random_binary(N); %产生二进制信号序列
[y,I,Q]=qam(info,Kbase,fs,fb,fc); %对基带信号进行16QAM调制
y2=y;y1=y; %备份信号,供后续仿真用
T=length(info)/fb;
m=fs/fb;
nn=length(info);
dt=1/fs;
t=0:dt:T-dt;
plot(t(1:1000),y(1:1000),t(1:1000),I(1:1000),t(1:1000),Q(1:1000),[0,35],[0,0],'b');
title('已调信号');
% figure(3)
% plot(y);grid;
% axis([0,100,-3,3]);
% title('原信号时域波形');
% y=awgn(y2,-10);
% figure(4)
% plot(y);grid;
% axis([0,100,-10,10]);
% title('加入噪声的信号时域波形');
n=length(y);
y=fft(y)/n;
y=abs(y(1:fix(n/2)))*2;
q=find(y<1e-04);
y(q)=1e-04;
y=20*log10(y);
f1=m/n;
f=0:f1:(length(y)-1)*f1;
figure;
plot(f,y,'r');
grid on;
title('已调信号频谱');
xlabel('f/fb');
constel(y1,fs,fb,fc);
title('星座图');
SNR_in_dB=-10:1:0; %AWGN信道信噪比
for j=1:length(SNR_in_dB)
y_add_noise=awgn(y2,SNR_in_dB(j)); %加入不同强度的高斯白噪声
y_output=qamdet(y_add_noise,fs,fb,fc); %对已调信号进行解调
numoferr=0;
for i=1:N
if (y_output(i)~=info(i))
numoferr=numoferr+1;
end
end
Pe(j)=numoferr/N; %统计误码率
end
figure;
semilogy(SNR_in_dB,Pe,'red*-');
grid on;
xlabel('SNR in dB');
ylabel('Pe');
title('16QAM调制误码率');
figure;
plot(t(1:1000),y_add_noise(1:1000));
title('已调信号加噪声信号');
figure;
% plot(t(1:512),y_output(1:512));
stairs(y_output);
axis([1 100 -1 3]);
grid on
title('解调信号');
%基带升余弦成形滤波器
function y=bshape(x,fs,fb,N,alfa,delay)
%设置默认参数
if nargin<6
delay=8;
end
if nargin<5
alfa=0.5;
end
if nargin<4
N=16;
end
b=firrcos(N,fb,2*alfa*fb,fs);
y=filter(b,1,x);
end
function xn=four2two(yn)
y=yn; ymin=min(y); ymax=max(y); ymax=max([ymax abs(ymin)]);
ymin=-abs(ymax); yn=(y-ymin)*3/(ymax-ymin);
%设置门限电平,判决
I0=find(yn< 0.5);
yn(I0)=zeros(size(I0));
I1=find(yn>=0.5 & yn<1.5);
yn(I1)=ones(size(I1));
I2=find(yn>=1.5 & yn<2.5);
yn(I2)=ones(size(I2))*2;
I3=find(yn>=2.5);
yn(I3)=ones(size(I3))*3;
%一位四进制码元转换为两位二进制码元
T=[0 0;0 1;1 1;1 0];
n=length(yn);
for i=1:n
xn(i,:)=T(yn(i)+1,:);
end
xn=xn';
xn=xn(:);
xn=xn';
end
%二进制转换成四进制
function [y,yn]=two2four(x,m)
T=[0 1;3 2];
n=length(x);
ii=1;
for i=1:2:n-1
xi=x(i:i+1)+1;
yn(ii)=T(xi(1),xi(2));
ii=ii+1;
end
yn=yn-1.5;
y=yn;
for i=1:m-1
y=[y;yn];
end
y=y(:)'; %映射电平分别为-1.5;0.5;0.5;1.5
end
function [info]=random_binary(N)
if nargin == 0 %如果没有输入参数,则指定信息序列为10000个码元
N=10000;
end
for i=1:N
temp=rand;
if (temp<0.5)
info(i)=0; % 1/2的概率输出为0
else
info(i)=1; % 1/2的概率输出为1
end
end
end
%QAM信号解调
function [xn,x]=qamdet(y,fs,fb,fc)
dt=1/fs; t=0:dt:(length(y)-1)*dt;
I=y.*cos(2*pi*fc*t);
Q=-y.*sin(2*pi*fc*t);
[b,a]=butter(2,2*fb/fs); %设计巴特沃斯滤波器
I=filtfilt(b,a,I);
Q=filtfilt(b,a,Q);
m=4*fs/fb;
N=length(y)/m;
n=(.6:1:N)*m;
n=fix(n);
In=I(n);
Qn=Q(n);
xn=four2two([In Qn]);
%I分量Q分量并/串转换,最终恢复成码元序列xn
nn=length(xn);
xn=[xn(1:nn/2);xn(nn/2+1:nn)];
xn=xn(:);
xn=xn';
end
function [y,I,Q]=qam(x,Kbase,fs,fb,fc)
T=length(x)/fb;
m=fs/fb;
nn=length(x);
dt=1/fs;
t=0:dt:T-dt;
%串/并变换分离出I分量、Q分量,然后再分别进行电平映射
I=x(1:2:nn-1);
[I,In]=two2four(I,4*m);
Q=x(2:2:nn);
[Q,Qn]=two2four(Q,4*m);
if Kbase==2 %基带成形滤波
I=bshape(I,fs,fb/4);
Q=bshape(Q,fs,fb/4);
end
y=I.*cos(2*pi*fc*t)-Q.*sin(2*pi*fc*t);
end
function c=constel(x,fs,fb,fc)
N=length(x);
m=2*fs/fb;
n=fs/fc;
i1=m-n;
i=1;
ph0=(i1-1)*2*pi/n;
while i<=N/m
xi=x(i1:i1+n-1);
y=2*fft(xi)/n;
c(i)=y(2);
i=i+1;
i1=i1+m;
end
if nargout<1
cmax=max(abs(c));
ph=(0:5:360)*pi/180;
plot(1.414*cos(ph),1.414*sin(ph),'c');
hold on;
for i=1:length(c)
ph=ph0-angle(c(i));
a=abs(c(i))/cmax*1.414;
plot(a*cos(ph),a*sin(ph),'r*');
end
plot([1.5 1.5],[0,0],'k:',[0,0],[-1.5,1.5],'k:');
hold off ;
axis equal;
axis([-1.5 1.5 -1.5 1.5]);
end
end
weixin_42668301
- 粉丝: 768
- 资源: 3993
最新资源
- IPMSM永磁电机弱磁控制 附有说明文档 公式法MTPA 采用电压反馈弱磁 波形很好 跟踪很稳 包含仿真文件和两个详细说明文档 简单易懂
- MySQL学生成绩管理系统
- 面向目标探测与跟踪的相控阵雷达波束调度策略研究 开题报告答辩.pptx
- 考虑风光火储和电动汽车的微电网经济调度 软件:Matlab+cplex工具箱 介绍:在Matlab 平台上以一个包含风、光、柴油发电机、上级电网、储能以及电动汽车的小型微电网系统为例进行仿真 目标包
- springboot校园在线拍卖系统
- 广东墨睿科技有限公司创投信息
- STM32L0xx官方开发包
- 故障诊断分类 matlab代码 轴承内圈、外圈、滚动体故障分类 (1)故障样本的时域、频域、时频域、熵等特征提取; (2)BP网络或者SVM模型训练与测试 (3)输出测试样本分类准确率 成套代码,注释
- 冲床送料机程序 中达优控一体机编写 此程序已经实际设备上批量应用,程序成熟可靠,借鉴价值高,程序有注释
- tensorflow用户实验报告
- 杭州华卓信息科技有限公司创投信息
- 含电池储能+pid控制器的两区域互联网电网调频仿真
- 毕业设计B058-基于Java的卓越导师双选系统的设计与实现
- 杭州孝道科技有限公司创投信息
- 儿童节烟花代码2python实现
- 大厂成熟FOC直流电机控制方案,此方案可用于电动自行车,滑板车等电机驱动 单片机基于Stm031或相应兆易GD32等单片机 转把,高中低三速 刹车功能 助力功能 电子刹车功能 欠压检测 巡航
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论2