Announcement

Collapse
No announcement yet.

Announcement

Collapse
No announcement yet.

What is the best formula to calculate Target ID in a pulse induction metal detector?

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • What is the best formula to calculate Target ID in a pulse induction metal detector?

    Hello everyone,
    I am currently designing a pulse induction (PI) metal detector and I’m trying to find the correct method or formula to calculate the Target ID value. I know that Target ID is usually derived from the decay curve of the received signal after the transmit pulse is turned off, but I’m not sure what is the best mathematical approach.
    Some people use time delay (threshold crossing), others use ratios between signal amplitudes at two or more sampling points. Some even mention integrating the signal over a specific time window. But which of these methods is more reliable for identifying different types of metals?
    I would appreciate it if anyone could share their experience, ideas, or any formulas that have worked for them in PI detector designs.
    Thank you in advance!​

  • #2
    Eddy targets respond with an exponential decay so what you want to do is determine the slope of the decay. Using 2 samples and subtracting the results produces a null response for a particular slope. Using this you can determine whether the decay is above or below the "null slope" but you can't determine the actual target slope, unless you move the timing around and find the null for each target. Using 3 samples you can establish 2 different null slopes and then compare the responses ratiometrically to determine the slope. The math shouldn't be difficult but does need to account for the 2 zero crossings, which gives 3 response regions. Also, this should work pretty well in air tests but when you mix in a viscous ground response all bets are off.

    Comment


    • #3
      Hi Carl,
      Thanks a lot for your helpful explanation it really clarified some important points for me.
      In my circuit, the decay signal from the coil goes through an inverting op-amp (LF357H), so what I get at the ADC is an inverted version of the exponential decay it appears as a rising exponential.
      I take 50 samples from this signal. As you mentioned, the zero-slope point (the zero crossing in the original signal) should correspond to the peak in my inverted signal.
      In one test (with no target), the peak appeared at sample index 31, which I assume is the point of zero slope or zero crossing.
      Now I’m trying to understand:
      How can I use this point (its index or timing) to calculate or relate to the Target ID?
      Any guidance would be much appreciated.
      Best regards,
      M. Namvar

      Comment


      • #4
        Originally posted by hodhod View Post
        Hi Carl,
        Thanks a lot for your helpful explanation it really clarified some important points for me.
        In my circuit, the decay signal from the coil goes through an inverting op-amp (LF357H), so what I get at the ADC is an inverted version of the exponential decay it appears as a rising exponential.
        I take 50 samples from this signal. As you mentioned, the zero-slope point (the zero crossing in the original signal) should correspond to the peak in my inverted signal.
        In one test (with no target), the peak appeared at sample index 31, which I assume is the point of zero slope or zero crossing.
        Now I’m trying to understand:
        How can I use this point (its index or timing) to calculate or relate to the Target ID?
        Any guidance would be much appreciated.
        Best regards,
        M. Namvar
        The only discrimination you can achieve with a standard PI detector is based on target conductivity.
        For example, the ground balance setting on White's Electronics TDI can be hi-jacked to eliminate a selected target based on its conductivity, such as small iron nails.
        High conductivity targets will give a low tone, and low conductivity targets will give a high tone. Any targets that fall within the target hole will be rejected.
        Discrimination using this method is very hit and miss, and only works for targets of a similar size, shape, and orientation. It also only works in areas with low ground mineralization.

        It has been theorized many times that it may be possible to take numerous samples along the decay curve and provide ferrous/non-ferrous discrimination this way. Basically, this approach just doesn't work.
        One thing is certain ... you will not be able to generate a target ID using this method.

        Comment


        • #5
          In a pulse induction metal detector, you can estimate Target ID using three key sample points, or "vectors", taken from the decay signal after each pulse:
          a) Early Sample (Vector 1)
          Taken shortly after the TX pulse ends.
          Represents how quickly the eddy current starts decaying.
          High for all metals, especially ferrous (iron).
          b) Middle Sample (Vector 2)
          Taken after a short delay (e.g., 20–30 μs later).
          Begins to show the decay curve.
          Helps distinguish fast vs slow decay.
          c) Late Sample (Vector 3)
          Taken even later (e.g., 50–100 μs).
          Still high; likely non-ferrous, like copper or silver.
          Very low; likely ferrous, like iron.
          Stole and completely mutilated and simplified from the ML patent; by ivconic.
          (FelezJoo PI, 3 debug numbers or Time Constants, if you like),

          Comment


          • #6
            Originally posted by Qiaozhi View Post

            The only discrimination you can achieve with a standard PI detector is based on target conductivity.
            For example, the ground balance setting on White's Electronics TDI can be hi-jacked to eliminate a selected target based on its conductivity, such as small iron nails.
            High conductivity targets will give a low tone, and low conductivity targets will give a high tone. Any targets that fall within the target hole will be rejected.
            Discrimination using this method is very hit and miss, and only works for targets of a similar size, shape, and orientation. It also only works in areas with low ground mineralization.

            It has been theorized many times that it may be possible to take numerous samples along the decay curve and provide ferrous/non-ferrous discrimination this way. Basically, this approach just doesn't work.
            One thing is certain ... you will not be able to generate a target ID using this method.
            I agree it’s not a precise method, especially in tough ground,
            but systems like FelezJoo actually use decay sampling for basic ID.
            It's not 100% accurate, but still helpful for estimating targets during field use.​

            Comment


            • #7
              Originally posted by ivconic View Post
              In a pulse induction metal detector, you can estimate Target ID using three key sample points, or "vectors", taken from the decay signal after each pulse:
              a) Early Sample (Vector 1)
              Taken shortly after the TX pulse ends.
              Represents how quickly the eddy current starts decaying.
              High for all metals, especially ferrous (iron).
              b) Middle Sample (Vector 2)
              Taken after a short delay (e.g., 20–30 μs later).
              Begins to show the decay curve.
              Helps distinguish fast vs slow decay.
              c) Late Sample (Vector 3)
              Taken even later (e.g., 50–100 μs).
              Still high; likely non-ferrous, like copper or silver.
              Very low; likely ferrous, like iron.
              Stole and completely mutilated and simplified from the ML patent; by ivconic.
              (FelezJoo PI, 3 debug numbers or Time Constants, if you like),

              Thank you for your explanation it's actually very close to what I'm trying to implement.
              I'm particularly interested in the numeric Target ID value as used in systems like FelezJoo. Based on your suggestion, I plan to take three samples from the decay signal: early, middle, and late.
              Now I wonder:
              Is there a preferred mathematical model to process these three values?
              Should I compute decay slopes, or use ratios/differences between the samples?
              And how would you recommend normalizing the result to a 1–100 Target ID scale?
              If you have any experience or ideas about the best formula or approach, I'd really appreciate it!​

              Comment


              • #8
                I am a "bad address" for such questions because I always think minimalistically.
                I haven't moved too far from the Atmega328P yet.
                That's why I think only within the capabilities and resources of that processor.
                I will offer you what is possible to test on the Atmega processor.
                Use ratios and differences to estimate decay shape.
                V1 = Early sample (shortly after RX window opens)
                V2 = Mid sample
                V3 = Late sample

                Log-Slope Based Formula:
                float ratio1 = (float)(V2 + 1) / (V1 + 1);
                float ratio2 = (float)(V3 + 1) / (V2 + 1);
                float decaySlope = log10(ratio2) - log10(ratio1);
                float rawTID = decaySlope * -1000.0; // Flip sign; slow decay = higher value

                Why log? Eddy current decay is exponential, so log transforms it to a linear domain.
                Why the difference of logs? Approximates the second derivative or curvature of the decay.
                Why flip the sign? Because slow decay (non-ferrous) gives ratios close to 1, so log(ratio) ≈ 0 → we invert it so non-ferrous gets high TID.
                However... the "catch 22" is:
                ATmega328P does support float operations, but it does not have hardware floating-point or math functions like log10() built-in — they are provided via software (from the AVR libm math library), and they are slow and code-size heavy.
                So for "academic purposes" this can be tested. But serious implementation requires serious hardware.
                But you have a rough picture.
                I am still so impressed with what author FelezJoo PI was able to do so many years ago.
                I'm not the least bit original when I mentioned the ML patent. The author FelezJoo PI referred to that patent even then.

                Comment


                • #9
                  If you haven't until now; I suggest that you first make a FelezJoo PI and "play" with that detector.
                  You have 3 "debug" numbers, in the "debug" menu.
                  You will notice that those 3 numbers are very dynamic and tend to change with changes in coil specs, but also with changes around one and the same coil (magnetic changes).
                  As well as when changing work parameters by the user (you) in the menus.
                  These other changes are in narrower ranks.
                  This is a very good substitute for visual monitoring of the process, what happens with 3 "vectors" (samples) in real conditions.
                  ​Why FelezJoo PI? Because it is a very cheap platform and the costs are ridiculous. Everything else will cost you more.

                  Comment


                  • #10
                    Originally posted by ivconic View Post
                    If you haven't until now; I suggest that you first make a FelezJoo PI and "play" with that detector.
                    You have 3 "debug" numbers, in the "debug" menu.
                    You will notice that those 3 numbers are very dynamic and tend to change with changes in coil specs, but also with changes around one and the same coil (magnetic changes).
                    As well as when changing work parameters by the user (you) in the menus.
                    These other changes are in narrower ranks.
                    This is a very good substitute for visual monitoring of the process, what happens with 3 "vectors" (samples) in real conditions.
                    ​Why FelezJoo PI? Because it is a very cheap platform and the costs are ridiculous. Everything else will cost you more.


                    Thank you very much! Your help was truly valuable . you gave me the key clue I needed, and I’ll figure out the rest through my own effort.

                    I replied a bit late because, as you advised, I first built and tested the Felezjo device before starting my own design.

                    During this time, I assembled the Felezjo and studied the debug triplet values in detail. I noticed that these three values are not just raw samples, or at least not fully dependent on signal amplitude. In my experimental design, I collect three samples from the start, middle, and end of the signal.

                    Without a metal target, the values are about A250, B760, and C803. But when metal is present, they drop sharply to something like A22, B26, and C90. Interestingly, in Felezjo, even when the sensor reading hits 999, these values don’t drop much. A might drop by 80, B by 25, and C by 15 at most. It feels like the values are being normalized in some way.

                    Thanks again!

                    Comment


                    • #11
                      Hi everyone,

                      Thanks to those who tried to help.

                      After a lot of effort and research, I was finally able to understand the overall concept of Target ID in pulse induction metal detectors, and I managed to derive a formula for calculating the ID of metals.

                      If anyone is interested, I’d be happy to share my experience and findings.

                      Special thanks to Mr. Carl-NC and ivconic for their contributions and insights.

                      Best regards

                      Comment


                      • #12

                        Comment

                        Working...
                        X