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

📄 cpm_demodulator.asv

📁 CPM调制的线性均衡器
💻 ASV
字号:
function result_data_vector=cpm_demodulator(cpm_param,cpm_data_vector)

[lm,lp]=rat(cpm_param.modulation_efficient_h);

if mod(lm,2)==0
    previous_phase_state_number=lp;    
else
    previous_phase_state_number=2*lp;   
end

i=1:previous_phase_state_number;
previous_state.phase=pi*lm*(i'-1)/lp; 

previous_state.phasenumber=pervious_phase_state_number;

previous_state.number=previous_phase_state_number*power(cpm_param.M_ary,cpm_param.duration-1);
previous_state.weight=zeros(previous_state.number,1);
previous_state.code=zeros((cpm_param.symbols_per_frame),previous_state.number);

%   Step3, viterbi decoder
for i=1:(cpm_param.symbols_per_frame)
    cpm_data_vector.start_index=(i-1)*(cpm_param.samples_per_symbol)+1;
    cpm_data_vector.end_index=i*(cpm_param.samples_per_symbol);
    previous_state.index=i;
    current_state=viterbi_decoder(cpm_param,cpm_data_vector,previous_state);
    previous_state=current_state;
end
    
%   Step4, the path with the largest weight is the result
[maxweight,maxindex]=max(current_state.weight);
demodulator_symbols_vector=current_state.code(:, maxindex);

%   calculate the bit_error_rate and symbol_error_rate
original_data=load('original_data.mat');
original_bits_vector=original_data.input_frame_bits_vector;
%original_symbols_vector=original_data.data_vector;
%number_fault_symbols=0;
number_fault_bits=0;

near_zero=10^(-5);
%   symbols error rate calculation
%for i=1:(cpm_param.symbols_per_frame)
%    if abs(demodulator_symbols_vector(i)-original_symbols_vector(i))>near_zero
%        number_fault_symbols=number_fault_symbols+1;
%    end
%end

%ser=(number_fault_symbols)/(cpm_param.symbols_per_frame);
%fprintf('We have received %d symbols\n',size(demodulator_symbols_vector,1));
%fprintf('SER is %f %%\n',ser*100);

%   bits error rate calculation
demodulator_bits_vector=frame_data_unmapping(cpm_param,demodulator_symbols_vector);
for i=1:(cpm_param.bits_per_frame)
    if abs(uint8(demodulator_bits_vector(i))-uint8(original_bits_vector(i)))>near_zero
        number_fault_bits=number_fault_bits+1;        
    end
end

%ber=(number_fault_bits)/(cpm_param.bits_per_frame);
%fprintf('We have received %d bits\n',size(demodulator_bits_vector,1));
%fprintf('BER is %f %%\n',ber*100);
%error_data.number_fault_symbols=number_fault_symbols;
error_data.number_fault_bits=number_fault_bits;

%fprintf('CPM Demodulator has successfully finished!\n');
%fprintf('Excellent Work, FengWei!\n');



⌨️ 快捷键说明

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