Measurement Studio for .NET Languages

cancel
Showing results for 
Search instead for 
Did you mean: 

Using peakDetect on an input signal from a daq card

Hello,

 

I am reading in a generated sine wave and it seems to be working correctly, but I need to be able to find the peak as I am going to be comparing the voltage and current of an AC circuit when I get the basics working. The problem I'm having is that the peak detect wont work on the graph as I believe it does not just contain exclusively integer values, is there a way of just taking integer values from the graph and using the peak detect function.

The following is the code I have so far, the daq task was all completed using the wizard so it is just standard.

Public Class Form1
    Dim amplitudePeak() As Double
    Dim waveform() As Double
    Dim locationPeak() As Double
    Dim secondDerivativePeak As Double

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Try
            Dim acquiredData() As NationalInstruments.AnalogWaveform(Of Double) = DaqTaskComponent1.Read
            ACsignal.PlotWaveforms(acquiredData)
        Catch ex As NationalInstruments.DAQmx.DaqException
            MessageBox.Show(ex.Message, "DAQ Error", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        End Try
    End Sub

    Private Sub DaqTaskComponent1_Error(sender As Object, e As DAQmx.ComponentModel.ErrorEventArgs) Handles DaqTaskComponent1.Error
        'TODO: Handle DAQ errors.
        Dim message As String = e.Exception.Message
        MessageBox.Show(message, "DAQ Error", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        DaqTaskComponent1.StopTask()
    End Sub

    Private Sub DetectionOfPeaks()
        Dim waveform() As Double
        Dim peakPolarity As NationalInstruments.Analysis.Monitoring.PeakPolarity = Analysis.Monitoring.PeakPolarity.Peaks
        Dim peakDetect As NationalInstruments.Analysis.Monitoring.PeakDetector = New NationalInstruments.Analysis.Monitoring.PeakDetector
        ACsignal = waveform
        'Detection of Peaks
        peakDetect.Detect(waveform, True, amplitudePeak, locationPeak, secondDerivativePeak)

This is the main error I am experiencing

Error 3 Value of type '1-dimensional array of Double' cannot be converted to 'NationalInstruments.UI.WindowsForms.WaveformGraph'. 

 

Any help is greatly appreciated!

 

0 Kudos
Message 1 of 3
(3,756 Views)

Hello gary,

 

Is it possible to send me the command that you are using when you are calling DetectionOfPeaks? 

Is it also possible to send a screenshot of the error message?

 

Best regards,

 

Jonas

National Instruments

Applications Engineer UK&IRE

0 Kudos
Message 2 of 3
(3,719 Views)

Hi Jonas,

 

I managed to solve the problem I was having with the peak detect I used the following code to get the peak and number of peaks

  Dim acquiredData() As NationalInstruments.AnalogWaveform(Of Double) = DaqTaskComponent1.Read
            ACsignal.PlotWaveforms(acquiredData)

            Dim a() As Double
            a = acquiredData(0).GetScaledData

 initialthreshold = -2.4 'Setting the initial threshold'
            initialwidth = 10 'Setting the initial width'

            'To detect the associated peaks withing the wave'
            peakdetect.Reset(initialthreshold, initialwidth, 0)
            peakdetect.Detect(a, True, amplitudePeak, locationPeak, secondDerivativePeak)

Now the graph is plotting fine, there is one more problem I am having, is there anyway that with the given "a" max amplitude along the Y axis, I am able to get a value for the corresponding X axis value which in this case would be a time value. As I am inputting 2 sine waves and I need to find the difference on the X axis between the 2 peaks. This is what I have so far,

 Dim acquiredData() As NationalInstruments.AnalogWaveform(Of Double) = DaqTaskComponent1.Read
            ACsignal.PlotWaveforms(acquiredData)

            Dim a() As Double
            a = acquiredData(0).GetScaledData
            Dim b() As Double
            b = acquiredData(1).GetScaledData

            initialthreshold = -2.4 'Setting the initial threshold'
            initialwidth = 10 'Setting the initial width'

            'To detect the associated peaks withing the wave'
            peakdetect.Reset(initialthreshold, initialwidth, 0)
            peakdetect.Detect(a, True, amplitudePeak, locationPeak, secondDerivativePeak)

            'To detect the associated peaks withing the wave'
            peakdetect.Reset(initialthreshold, initialwidth, 0)
            peakdetect.Detect(b, True, amplitudePeak, locationPeak, secondDerivativePeak)

            'To display the number of peaks found in signal
            numOfPeaksFound = amplitudePeak.Length
            peaksFoundNumericEdit.Text = numOfPeaksFound
            peakAmplitudeNumericEdita.Value = a.Max

            'To display the number of peaks found in signal
            numOfPeaksFound = amplitudePeak.Length
            peaksFoundNumericEdit.Text = numOfPeaksFound
            peakAmplitudeNumericEditb.Value = b.Max

Thank you for the help it is greatly appreciated!

Gary

0 Kudos
Message 3 of 3
(3,715 Views)