This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

missing pulse detectar

i must have the code for detecting a missin g pulse?
do some one have some for me to see?

  • The standard problem.

    If you have a question, you must supply a complete problem description.

    It sounds like you may have a g sensor - but we don't know which, or how it is connected. And we don't know why you would have lost G pulse to even figure out that you have lost. Exactly how do you loose it?

    If you do not know enough to give a complete problem description, then neither you nor we may have a chance of knowing the answer.

  • And how do you distinguish a missing G pulse from a missing F or H pulse...?

  • If you do not know enough to give a complete problem description, then neither you nor we may have a chance of knowing the answer.

    Per, I must disagree. There is nothing wrong with providing an 'answer' with the same thoroughness as the question.

    Answer
    (start here...)

    library IEEE;
    use     IEEE.STD_LOGIC_1164.ALL;
    use     IEEE.STD_LOGIC_ARITH.ALL;
    use     IEEE.STD_LOGIC_UNSIGNED.ALL;
    
    --============================================================================
    --          ENTITY for "The Case Of The Missin G Pulse"                     --
    --============================================================================
    entity mPulse is
    
        Port (
            --------------------------------------------------------------
            -- IO port definitions                                      --
            --------------------------------------------------------------
            RST     : in    std_logic; -- Reset all states to known values
            Clock   : in    std_logic; -- The time-base
            Pulses  : in    std_logic; -- The incoming pulse train
            Enable  : in    std_logic; -- Enables the function
            Missin  : out   std_logic  -- The result (without the 'G')
        );
    
    end mPulse;
    

    And then you simply write the architecture as needed. It almost writes itself.

    --Cpt. Vince Foster
    2nd Cannon Place
    Fort Marcy Park, VA

  • lol gatmal

    i made mistake!!!!! alrigt!!!!!!!

    it is {{{not}}} a missin g pulse . it is a missing pulse.

    aneybody answer me now plz?????

  • "it is a missing pulse.

    aneybody answer me now plz?"

    Sure, but first, describe "a missing pulse"?

  • I stand corrected. Will try to redeem myself.

    // \note The following library is dependant on the current
    // geographical location (latitude + longitude +
    // distance from the mean earth radius) moon
    // location, speed and travel direction, and sensor
    // orientation, since the g pulse
    // detector is calibrated relative to the local
    // gravitational levels (and influences of coriolis
    // forces) at the sensor location.
    // \todo A laser gyro and GPS tracker should be integrated
    // for automatic adjustments of the reference limits
    // for the g pulse sensor, and to allow detect failures
    // to be reported in relation to the GPS reference time.
    // \note Calibration or orientation differences between
    // G and H pulse sensors will affect the reliability of
    // the error detector. The H pulse detector should normally
    // be calibrated with a higher detect level (percentage
    // depending on current security classification) to
    // make sure that a too sensitive H pulse sensor generates
    // alarms when the G pulses are just below the detection
    // levels.
    bool have_seen_g_pulse;
    bool any_g_missing;
    bool last_g_missing;
    unsigned detector_timeout;
    timestamp time_last_failure;
    timestamp time_first_failure;
    
    void init(void) {
        // Initialized to true even if no G pulse seen yet,
        // to make sure we don't get a false error in case
        // the supervision is started between a G and an H
        // pulse.
        have_seen_g_pulse = true;
        any_g_missing = false;
        last_g_missing = false;
        comm_failure = false;
        detector_timeout = get_now() + COM_FAILURE_TMO;
        clear_timestamp(time_first_failure);
        clear_timestamp(time_last_failure);
    }
    
    void report_g_pulse(void) {
        if (detector_timeout()) {
            if (!any_g_missing) {
                get_timestamp(time_first_g_missing);
            }
            get_timestamp(time_last_g_missing);
            last_g_msising = true;
            any_g_missing = true;
        }
        have_seen_g_pulse = true;
        last_g_missing = false;
        detector_timeout = get_now() + COM_FAILURE_TMO;
    }
    
    void report_h_pulse(void) {
        if (!have_seen_g_pulse || detector_timeout()) {
            // Since everyone knows that H always follows G,
            // a detect of H without a G implies a lost
            // G.
            if (!any_g_missing) {
                get_timestamp(time_first_g_missing);
            }
            get_timestamp(time_last_g_missing);
            last_g_msising = true;
            any_g_missing = true;
        }
        // Arm detector.
        have_seen_g_pulse = false;
        detector_timeout = get_now() + COM_FAILURE_TMO;
        comm_failure = false;
    }
    
    bool detector_timeout() {
        return get_now() > detector_timeout;
    }
    
    bool have_mmissed_last_g_pulse(timestamp* when) {
        if (last_g_missing) {
            if (when) *when = time_last_g_missing;
            return true;
        }
        if (detector_timeout()) {
            if (!any_g_missing) {
                get_timestamp(time_first_g_missing);
                any_g_missing = true;
            }
            get_timestamp(time_last_g_missing);
            last_g_missing = true;
            comm_failure = true;
            if (when) *when = time_last_g_missing;
            return true;
        }
        return false;
    }
    
    bool have_missed_any_g_pulse() {
        if (any_g_missing) {
            if (when) *when = time_last_g_missing;
            return true;
        }
        if (detector_timeout()) {
            if (!any_g_missing) {
                get_timestamp(time_first_g_missing);
                any_g_missing = true;
            }
            get_timestamp(time_last_g_missing);
            last_g_missing = true;
            comm_failure = true;
            if (when) *when = time_last_g_missing;
            return true;
        }
        return false;
    }
    

  • Hello,

    It would appear that some people here have too much spare time on their hands!?

  • Clearly, but Per is still my hero!

  • <admire>Clearly, but Per is still my hero!</admire>

    I think that this forum should show pictures of all the top posters. Then we could all see the true beauty of wisdom.

  • robhan visan,

    A way to detect it is to monitor the pulses, determine the time between them, and then determine if a pulse is missing based upon the expected time it should have occurred.

    Pseudo-code:

        if( pulse )
        {
            capture time
    
            difference in time = (current time) - (previous time);
    
            if( difference > expected time )
            {
                missing pulse has occured
            }
            else
            {
                missing pulse has not occured
            }
        }
    

    a close 'C' approximation:

    
    #define EXPECTED_TIME_BETWEEN_PULSES    50  // >50ms means too much time
    
    void pulse_isr( void ) // a logic pulse interrupts CPU
    {
        static unsigned int current_time  = 0;
        static unsigned int previous_time = 0;
        int difference;
    
        current_time = Get_Timestamp( ); // needs a timing routine accessor
    
        difference = ( current_time - previous_time );
    
        if( difference > EXPECTED_TIME_BETWEEN_PULSES )
        {
            Flag_Missing_Pulse = TRUE;  // the flag that say's "Missing"
        }
        else
        {
            Flag_Missing_Pulse = FALSE;
        }
    
        previous_time = current_time;   // for next time
    
    
    }
    

    This example will let you know that a missing pulse occurred one pulse AFTER it has been 'missed.'

    There are better ways to do this, but this is just an example.

    I hope you get a good grade on this assignment.

    NOTE: Per still needs some redeeming... his "H follows G" rule doesn't account for the field-tested sobriety research data collected over the past 30+ years. So the real-world missing pulse detector must not rely on this H-G relationship.

    --Cpt. Vince Foster
    2nd Cannon Place
    Fort Marcy Park, VA

    P.S. FYI... I found Jack's photo...

    inpraiseofsardines.typepad.com/.../sardine_man_1.jpg

  • But my code _does_ watch out for a timeout between two G pulses, in case you have problems with the H detector, or for some reason have managed to run the alphabet in the reverse order :)

  • I think that this forum should show pictures of all the top posters. Then we could all see the true beauty of wisdom.

    Per really does not need my advocacy, but for your information, this guy is by all means one of most knowledgeable people around here. If you want to take on somebody, well, you better pick me...