Measurement Studio for .NET Languages

cancel
Showing results for 
Search instead for 
Did you mean: 

FFT Zoom : how to get a better analysis of zoomed part

First, I'm developping with Visual Studio 2010, Measurement Studio 2013, NI-DAQmx 14.0, Framework 4.0, Windows 7, NI-PCI 6250

 

At the date of today, i'm testing C# & Measurement studio / daq mx and I don't use daq assistant (see post : I created here)

 

I'm acquiring an analog signal, plotting it, get an FFT and plotting it.

I would like to make some real time analysis thanks to the FFT plot.

At start my FFT is shown on all the frequency domain I study (10 Hz to 350kHz)

 

I changed Range thanks to a toolstrip I made : Start Freq, Stop Freq.

I get my zoom, cool.

but how can I make my library reprocess the FFT between the start and stop frequency to get a better definition ?

If I do things wrong from the start any advice is welcome 🙂

 

Code :

        private void AnalogInCallback(IAsyncResult ar)
        {
            try
            {
                if (taskRunning)
                {
                    //Read the available data from the channels
                    data = analogInReader.EndReadMultiSample(ar); //data is double[,]
                    //Plot your data here
                    waveformGraph1.PlotYMultiple(data);
                    analogInReader.BeginReadMultiSample(SAMPLES_PER_CHANNEL, analogCallback, null); //repetition de la ligne du Start_Click pour MAJ dans le runtime
                    // Generate the complex signal and apply the selected window to it
                    NationalInstruments.ComplexDouble[] complexSignal = new NationalInstruments.ComplexDouble[SAMPLES_PER_CHANNEL - 1];
                    for (int i = 0; i < complexSignal.Length; i++)
                    {
                        complexSignal[i] = new NationalInstruments.ComplexDouble(data[0, i], data[0, i]);
                    }
                    ScaledWindow.CreateHammingWindow();
                    // Display the power spectrum
                    double[] powerSpectrum = Transforms.PowerSpectrum(complexSignal);
                    freqDomainWaveformGraph.PlotY(powerSpectrum);


                }

 

        private void toolStripStart_Click(object sender, EventArgs e)
        {
            if (!taskRunning)
            {
                try
                {
                    myTask = new Task("aiTask");
                    //Create a virtual channel                    myTask.AIChannels.CreateVoltageChannel("Dev1/Ai0",
                        "aiChannel",
                        AITerminalConfiguration.Differential,
                        Convert.ToDouble("-2"),
                        Convert.ToDouble("+2"),
                        AIVoltageUnits.Volts);
                    //Configure the timing parameters
                    myTask.Timing.ConfigureSampleClock("", SAMPLE_FREQUENCY,
                        SampleClockActiveEdge.Rising,
                        SampleQuantityMode.ContinuousSamples, SAMPLES_PER_CHANNEL);
                    //Verify the Task
                    myTask.Control(TaskAction.Verify);
                    taskRunning = true;
                    analogInReader = new AnalogMultiChannelReader(myTask.Stream);
                    //analogInReader.SynchronizingObject = this;
                    analogCallback = new AsyncCallback(AnalogInCallback);
                    analogInReader.BeginReadMultiSample(SAMPLES_PER_CHANNEL, analogCallback, null);
                }

When I click on OK button in my toolstrip

        private void butt_FreqDomain_OK_Click(object sender, EventArgs e)
        {
            double a, b, c;
            a = Double.Parse(text_StartFreq.Text);
            b = Double.Parse(text_StopFreq.Text);
            c = a + (b - a)/2;
            text_CenterFreq.Text = c.ToString();
            freqDomainPlot.XAxis.Range = new NationalInstruments.UI.Range(Double.Parse(text_StartFreq.Text), Double.Parse(text_StopFreq.Text));
        }

Captures :

without zoom

screen3.PNG

With zoom

screen4.PNG

Second question :

I'm generating a 55kHz Wave signal, where is the problem ? why the fundamental is at 55002 ~55003 Hz ?

 

Thank you in advance

 

0 Kudos
Message 1 of 2
(4,762 Views)

Hello,

 

If you want to have more precision you could take more point using FFT zero padding : http://www.bitweenie.com/listings/fft-zero-padding/

 

An another solution is to use the FFT Zoom function which is use in CVI labwindows, we can find it in “NI Spectral Measurement Toolkit C”.

Here is the explanation : http://www.ni.com/white-paper/3995/en/

 

I hope this could answer your first question.

 

Regards,

 

 

Maxime G. | Application Engineer
National Instruments France

0 Kudos
Message 2 of 2
(4,597 Views)