%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Copyright (c) 2019 Francisco Javier Garcia-Gomez % Institute for Communications Engineering (LNT) % Technical University of Munich, Germany % www.lnt.ei.tum.de % % All rights reserved. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Permission is hereby granted, free of charge, to any person obtaining a % copy of this software and associated documentation files (the % "Software"), to deal in the Software without restriction, including % without limitation the rights to use, copy, modify, merge, publish, % distribute, sublicense, and/or sell copies of the Software, and to permit % persons to whom the Software is furnished to do so, subject to the % following conditions: % % The above copyright notice and this permission notice shall be included % in all copies or substantial portions of the Software. % % THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS % OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF % MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN % NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, % DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR % OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE % USE OR OTHER DEALINGS IN THE SOFTWARE. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%% example_mi_cg_complex_16qam.m %%%%%%%%%%%%%%%%%%%%%% % % Example usage of the function mi_cg to numerically compute mutual % information between two complex sequences. This file simulates a % one-dimensional complex AWGN channel with 16-QAM constellation for % different SNRs, and then plots the achievable rate, which is equal to two % times the 4-PAM curve of Fig. 1 of [1]. % % Note that using mi_cg with complex sequences assumes that the channel % model q(Y|X) is circularly symmetric for a given X=x (i.e., that the % received clouds are circular). This is not the case in a channel with % phase noise: see example_it_mi_cg.m for an example of how to deal with % non-circularly-symmetric channels. % % [1] G. David Forney and Gottfried Ungerboeck, "Modulation and Coding for % Linear Gaussian Channels", IEEE Trans. Inf. Theory vol. 44, no. 6, pp. % 2384-2415, October 1998 % % Technische Universitaet Muenchen - Lehrstuhl fuer Nachrichtentechnik % Date: 12.12.2019 % Author: Francisco Javier Garcia-Gomez % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clear; close all; %%% Simulation parameters M_QAM=16; % QAM size var_w=1; % noise variance SNR_dB_values=(-5):2:25; % SNR values in dB N=8000; % number of Monte-Carlo points %%% Derived parameters n_SNR=length(SNR_dB_values); SNR_values=10.^(SNR_dB_values/10); %%% Generation of QAM constellation with power 1 M_PAM=sqrt(M_QAM); % number of points per real dimension X_1d=-(M_PAM-1)+2*(0:(M_PAM-1)); % generate PAM X=X_1d+1i*X_1d.'; % transform to QAM X=X(:).'*sqrt(3/2/(M_QAM-1)); % set to unit power %%% Uniformly choose transmit indices idx_tx=randi(M_QAM, [1, N]); %%% AWGN noise w=sqrt(var_w/2)*(randn([1, N])+1i*randn([1, N])); %%% Loop over the SNR values MI_awgn=zeros(1, n_SNR); for i_SNR=1:n_SNR % transmitted points s=sqrt(SNR_values(i_SNR)*var_w)*X(:, idx_tx); % AWGN channel r_awgn = s+w; % Compute MI MI_awgn(i_SNR)=air(X, r_awgn, idx_tx); % The following also works but is slower: MI_awgn(i_SNR)=air(s, r_awgn); end I_shannon=log2(1+SNR_values); figure; plot(SNR_dB_values, I_shannon, '-', 'DisplayName', 'log_2 (1+SNR)'); hold on; plot(SNR_dB_values, MI_awgn, '--', 'DisplayName', [num2str(M_QAM) '-QAM, AWGN']); hold off; xlabel('SNR (dB)'); ylabel('Achievable rate (bits/complex dimension)'); title(['Achievable rate of ' num2str(M_QAM) '-QAM in AWGN']); legend('Location', 'NorthWest');