00001 /* 00002 libit - Library for basic source and channel coding functions 00003 Copyright (C) 2005-2005 Vivien Chappelier, Herve Jegou 00004 00005 This library is free software; you can redistribute it and/or 00006 modify it under the terms of the GNU Library General Public 00007 License as published by the Free Software Foundation; either 00008 version 2 of the License, or (at your option) any later version. 00009 00010 This library is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 Library General Public License for more details. 00014 00015 You should have received a copy of the GNU Library General Public 00016 License along with this library; if not, write to the Free 00017 Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00018 */ 00019 00020 /* 00021 Channels and modulation 00022 Copyright (C) 2005 Vivien Chappelier, Herve Jegou 00023 */ 00024 00025 #include <it/vec.h> 00026 #include <it/source.h> 00027 #include <it/random.h> 00028 #include <it/channel.h> 00029 00030 /* simple BSPK modulation */ 00031 vec modulate_bpsk (bvec b) 00032 { 00033 idx_t i; 00034 vec m = vec_new (bvec_length (b)); 00035 00036 for (i = 0; i < bvec_length (b); i++) 00037 m[i] = b[i] ? 1 : -1; 00038 00039 return (m); 00040 } 00041 00042 00043 bvec channel_bsc (bvec v, double crossover_proba) 00044 { 00045 idx_t i; 00046 bvec received = bvec_new (bvec_length (v)); 00047 00048 for (i = 0; i < bvec_length (v); i++) 00049 if (it_rand () < crossover_proba) 00050 received[i] = 1 - v[i]; 00051 else 00052 received[i] = v[i]; 00053 00054 return received; 00055 } 00056 00057 00058 vec channel_awgn (vec v, double sigma) 00059 { 00060 vec received = source_gaussian (vec_length (v), 0.0, sigma); 00061 vec_add (received, v); 00062 return received; 00063 }
|
|