📄 cpfsk.m
字号:
function [sym_err_rat] = cpfsk(EbN0, m, Ns, frm_num)
% sqwang's source code, used for academic research, not commerce.
% EbN0: bit energy divides noise power spectrum density
% m: Size of modulation alphabet set
% Ns:The number of sample per symbol
% frm_num: the number of frame in the simulation
h = 1/m; % Modulation index of CPFSK
% Config slot structure(according to rate)
info_sym_num = 47; % The number of symbol used for transfer traffic data per slot
tail_sym_num = 1; % The number of tailing-symbol forcing the FSM to 'zero-state'
% SNR adjustment according to correlation between EbN0 and symbol's SNR
% - 10 * log10(Ns) due to sample rate Ns times symbol rate
% 10 * log10(log2(m)) due to log2(m) bits transmited per symbol
SNR = EbN0 - 10 * log10(Ns) + 10 * log10(log2(m));
% Declare varible for SER statistics
err_num_total = 0;
% Generate correlator(matched filter)
mtchd_fltr = gen_mtchd_fltr(Ns, m, h);
% Generate from-some-state, output(frequency control for cpfsk) & to-some-state matrix.
[state_from_input, state_from, to_state_output, to_state, phase_state] = gen_trlls(m, h);
for i = 1 : frm_num
% Generate coded modulation tansmitting signal
[src_data, mod_sig] = gen_cpfsk_sig(info_sym_num, tail_sym_num, h, m, Ns);
% Via gaussian channel
noisy_sig = awgn(mod_sig, SNR, 0);
% Correlation
[corr_metric] = mtchd_fltr_proc(noisy_sig, mtchd_fltr, Ns);
% maximum likelihood sequence detection
demod_sym = mlsd(corr_metric, h, to_state_output, state_from, state_from_input, phase_state);
[err_num, sym_err_rat] = symerr(demod_sym, src_data, 'column-wise');
err_num_total = err_num_total + err_num;
end
sym_err_rat = err_num_total/frm_num/info_sym_num;
disp(['Coherent MLSD SER is ', num2str(sym_err_rat)]);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -