⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpm_test.m

📁 cpm调制解调实现,关联长度为3
💻 M
字号:
% clc
clear all
close all

T=1;
L=3;
h=2/7;
m=8;            % 八进制
p = 2/h;        % 累计相位的状态个数
OVS=40;
OVR=40;
EbN0 = 10;
SNR = EbN0 - 10 * log10(OVR) + 10 * log10(log2(m));
SNR = 10;
% SNR = 1;

block_num = 1;      %发送信息的桢数
block_size = 3;     %发送信息的桢大小   block_num*block_size为发送的信息bit数
frm_num = block_num;    
frm_size = block_size + 3;  %每桢加三个归零码

t=[0:T/OVS:L*T];
gt=( 1-cos( 2*pi*t/(L*T) ) )/(2*L*T);

for ii=1:L*OVS
    QT(ii)=sum(gt(1:ii).*(T/OVS));
end
rand('state',2);
%source_bit = 2*(randint(1,block_num*block_size,m)) - (m-1);     %生成发送信息
source_bit = [7,5,3];

% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
% 对信息序列成桢,相当于每一条发的序列,在每一桢加三个symbol是状态归零
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 
framed_bit = zeros(1,block_num*(block_size+3));
tail = [0,-(m-1),-(m-1)];
v = [];
for ii = 1:block_num
    v = source_bit( (ii-1)*block_size+1:ii*block_size );
    tail(1) = mod(p - mod(sum((v+m-1)/2),p),m);
    tail(1) = tail(1)*2 - (m-1);
    framed_bit((ii-1)*(block_size+3)+1:ii*(block_size+3)) = [source_bit((ii-1)*block_size+1:ii*block_size),tail];
end;


% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 
%                                       MODULATE
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 
init_state = [0,0,0];
phas = zeros(1,length(framed_bit));
acc_ph = zeros(1,length(framed_bit)*OVS);
mod_bit = [-(m-1),-(m-1),framed_bit];	% init state = (0,-7,-7) 使第一桢从初始状态(phase=0,ak2=-7,ak1=-7)开始调制

for jj = 3:length(mod_bit)
		kk = jj - 2;
	if(kk>1)
		phas(kk) = mod(phas(kk-1) + pi*h*mod_bit(jj-3),2*pi);
	end;
    acc_ph((kk-1)*OVS+1:kk*OVS) = mod(  2*pi*h*( mod_bit(jj-2)*QT(2*OVS+1:3*OVS) + mod_bit(jj-1)*QT(OVS+1:2*OVS) + mod_bit(jj)*QT(1:OVS) ) + phas(kk),2*pi );
end;
mod_sig = exp(j*acc_ph);
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 
%     PLOT ACC_PH
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 
% x = 1./OVS:1./OVS:length(mod_bit)-2;
% plot(x,acc_ph);
% ylim([0,2*pi]);

% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 
%											TRANSMIT
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 

%为每一跳加上一个随机相位
trans_sig1 = zeros(1,length(mod_sig));
trans_sig2 = zeros(1,length(mod_sig));
rand('state',3);
for ii = 1:frm_num;
	index1 = (ii-1)*frm_size*OVS + 1;
	index2 = ii*frm_size*OVS;
	trans_sig1(index1:index2) = mod_sig(index1:index2)*exp(j*1.9);
end;
trans_sig2 = mod_sig;    %   不加随机相位


% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 
%											CHANNEL
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %

noisy_sig1 = awgn(trans_sig1, SNR, 0, 1);
noisy_sig2 = awgn(trans_sig2, SNR, 0, 1);
noisy_sig1 = trans_sig1;    %没有噪声的情况  
noisy_sig2 = trans_sig2;
% Ir = It;
% Qr = Qt;


% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 
% %                                        DEMODULATE
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 
rec_sig1 = noisy_sig1;
rec_sig2 = noisy_sig2;

v1 = rec_sig1(1:40)*mod_sig(1:40)';
abs(v1)
v2 = rec_sig1(1:40)*mod_sig(41:80)';
abs(v2)
v3 = rec_sig1(1:40)*mod_sig(81:120)';
abs(v3)

trans_ph1 = mod(real(log(trans_sig1)/j),2*pi);
trans_ph2 = mod(real(log(trans_sig2)/j),2*pi);
noisy_ph1 = mod(real(log(noisy_sig1)/j),2*pi);
noisy_ph2 = mod(real(log(noisy_sig2)/j),2*pi);
rec_ph1  = mod(real(log(rec_sig1)/j),2*pi);
rec_ph2  = mod(real(log(rec_sig2)/j),2*pi);

x = 1./OVS:1./OVS:length(mod_bit)-2;
figure(1);
subplot(4,1,1);plot(x,acc_ph);ylim([0,2*pi]);
subplot(4,1,2);plot(x,trans_ph1);ylim([0,2*pi]);
subplot(4,1,3);plot(x,noisy_ph1);ylim([0,2*pi]);
subplot(4,1,4);plot(x,rec_ph1);ylim([0,2*pi]);
% figure(2);
% subplot(4,1,1);plot(x,acc_ph);ylim([0,2*pi]);
% subplot(4,1,2);plot(x,trans_ph2);ylim([0,2*pi]);
% subplot(4,1,3);plot(x,noisy_ph2);ylim([0,2*pi]);
% subplot(4,1,4);plot(x,dmod_ph2);ylim([0,2*pi]);
hold on




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -