📄 modla.m
字号:
function [y,y_com]=modla(code_num,sample_rate,carrier_frequency,symbol_rate,shape,mode)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 福相调制信号生成程序 %
% 生成MPSK(M=2,4,8),MQAM(M=16,32,64,128),OQPSK,pi/4QPSK %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%函数体[y,y_com]=modla(code_num,M,sample_rate,carrier_frequency,symbol_rate,delay,rool
%factor,shape,mode)
%参数说明
% y 输出调制信号序列
% y_com 星座图映射序列
% code_num 码元数目
% M 调制阶数
% sample_rate 采样速率
% carrier_frequency 载波频率
% symbol_rate 符号速率
% shape 成型脉冲形状
% shape=1 矩形脉冲
% shape=2 升余弦脉冲
% shape=3 平方根升余弦脉冲
% mode 调制体制,有9种形式
% mode=1 BPSK调制
% mode=2 QPSK调制
% mode=3 OQPSK调制
% mode=4 Pi/4QPSK调制
% mode=5 8PSK调制
% mode=6 16QAM调制
% mode=7 32QAM调制
% mode=8 64QAM调制
% mode=9 128QAM调制
%函数体
%参数初始化
if mode==1
M=2;
elseif mode==2|mode==3|mode==4
M=4;
elseif mode==5
M=8;
elseif mode==6
M=16;
elseif mode==7
M=32;
elseif mode==8
M=64;
elseif mode==9
M=128;
end
x=randint(1,code_num,M);
T=1/symbol_rate;%码元间隔
nsample=sample_rate/symbol_rate;%重采样个数
t=0:1/sample_rate:(code_num/symbol_rate-1/sample_rate);%仿真时间序列
N=4096;%FFT点数
f=sample_rate*(0:N-1)/N;%频率序列
mod=exp(j*2*pi*carrier_frequency*t);%调制信号序列
%MPSK调制
% if shape==2|shape==3
% roolfactor=input('请输入升余弦/平方根升余弦滚降系数');
% end
roolfactor=0.5;
switch mode
%BPSK调制
case 1,
y_com=pskmod(x,2);%低通复包络映射
scatterplot(y_com);
switch shape
case 1,
yshape=fil(y_com,nsample,roolfactor,1);
case 2,
yshape=fil(y_com,nsample,roolfactor,2);
case 3,
yshape=fil(y_com,nsample,roolfactor,3);
end
y=real(yshape.*mod);
%QPSK调制
case 2,
y_com=pskmod(x,4);%低通复包络映射
scatterplot(y_com);
switch shape
case 1,
yshape=fil(y_com,nsample,roolfactor,1);
case 2,
yshape=fil(y_com,nsample,roolfactor,2);
case 3,
yshape=fil(y_com,nsample,roolfactor,3);
end
y=real(yshape.*mod);
%OQPSK调制
case 3,
x=randint(1,code_num/2+1,M);
scatterplot(y_com);
y_com=oqpskmod(x);%低通复包络映射
y_com=y_com(2:end-2);
switch shape
case 1,
yshape=fil(y_com,nsample,roolfactor,1);
case 2,
yshape=fil(y_com,nsample,roolfactor,2);
case 3,
yshape=fil(y_com,nsample,roolfactor,3);
end
y=real(yshape.*mod);
%pi/4QPSK调制
case 4,
y_com=pi4QPSK(code_num/4);%低通复包络映射
scatterplot(y_com);
switch shape
case 1,
yshape=fil(y_com,nsample,roolfactor,1);
case 2,
yshape=fil(y_com,nsample,roolfactor,2);
case 3,
yshape=fil(y_com,nsample,roolfactor,3);
end
y=real(yshape.*mod);
%QPSK调制
case 5,
y_com=pskmod(x,8);%低通复包络映射
scatterplot(y_com);
switch shape
case 1,
yshape=fil(y_com,nsample,roolfactor,1);
case 2,
yshape=fil(y_com,nsample,roolfactor,2);
case 3,
yshape=fil(y_com,nsample,roolfactor,3);
end
y=real(yshape.*mod);
%16QAM调制
case 6,
y_com=qammod(x,16);%低通复包络映射
scatterplot(y_com);
switch shape
case 1,
yshape=fil(y_com,nsample,roolfactor,1);
case 2,
yshape=fil(y_com,nsample,roolfactor,2);
case 3,
yshape=fil(y_com,nsample,roolfactor,3);
end
y=real(yshape.*mod);
%32QAM调制
case 7,
y_com=qammod(x,32);%低通复包络映射
scatterplot(y_com);
switch shape
case 1,
yshape=fil(y_com,nsample,roolfactor,1);
case 2,
yshape=fil(y_com,nsample,roolfactor,2);
case 3,
yshape=fil(y_com,nsample,roolfactor,3);
end
y=real(yshape.*mod);
%64QAM调制
case 8,
y_com=qammod(x,64);%低通复包络映射
scatterplot(y_com);
switch shape
case 1,
yshape=fil(y_com,nsample,roolfactor,1);
case 2,
yshape=fil(y_com,nsample,roolfactor,2);
case 3,
yshape=fil(y_com,nsample,roolfactor,3);
end
y=real(yshape.*mod);
%128QAM调制
case 9,
y_com=qammod(x,128);%低通复包络映射
scatterplot(y_com);
switch shape
case 1,
yshape=fil(y_com,nsample,roolfactor,1);
case 2,
yshape=fil(y_com,nsample,roolfactor,2);
case 3,
yshape=fil(y_com,nsample,roolfactor,3);
end
y=real(yshape.*mod);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -