예제 #1
0
    def test__002_t(self):
        """
        Generate a signal with SNR as given below.
        Calculate the RMSE.
        """
        nsamples = 1024
        n_trials = 100
        samp_rate = 32000
        SNR = 20  # in dB
        self.siggen = siggen.signal_generator(n_sinusoids=1,
                                              SNR=SNR,
                                              samp_rate=samp_rate,
                                              nsamples=nsamples * n_trials)

        self.stream = gr.stream_to_vector(gr.sizeof_gr_complex, nsamples)
        self.esprit = specest.esprit_vcf(n=1, m=64, nsamples=nsamples)
        self.sink = gr.vector_sink_f(vlen=1)
        # wire it up ...
        self.tb.connect(self.siggen, self.stream, self.esprit, self.sink)
        self.tb.run()
        MSE = 0.0
        omega = self.siggen.omegas()[0]
        for i in range(n_trials):
            MSE += (omega - self.sink.data()[i])**2.0
        print '\n' + 70 * '-'
        print 'Testing specest_esprit_vcf ...'
        print 'Ran %u trials to estimate the frequency' % n_trials
        print 'Used %u samples to estimate the frequency' % nsamples
        print 'Sampling rate %s' % eng_notation.num_to_str(samp_rate)
        print 'SNR of %u dB' % SNR
        print 'Root mean square error %g' % numpy.sqrt(MSE / n_trials)
        print 'Cramer-Rao Bound %g' % numpy.sqrt(
            6 / 10**(SNR / 10.0) / nsamples**3)
        print 70 * '-'
예제 #2
0
    def test__002_t (self):
        """
        Generate a signal with SNR as given below.
        Calculate the RMSE.
        """
        nsamples = 1024
        n_trials = 100
        samp_rate = 32000
        SNR = 20 # in dB
        self.siggen = siggen.signal_generator(n_sinusoids = 1,
                                              SNR = SNR, samp_rate = samp_rate,
                                              nsamples = nsamples * n_trials)

        self.stream = gr.stream_to_vector(gr.sizeof_gr_complex, nsamples)
        self.esprit = specest.esprit_vcf(n=1, m=64, nsamples = nsamples)
        self.sink = gr.vector_sink_f(vlen=1)
        # wire it up ...
        self.tb.connect(self.siggen, self.stream, self.esprit, self.sink)
        self.tb.run()
        MSE = 0.0
        omega = self.siggen.omegas()[0]
        for i in range(n_trials):
            MSE += (omega - self.sink.data()[i])**2.0
        print '\n' + 70*'-'
        print 'Testing specest_esprit_vcf ...'
        print 'Ran %u trials to estimate the frequency' % n_trials
        print 'Used %u samples to estimate the frequency' % nsamples
        print 'Sampling rate %s' % eng_notation.num_to_str(samp_rate)
        print 'SNR of %u dB' % SNR
        print 'Root mean square error %g' % numpy.sqrt(MSE/n_trials)
        print 'Cramer-Rao Bound %g' % numpy.sqrt(6/10**(SNR/10.0)/nsamples**3)
        print 70*'-'
예제 #3
0
    def test__001_t(self):
        """
        Generate a signal with n_sinusoids sinusoids
        and a SNR of SNR.
        Another Check to see if it's working at all.
        """
        n_sinusoids = 2
        nsamples = 2048
        samp_rate = 32000
        SNR = 10  # in dB
        decimals = 3
        self.siggen = siggen.signal_generator(n_sinusoids=n_sinusoids,
                                              SNR=SNR,
                                              samp_rate=samp_rate,
                                              nsamples=nsamples)

        self.stream = gr.stream_to_vector(gr.sizeof_gr_complex, nsamples)
        self.esprit = specest.esprit_vcf(n=n_sinusoids,
                                         m=100,
                                         nsamples=nsamples)
        self.sink = gr.vector_sink_f(vlen=n_sinusoids)
        # wire it up ...
        self.tb.connect(self.siggen, self.stream, self.esprit, self.sink)
        for i in range(100):
            self.tb.run()
            for (g, e) in zip(sorted(list(self.sink.data())),
                              self.siggen.omegas()):
                self.assertAlmostEqual(g, e, decimals)
예제 #4
0
 def test__001_t (self):
     """
     Generate a signal with n_sinusoids sinusoids
     and a SNR of SNR.
     Another Check to see if it's working at all.
     """
     n_sinusoids = 2
     nsamples = 2048
     samp_rate = 32000
     SNR = 10 # in dB
     decimals = 3
     self.siggen = siggen.signal_generator(n_sinusoids = n_sinusoids,
                                           SNR = SNR, samp_rate = samp_rate,
                                           nsamples = nsamples)
     self.stream = blocks.stream_to_vector(gr.sizeof_gr_complex, nsamples)
     self.esprit = specest.esprit_vcf(n=n_sinusoids, m=100, nsamples = nsamples)
     self.sink = blocks.vector_sink_f(vlen=n_sinusoids)
     self.tb.connect(self.siggen, self.stream, self.esprit, self.sink)
     for i in range(100):
         self.tb.run()
         for (g,e) in  zip(sorted(list(self.sink.data())), self.siggen.omegas()):
             self.assertAlmostEqual(g,e, decimals)