Advertisement
Guest User

Filters and Sequences Coursework

a guest
Nov 28th, 2014
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.49 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <stdlib.h>
  4.  
  5. using namespace std;
  6.  
  7. class sequence
  8. {
  9.     public:
  10.         sequence(const int NUMBER_OF_SAMPLES=4);      //takes the number of samples in the sequence and generates an appropriate array with it
  11.         sequence(const int _number_of_samples,float* _Sample_Values);
  12.         sequence(ifstream& data_input);
  13.         ~sequence();
  14.         sequence(const sequence& old_sequence);
  15.         const sequence& operator=(const sequence& first_sequence);
  16.         const sequence operator+(const sequence& sequence_being_added);
  17.         const sequence& operator+=(const sequence& sequence_being_added);
  18.         float get_value_of_THE_sample(const int Which_sample);
  19.         void set_value_of_THE_sample(const int Which_sample,const float Value_sample);
  20.         void set_values_of_samples_to_zero();
  21.         int get_number_of_samples();
  22.         friend istream& operator>>(istream& input_stream, sequence& new_sequence);
  23.         friend ostream& operator<<(ostream& output_stream,sequence& the_sequence);
  24.     private:
  25.         int number_of_samples;
  26.         float* Sample_Values;
  27. };
  28.  
  29. sequence::sequence(int NUMBER_OF_SAMPLES):number_of_samples(NUMBER_OF_SAMPLES)
  30. {
  31.     if(NUMBER_OF_SAMPLES<0)
  32.     {
  33.         cout<<"Not a valid value!";
  34.     }
  35.     else
  36.     {
  37.         Sample_Values= new float[number_of_samples];
  38.     }
  39. }
  40.  
  41. sequence::sequence(const int _number_of_samples,float* _Sample_Values):number_of_samples(_number_of_samples)
  42. {
  43.     if(_number_of_samples<0)
  44.     {
  45.         cout<<"Not a valid value!";
  46.     }
  47.     else
  48.     {
  49.         Sample_Values= new float[number_of_samples];
  50.         int i=0;
  51.         for(i; i<number_of_samples; i++)
  52.         {
  53.             Sample_Values[i]=_Sample_Values[i];
  54.         }
  55.     }
  56.  
  57. }
  58.  
  59. sequence::sequence(ifstream& data_input)
  60. {
  61.     if(!data_input.is_open())
  62.     {
  63.         exit (0);
  64.     }
  65.     else
  66.     {
  67.         data_input>>number_of_samples;
  68.         Sample_Values= new float[number_of_samples];
  69.         int i=0;
  70.         for(i; i<number_of_samples; i++)
  71.         {
  72.             data_input>>Sample_Values[i];
  73.         }
  74.     }
  75. }
  76.  
  77. sequence::~sequence()
  78. {}
  79.  
  80. float sequence::get_value_of_THE_sample(const int Which_sample)
  81. {
  82.     if(Which_sample<number_of_samples&&Which_sample>=0)
  83.     {
  84.         return(Sample_Values[Which_sample]);
  85.     }
  86.     else
  87.     {
  88.         exit (0);
  89.     }
  90. }
  91.  
  92. sequence::sequence(const sequence& old_sequence):number_of_samples(old_sequence.number_of_samples)
  93. {
  94.  
  95.     Sample_Values=new float[number_of_samples];
  96.     for(int i=0;i<number_of_samples;i++)
  97.     {
  98.         Sample_Values[i]=old_sequence.Sample_Values[i];
  99.     }
  100. }
  101.  
  102. const sequence& sequence::operator=(const sequence& first_sequence)
  103. {
  104.     if(this==&first_sequence)
  105.     {
  106.         return(*this);
  107.     }
  108.     if(number_of_samples!=first_sequence.number_of_samples)
  109.     {
  110.         number_of_samples=first_sequence.number_of_samples;
  111.         delete[] Sample_Values;
  112.         Sample_Values=new float[number_of_samples];
  113.     }
  114.     for(int i=0;i<number_of_samples;i++)
  115.     {
  116.         Sample_Values[i]=first_sequence.Sample_Values[i];
  117.     }
  118. }
  119.  
  120. const sequence sequence::operator+(const sequence& sequence_being_added)
  121. {
  122.     sequence sum_of_sequences;
  123.     sum_of_sequences.number_of_samples=number_of_samples+sequence_being_added.number_of_samples;
  124.     sum_of_sequences.Sample_Values=new float[sum_of_sequences.number_of_samples];
  125.     int i;
  126.     for(i=0;i<number_of_samples;i++)
  127.     {
  128.         sum_of_sequences.Sample_Values[i]=Sample_Values[i];
  129.     }
  130.     for(int j=0;j<sequence_being_added.number_of_samples;j++)
  131.     {
  132.         sum_of_sequences.Sample_Values[i]=sequence_being_added.Sample_Values[j];
  133.         i++;
  134.     }
  135.     return(sum_of_sequences);
  136. }
  137.  
  138. const sequence& sequence::operator+=(const sequence& sequence_being_added)
  139. {
  140.     *this=*this + sequence_being_added;
  141.     return (*this);
  142. }
  143.  
  144.  
  145. void sequence::set_value_of_THE_sample(int Which_sample,float Value_sample)
  146. {
  147.     if(Which_sample<number_of_samples&&Which_sample>=0)
  148.     {
  149.         Sample_Values[Which_sample]=Value_sample;
  150.     }
  151.     else
  152.     {
  153.         exit (0);
  154.     }
  155. }
  156.  
  157. int sequence::get_number_of_samples()
  158. {
  159.     return (number_of_samples);
  160. }
  161.  
  162. void sequence::set_values_of_samples_to_zero()
  163. {
  164.     int i=0;
  165.     for(i;i<number_of_samples;i++)
  166.     {
  167.         Sample_Values[i]=0;
  168.     }
  169. }
  170.  
  171. istream& operator>>(istream& input_stream, sequence& new_sequence)
  172. {
  173.     input_stream>>new_sequence.number_of_samples;
  174.     new_sequence.Sample_Values=new float[new_sequence.number_of_samples];
  175.     for(int i=0;i<new_sequence.number_of_samples;i++)
  176.     {
  177.         input_stream>>new_sequence.Sample_Values[i];
  178.     }
  179.     return (input_stream);
  180. }
  181.  
  182. ostream& operator<<(ostream& output_stream,sequence& the_sequence)
  183. {
  184.     output_stream<<"\n the number of samples is:"<<the_sequence.number_of_samples;
  185.     for(int i=0;i<the_sequence.number_of_samples;i++)
  186.     {
  187.         output_stream<<"\n Sample "<<i<<" has a value of:"<<the_sequence.Sample_Values[i];
  188.     }
  189.     return(output_stream);
  190. }
  191.  
  192. class FIR
  193. {
  194.     public:
  195.         FIR(const int _number_of_coefficients=1);
  196.         FIR(const int _number_of_coefficients,float* _Filtered_Coefficients);
  197.         FIR(ifstream& data_input);
  198.         ~FIR();
  199.         FIR(const FIR& old_FIR);
  200.         const FIR& operator=(const FIR& first_FIR);
  201.         float get_value_of_THE_coefficient(const int Which_coefficient);
  202.         void set_value_of_THE_coefficient(const int Which_coefficient,const float Value_coefficient);
  203.         friend istream& operator>>(istream& input_stream, FIR& new_FIR);
  204.         friend ostream& operator<<(ostream& output_stream, FIR& the_FIR);
  205.  
  206.         sequence apply_filter(sequence& _sequence_to_be_filtered);
  207.     private:
  208.         int number_of_coefficients;
  209.         float* Filtered_Coefficients;
  210. };
  211.  
  212. FIR::FIR(const int _number_of_coefficients):number_of_coefficients(_number_of_coefficients)
  213. {
  214.     if(_number_of_coefficients<0)
  215.     {
  216.         cout<<"Not a valid value!";
  217.     }
  218.     else
  219.     {
  220.         Filtered_Coefficients= new float[number_of_coefficients];
  221.     }
  222. }
  223.  
  224. FIR::FIR(const int _number_of_coefficients,float* _Filtered_Coefficients):number_of_coefficients(_number_of_coefficients)
  225. {
  226.     if(_number_of_coefficients<0)
  227.     {
  228.         cout<<"Not a valid value!";
  229.     }
  230.     else
  231.     {
  232.         Filtered_Coefficients= new float[number_of_coefficients];
  233.         int i=0;
  234.         for(i; i<number_of_coefficients; i++)
  235.         {
  236.             Filtered_Coefficients[i]=_Filtered_Coefficients[i];
  237.         }
  238.     }
  239.  
  240. }
  241.  
  242. FIR::FIR(ifstream& data_input)
  243. {
  244.     if(!data_input.is_open())
  245.     {
  246.         exit (0);
  247.     }
  248.     else
  249.     {
  250.         data_input>>number_of_coefficients;
  251.         Filtered_Coefficients= new float[number_of_coefficients];
  252.         int i=0;
  253.         for(i; i<number_of_coefficients; i++)
  254.         {
  255.             data_input>>Filtered_Coefficients[i];
  256.         }
  257.     }
  258. }
  259.  
  260. FIR::~FIR()
  261. {
  262.  
  263. }
  264.  
  265. FIR::FIR(const FIR& old_FIR):number_of_coefficients(old_FIR.number_of_coefficients)
  266. {
  267.     Filtered_Coefficients=new float[number_of_coefficients];
  268.     for(int i=0;i<number_of_coefficients;i++)
  269.     {
  270.         Filtered_Coefficients[i]=old_FIR.Filtered_Coefficients[i];
  271.     }
  272. }
  273.  
  274. const FIR& FIR::operator=(const FIR& first_FIR)
  275. {
  276.     if(this==&first_FIR)
  277.     {
  278.         return(*this);
  279.     }
  280.     if(number_of_coefficients!=first_FIR.number_of_coefficients)
  281.     {
  282.         number_of_coefficients=first_FIR.number_of_coefficients;
  283.         delete[] Filtered_Coefficients;
  284.         Filtered_Coefficients=new float[number_of_coefficients];
  285.     }
  286.     for(int i=0;i<number_of_coefficients;i++)
  287.     {
  288.         Filtered_Coefficients[i]=first_FIR.Filtered_Coefficients[i];
  289.     }
  290. }
  291.  
  292. float FIR::get_value_of_THE_coefficient(const int Which_coefficient)
  293. {
  294.     if(Which_coefficient<number_of_coefficients&&Which_coefficient>=0)
  295.     {
  296.         return(Filtered_Coefficients[Which_coefficient]);
  297.     }
  298.     else
  299.     {
  300.         exit (0);
  301.     }
  302. }
  303.  
  304. void FIR::set_value_of_THE_coefficient(const int Which_coefficient,const float Value_coefficient)
  305. {
  306.     if(Which_coefficient<number_of_coefficients&&Which_coefficient>=0)
  307.     {
  308.         Filtered_Coefficients[Which_coefficient]=Value_coefficient;
  309.     }
  310.     else
  311.     {
  312.         exit (0);
  313.     }
  314. }
  315.  
  316. istream& operator>>(istream& input_stream, FIR& new_FIR)
  317.  
  318. {
  319.     {
  320.         input_stream>>new_FIR.number_of_coefficients;
  321.         new_FIR.Filtered_Coefficients=new float[new_FIR.number_of_coefficients];
  322.         for(int i=0; i<new_FIR.number_of_coefficients; i++)
  323.         {
  324.             input_stream>>new_FIR.Filtered_Coefficients[i];
  325.         }
  326.         return (input_stream);
  327.     }
  328.  
  329. }
  330.  
  331. ostream& operator<<(ostream& output_stream, FIR& the_FIR)
  332. {
  333.     output_stream<<"\n the number of coefficients is:"<<the_FIR.number_of_coefficients;
  334.     for(int i=0;i<the_FIR.number_of_coefficients;i++)
  335.     {
  336.         output_stream<<"\n Filtered coefficient "<<i<<" has a value of:"<<the_FIR.Filtered_Coefficients[i];
  337.     }
  338.     return(output_stream);
  339. }
  340.  
  341. sequence FIR::apply_filter(sequence& _sequence_to_be_filtered) //it won't work with const sequence& _blabla
  342. {
  343.     int number_of_samples_of_sequence_to_be_filtered=_sequence_to_be_filtered.get_number_of_samples(),filtered_number_of_samples=number_of_samples_of_sequence_to_be_filtered+number_of_coefficients-1;
  344.     sequence filtered_sequence(filtered_number_of_samples);
  345.     float filtered_sample;
  346.     for(int i=0; i<filtered_number_of_samples; i++)
  347.     {
  348.         filtered_sample=0;
  349.         for(int j=0; j<=i; j++)
  350.         {
  351.             if(j<number_of_coefficients&&i-j<number_of_samples_of_sequence_to_be_filtered)
  352.             {
  353.                 filtered_sample+=Filtered_Coefficients[j]*_sequence_to_be_filtered.get_value_of_THE_sample(i-j);
  354.             }
  355.             else
  356.             {
  357.                 filtered_sample+=0;
  358.             }
  359.         }
  360.         filtered_sequence.set_value_of_THE_sample(i,filtered_sample);
  361.     }
  362.     return(filtered_sequence);
  363. }
  364.  
  365. int main()
  366. {
  367.     ifstream filter1_input("filter1.txt");  // don't forget to copy the files inside your project folder!!!
  368.     ifstream filter2_input("filter2.txt");
  369.     ifstream input1_input("input1.txt");
  370.     ifstream input2_input("input2.txt");
  371.     FIR filter_1(filter1_input),filter_2(filter2_input);
  372.     sequence sequence1(input1_input),sequence2(input2_input),filtered_sequence;
  373.     filtered_sequence=filter_2.apply_filter(sequence2);
  374.     cout<<filtered_sequence;
  375.     ofstream filtered_data("output.txt");
  376.     filtered_data<<filtered_sequence;
  377.     return 0;
  378. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement