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

📄 cpm_sim.m.bak

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

T=1;
L=3;
h=2/7;
m=8;            % 八进制
p = 2/h;
OVS=40;
OVR=40;

frame_num = 100;
frame_size = 50;

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

for i=1:L*OVS
    QT(i)=sum(gt(1:i).*(T/OVS));
end

bit = 2*(randint(1,10,8)) - (m-1);

phas = zeros(1,length(bit));
acc_ph = zeros(1,length(bit)*OVS);

for k = 3:length(bit)
	if k>3
		phas(k) = mod(phas(k-1) + pi*h*bit(k-3),2*pi);
	end;
    acc_ph((k-1)*OVS+1:k*OVS) = mod(  2*pi*h*( bit(k-2)*QT(2*OVS+1:3*OVS) + bit(k-1)*QT(OVS+1:2*OVS) + bit(k)*QT(1:OVS) ) + phas(k),      2*pi );
end;
%%%%%%%%%%%%%%%%%%%%%%%  plot acc_ph %%%%%%%%%%%%%%%%%%%%%%%%%
% x = 1./OVS:1./OVS:length(bit);
% plot(x,acc_ph);
% ylim([0,2*pi]);
%%%%%%%%%%%%%%%%%%%%%%%   End plot   %%%%%%%%%%%%%%%%%%%%%%%%%

trans_sig = exp(j*acc_ph);
%%%%%%%%%%%%%%%%%%%%%%%  transmit %%%%%%%%%%%%%%%%%%%%%%%%%
% Ir = It;
% Qr = Qt;
%%%%%%%%%%%%%%%%%%%%%  End transmit %%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%  receive %%%%%%%%%%%%%%%%%%%%%%%%%
%               
%                   sampling
%
%%%%%%%%%%%%%%%%%%%%%  End receive %%%%%%%%%%%%%%%%%%%%%%%%%


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % 
% % 
% %                                                   DEMODULATION
% % 
% % 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
rec_sig = trans_sig;

%[state_from_input, state_from, to_state_output, to_state, phase_state] = gen_trellis(m, h, L);     % generate state trans table()
%correlator = gen_mtchd_fltr(OVR, m, h, QT);                                                         % generate mtchd_fltr(m,m,m,Ns)
load state_from state_from;
load correlator correlator;
%save state_from_input state_from_input;
%save state_from state_from;
%save correlator correlator
%load state_from_input state_from_input;


rec_sym_num = length(trans_sig)/OVR;

branch_metric = zeros(p,m,m,m);
acc_metric_left = zeros(p,m,m);
acc_metric_right = zeros(p,m,m);
surv_path = ones(rec_sym_num,p,m,m);
sub_acc_every_state = zeros(1,m);
bit_dmod = zeros(1,rec_sym_num);
err_total = 0;

for frm = 1:frm_num

		for sym = 3:rec_sym_num							% for each symbol
				% left trevills states
		    for phk = 1:p							% for each state 
		    for ak2 = 1:m							% for each state 
		    for ak1 = 1:m							% for each state 
		        for ak = 1:m			% for each incoming branch
		            temp = rec_sig((sym-1)*OVR+1 : sym*OVR ) * conj( reshape(correlator(ak2,ak1,ak,:),OVR,1) ); 		% 复数相关
		            branch_metric(phk,ak2,ak1,ak) = real(temp * exp(-j*pi*h*(phk-1)));								% 得到Zk
		        end;
		    end;end;end;
			 	
			 	% right trevills states 	
		    for phk = 1:p									% for each state
		    for ak2 = 1:m									% for each state
		    for ak1 = 1:m									% for each state
		
		        for i = 1:m									% for each incoming branch
		            v = reshape( state_from(phk,ak2,ak1,i,:),1,3);						% which state from
		            sub_acc_every_state(i) = acc_metric_left(v(1),v(2),v(3)) + branch_metric(v(1),v(2),v(3),ak1);
		        end;
		
		        [acc_metric_right(phk,ak2,ak1),surv_path(sym,phk,ak2,ak1)] = max(sub_acc_every_state);	% update acc_metric
		
		    end;end;end;			
				acc_metric_left = acc_metric_right;
		end;    % end of (sym = 3:rec_sym_num)
		
		maximum = 0;
		for i = 1:p
		for j = 1:m
		for k = 1:m
			if(acc_metric_right(i,j,k) > maximum)
				v = [i,j,k];
				maximum = acc_metric_right(i,j,k);
			end;
		end;end;end;
		
		
		for i = rec_sym_num:-1:1
		    bit_dmod(i) = 2*(v(3)-1) - (m-1);
		    v = reshape( state_from(v(1),v(2),v(3),surv_path(i,v(1),v(2),v(3)),:),1,3);
		end;
		[err_num, err_rat] = symerr(bit, bit_dmod, 'column-wise');
		err_total = err_total + err_num;

end;	%	end of (frm = 1:frm_num)


sprintf('error bits = %d, error rate = %f',err_num,err_rat)
disp('done');

⌨️ 快捷键说明

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