From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.
We appreciate your patience as we improve our online experience.
From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.
We appreciate your patience as we improve our online experience.
04-17-2019 01:29 PM - edited 04-17-2019 01:32 PM
04-18-2019 03:47 AM
Hi,
there are two different chirp signal sources and you use 4 pins for acquisition? If yes, make sure, that both AI are simultaneously in differential mode (consult the pinout). Also monitor the two chirp signals seperately and not at the same time, in order to locate the issue.
Also make sure, that your acquisition rate is at least 32 kHz in order to avoid Aliasing problems. Try to measure a constant frequency 16kHz sine. Does it appear normal in the MAX or Labview? Repat the same with a very low frequency.
If you are reading a lower voltage than the +-4 V peak-to-peak, maybe some part of the data acquisition path acts a low filter, reducing the voltage at higher frequencies.
04-18-2019 08:06 AM
04-18-2019 08:30 AM
You haven't given us a lot of detail to go on regarding *precisely how* your results differ from what you expect. I'll take a somewhat educated guess though.
I suspect wrong *expectations*. On your device, there's one shared A/D converter. When there are multiple channels in a task, they have to take turns having access to it through a process known as multiplexing. As a result, two channels wired to the same signal will *sample* that signal at slightly different times. A highly dynamic signal like a chirp will likely have *actually* changed its value during those microseconds. One shouldn't *expect* the two channels to show the same value.
-Kevin P
04-18-2019 04:57 PM
04-18-2019 07:00 PM - edited 04-18-2019 07:00 PM
Need more info. What are "hits"? How do you define the % of samples that were read "correctly"?
Need to see code. Need to have a more complete description of what you're trying to do with the code, the data, and the analysis. Screencaps of a spreadsheet aren't enough.
Note: it is possible to query (and, to some extent, control) the multiplexing rate. That can tell you the amount of time between A/D conversions for consecutive channels in the AI task. It seems quite odd to me that the 2 AI channels appear to be shifted by multiple *samples* relative to one another. Multiplexing only accounts for a *fraction* of a single sample.
I'm not sure what your long-term goal is, but I suspect from your data that you haven't taken proper measures to get your AO and AI tasks in sync. You can find more info by searching those terms, and as a headstart here's an old thread I remember being in.
-Kevin P
04-19-2019 09:38 AM
So, there was advice given that you need to sample at at least 32 kS/s to capture the frequency content of a 16 kHz signal. This is true, but this will not help the poster. The OP seems to care about accurately characterizing the amplitude of a 16 kHz signal. If you imagine a 16 kHz signal captured at 32 kS/s, you have two samples per signal period. Your sample clock is in no way phase locked to the incoming signal, so you could be sampling at the two zero points or the crest and trough of the sine, or anywhere in between. In fact, your sampling phase is guaranteed to drift over time since your sample rate and signal frequency are not phase locked, so your result will be different every time you run. Additionally, as Kevin correctly pointed out, there is a multiplexer adding additional relative skew between the two channels. This will manifest as a large amplitude difference between the channels since the convert clock period (probably in the 10 us ballpark) represents a huge portion of the period of a 16 kHz signal (62.5 us). In other words, if one channel is sampling at phase = 0 deg, the other could be measuring (10/62.5)*360 = 58 deg later! Not a trivial error.
You can't get around the phase difference between the channels unless you buy a much more expensive simultaneous DAQ card. You can, however, get a much better amplitude representation of the two channels if you significantly increase your sample rate. The very general rule for capturing the shape of the waveform is to sample at least 7-10x times faster than your max frequency of interest. (These numbers are somewhat arbitrary and should not be taken as fact. YOUR APPLICATION requirements need to determine your actual sample rate.) That said, as a starting point, these guidelines mean sampling at at least 16 kHz * 7 = 112 kHz. Your 6211 supports sampling at an aggregate rate of 250 kS/s, so each of your two channels can sample at 125 kHz, which should be enough to give you a much better amplitude representation at 16 kHz. Again, you'll see a large phase difference between channels at this frequency, but they should rise to roughly similar amplitudes.
04-20-2019 10:08 AM
Hi! Croohcifer is right, I worry about accurately and synchronously acquiring the amplitude not only of a 16 kHz signal, but of a range of 0 Hz to 16 kHz, the rate chosen according to the specifications of my device (precisely by the general rule to sample at least 7 to 10 times faster than the maximum frequency of interest).
I am in a survey that requires the simultaneous accuracy of two channels and I am evaluating the accuracy of the two. From Kevin's comment about the multiplexer, and now from Croohcifer, there seems to be no way around the phase difference between them. Is this really correct?
Croohcifer said that I would get a much better amplitude representation of the two channels if I significantly increased my sampling rate, but I'm using the maximum, which is 125 kS / s for each channel. And yes, the amplitudes are approaching. However, the frequency and timing of this information is also extremely important to me, which is not happening.
Explaining my code, initially I generate a 16 kHz signal in 1 second generating 125,000 cells to be sampled by both channels. In the previous figures I compare the signal generated and sent to the AO port with the signals read by both AI ports (whose response vector also has 125,000 cells) and it is on these cells that I realized the displacement and where I make the correct percentages. As Kevin asked, the hits are based on the difference between the read signal and the sent signal on the same cell line with an arbitrary 10% tolerance percentage. If they are within this tolerance, this specific reading is considered a hit. If I shift and compare different lines (equivalent to later microseconds), my hit percentage increases in case I try the 16 kHz, but it does not work for 15 kHz, for example.
I am attaching my code to you:
% This is a MATLAB R2009a code. %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% DAQ Configuration ao = analogoutput('nidaq','Dev2'); % Creates an analogoutput object associated with the NIDAQ USB-6211. addchannel(ao,0,'Sinal de Saída'); % Allocates the AO0 port of the DAQ (circuit power). ao.SampleRate = 125000; % Set SampleRate of the DAQ to ensure that the actual sampling time is compatible with the time programmed in the signal sent to the AO port. ao.TriggerType = 'HwDigital'; ao.HwDigitalTriggerSource = 'PFI5'; ai = analoginput('nidaq','Dev2'); % Creates an analoginput object associated with the NIDAQ USB-6211. set(ai,'InputType', 'Differential'); % Set AnalogInput to Differential Mode. addchannel(ai,[2 4]); % Allocates, respectively, the DAQ ports AI2 / AI10 and AI4 / AI12. ai.SampleRate = 125000; % According to NI-DAQ USB-6211 specifications, the total sampling rate (250 KS / s) of Analog Input ports is divided by the number of ports used. ai.SamplesPerTrigger = 125000; ai.TriggerType = 'Immediate'; ai.ExternalTriggerDriveLine = 'PFI5'; ai.SamplesAcquiredFcnCount = 125000; %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Data Aquisition frequency_analysed = 16000; % 16 kHz time_espace = 0.000008:0.000008:1; % Totalizes 125k time slots in one second. volts = 4; signal_excited = volts*sin(2*pi*frequency_analysed*time_espace)'; % Sine w/ 4V putsample(ao,0) % Ensures that AnalogOutput starts at zero putdata(ao,signal_excited) % Loads the test signal into the AnalogOutput buffer start(ao) % It is necessary to start the AnalogOutput first so that it waits for the beginning of the AnalogInput start(ai) pause(2) [signal_read,time] = getdata(ai); % Returns the result. stop([ai,ao]) % Terminates AnalogOutput and AnalogInput pause(2) putsample(ao,0) Sheet_for_Excel = [signal_excited,signal_read];
04-22-2019 08:51 AM
I am in a survey that requires the simultaneous accuracy of two channels and I am evaluating the accuracy of the two. From Kevin's comment about the multiplexer, and now from Croohcifer, there seems to be no way around the phase difference between them. Is this really correct?
Yes, it is really correct. That is the nature of using any multiplexed acquisition device. You won't be able to synchronize the channels much more tightly than a few microseconds in hardware, so you have two main options if you can't switch to a simultaneous device.
If you have to acquire simultaneously and achieve lower skew in the hardware layer, you'll need to buy a simultaneous DAQ device. I believe the NI USB-6356 is the cheapest multifunction DAQ board that supports simultaneous sampling, but you might be able to cobble together a slightly cheaper solution with cDAQ modules if you don't need all the digital channels of an MIO device
As a general note, when you use the term accuracy, it's important to define exactly what you mean. AC or DC amplitude accuracy? Frequency accuracy? Phase accuracy? It would also be helpful to know how accurate you need the measurements to be (i.e., +/- 100 mV, or +/- 10 Hz, or +/- 10 deg, or whatever). You mentioned "an arbitrary 10% tolerance", but I don't know what that refers to and if that "arbitrary" number is actually what you want in the end. Thus, it's kind of hard to be more helpful. I don't really know what you want.
04-22-2019 03:59 PM
Hi, Croohcifer!
First of all, I would like to reiterate my thanks for the participation of everyone, which has been very significant in analyzing the problem.
In fact, I had already tested the second suggestion outlined in his last note, which refers to measuring each analog input signal independently. In the meantime, I am encountering difficulties with regard to the phase of each spectrum frequency from 0 to 16 kHz, as I realize that I will have to define a specific sampling rate for each frequency, ensuring greater 'accuracy' in each measurement.
In response to the question asked: The term 'accuracy' is based on the amplitude AC (+/- error tolerance = +/- 10%) of the voltage value read by the AIs when compared to that inserted by the AO.
Sincerely,
Carlos Augusto