IT++ Logo
source.cpp
Go to the documentation of this file.
00001 
00029 #include <itpp/signal/source.h>
00030 
00031 
00032 namespace itpp
00033 {
00034 
00036 // Sine_Source
00038 
00039 Sine_Source::Sine_Source(double freq, double mean, double ampl, double inphase)
00040 {
00041   A = ampl;
00042   m = mean;
00043   theta = inphase;
00044   dtheta = 2.0 * pi * freq;
00045 }
00046 
00047 double Sine_Source::sample()
00048 {
00049   double samp = m + A * sin(theta);
00050 
00051   theta += dtheta;
00052   if (theta >= 2.0 * pi)
00053     theta -= 2.0 * pi;
00054 
00055   return samp;
00056 }
00057 
00058 vec Sine_Source::operator()(int n)
00059 {
00060   vec v(n);
00061 
00062   for (int i=0; i < n; i++)
00063     v(i) = sample();
00064 
00065   return v;
00066 }
00067 
00068 mat Sine_Source::operator()(int h, int w)
00069 {
00070   mat mm(h, w);
00071   int i, j;
00072 
00073   for (i = 0; i < h; i++)
00074     for (j = 0; j < w; j++)
00075       mm(i, j) = sample();
00076 
00077   return mm;
00078 }
00079 
00081 // Square_Source
00083 
00084 Square_Source::Square_Source(double freq, double mean, double ampl, double inphase)
00085 {
00086   A = ampl;
00087   m = mean;
00088   theta = inphase / (2.0 * pi);
00089   dtheta = freq;
00090 }
00091 
00092 double Square_Source::sample()
00093 {
00094   double samp = theta < 0.5 ? 1.0 : -1.0;
00095 
00096   theta += dtheta;
00097   if (theta >= 1.0)
00098     theta -= 1.0;
00099 
00100   return samp;
00101 }
00102 
00103 vec Square_Source::operator()(int n)
00104 {
00105   vec v(n);
00106 
00107   for (int i=0; i < n; i++)
00108     v(i) = sample();
00109 
00110   return v;
00111 }
00112 
00113 mat Square_Source::operator()(int h, int w)
00114 {
00115   mat mm(h, w);
00116   int i, j;
00117 
00118   for (i = 0; i < h; i++)
00119     for (j = 0; j < w; j++)
00120       mm(i, j) = sample();
00121 
00122   return mm;
00123 }
00124 
00126 // Triangle_Source
00128 
00129 Triangle_Source::Triangle_Source(double freq, double mean, double ampl, double inphase)
00130 {
00131   A = ampl;
00132   m = mean;
00133   theta = inphase / (2.0 * pi);
00134   dtheta = freq;
00135 }
00136 
00137 double Triangle_Source::sample()
00138 {
00139   double samp = m + 4.0 * A * (theta < 0.25 ? theta : 0.5 - theta);
00140 
00141   theta += dtheta;
00142   if (theta >= 0.75)
00143     theta -= 1.0;
00144 
00145   return samp;
00146 }
00147 
00148 vec Triangle_Source::operator()(int n)
00149 {
00150   vec v(n);
00151 
00152   for (int i=0; i < n; i++)
00153     v(i) = sample();
00154 
00155   return v;
00156 }
00157 
00158 mat Triangle_Source::operator()(int h, int w)
00159 {
00160   mat mm(h, w);
00161   int i, j;
00162 
00163   for (i = 0; i < h; i++)
00164     for (j = 0; j < w; j++)
00165       mm(i, j) = sample();
00166 
00167   return mm;
00168 }
00169 
00171 // Sawtooth_Source
00173 
00174 Sawtooth_Source::Sawtooth_Source(double freq, double mean, double ampl, double inphase)
00175 {
00176   A = ampl;
00177   m = mean;
00178   theta = inphase / (2.0 * pi);
00179   dtheta = freq;
00180 }
00181 
00182 double Sawtooth_Source::sample()
00183 {
00184   double samp = 2.0 * A * theta;
00185 
00186   theta += dtheta;
00187   if (theta >= 0.5)
00188     theta -= 1.0;
00189 
00190   return samp;
00191 }
00192 
00193 vec Sawtooth_Source::operator()(int n)
00194 {
00195   vec v(n);
00196 
00197   for (int i=0; i < n; i++)
00198     v(i) = sample();
00199 
00200   return v;
00201 }
00202 
00203 mat Sawtooth_Source::operator()(int h, int w)
00204 {
00205   mat mm(h, w);
00206   int i, j;
00207 
00208   for (i = 0; i < h; i++)
00209     for (j = 0; j < w; j++)
00210       mm(i, j) = sample();
00211 
00212   return mm;
00213 }
00214 
00216 // Impulse_Source
00218 
00219 Impulse_Source::Impulse_Source(double freq, double ampl, double inphase)
00220 {
00221   A = ampl;
00222   pos = inphase / (2.0 * pi);
00223   dtheta = freq;
00224 }
00225 
00226 double Impulse_Source::sample()
00227 {
00228   double samp;
00229 
00230   if (pos >= 1.0) {
00231     samp = A;
00232     pos -= 1.0;
00233   }
00234   else {
00235     samp = 0.0;
00236     pos += dtheta;
00237   }
00238 
00239   return samp;
00240 }
00241 
00242 vec Impulse_Source::operator()(int n)
00243 {
00244   vec v(n);
00245 
00246   for (int i=0; i < n; i++)
00247     v(i) = sample();
00248 
00249   return v;
00250 }
00251 
00252 mat Impulse_Source::operator()(int h, int w)
00253 {
00254   mat m(h, w);
00255   int i, j;
00256 
00257   for (i = 0; i < h; i++)
00258     for (j = 0; j < w; j++)
00259       m(i, j) = sample();
00260 
00261   return m;
00262 }
00263 
00265 // Pattern_Source
00267 
00268 Pattern_Source::Pattern_Source(const vec &pattern, int start_pos)
00269 {
00270   pat = pattern;
00271   pos = start_pos;
00272 
00273   // Calculate the mean and variance.  Note that the variance shall
00274   // be normalied by N and not N-1 in this case
00275   mean = var = 0.0;
00276   for (int i = pat.size() - 1; i >= 0; i--) {
00277     mean += pat(i);
00278     var += pat(i) * pat(i);
00279   }
00280   mean /= pat.size();
00281   var /= pat.size();
00282   var -= mean * mean;
00283 }
00284 
00285 double Pattern_Source::sample()
00286 {
00287   double samp = pat(pos);
00288 
00289   if (pos >= pat.size() - 1)
00290     pos = 0;
00291   else
00292     pos++;
00293 
00294   return samp;
00295 }
00296 
00297 vec Pattern_Source::operator()(int n)
00298 {
00299   vec v(n);
00300 
00301   for (int i=0; i < n; i++)
00302     v(i) = sample();
00303 
00304   return v;
00305 }
00306 
00307 mat Pattern_Source::operator()(int h, int w)
00308 {
00309   mat m(h, w);
00310   int i, j;
00311 
00312   for (i = 0; i < h; i++)
00313     for (j = 0; j < w; j++)
00314       m(i, j) = sample();
00315 
00316   return m;
00317 }
00318 
00319 } // namespace itpp
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
SourceForge Logo

Generated on Sat Jul 9 2011 15:21:33 for IT++ by Doxygen 1.7.4