• Content Count

  • Joined

  • Last visited

About Phil_D

  • Rank

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Hello, I see in the specs that the max buffer size is over 16k points, but it seems that I can only get 8192 samples from this code. "FDwfAnalogInBufferSizeInfo" returns 8192. How can I get the 16k samples? I would like to get 16k samples for each ADC channel. I am using the Analog Discovery 2. Thanks! int main(int carg, char **szarg) { HDWF hdwf; STS sts; double* rgdSamples; int cSamples; int cChannel; char szError[512] = { 0 }; int channum = 0; cout << "hello world!"; remove("ADC_results.txt"); printf("Open automatically the first available device\n"); if (!FDwfDeviceOpen(-1, &hdwf)) { FDwfGetLastErrorMsg(szError); printf("Device open failed\n\t%s", szError); return 0; } // get the number of analog in channels FDwfAnalogInChannelCount(hdwf, &cChannel); // enable channels for (int c = 0; c < cChannel; c++) { FDwfAnalogInChannelEnableSet(hdwf, c, true); } // set 5V pk2pk input range for all channels FDwfAnalogInChannelRangeSet(hdwf, channum, 5); // 10MHz sample rate FDwfAnalogInFrequencySet(hdwf, 10000000.0); // get the maximum buffer size FDwfAnalogInBufferSizeInfo(hdwf, NULL, &cSamples); FDwfAnalogInBufferSizeSet(hdwf, cSamples); // acquisition mode set added by Phil FDwfAnalogInAcquisitionModeSet(hdwf, acqmodeSingle); rgdSamples = new double[cSamples]; // configure trigger FDwfAnalogInTriggerSourceSet(hdwf, trigsrcNone); Wait(2); // start FDwfAnalogInConfigure(hdwf, 0, true); printf("Waiting for triggered or auto acquisition\n"); do { FDwfAnalogInStatus(hdwf, true, &sts); } while (sts != stsDone); FDwfAnalogInStatusData(hdwf, channum, rgdSamples, cSamples); fopen_s(&gDatLog, "ADC_results.txt", "a"); for (int i = 0; i < cSamples; i++) { fprintf(gDatLog, "%lg\n", rgdSamples); } fclose(gDatLog); // close the device FDwfDeviceClose(hdwf); //} return 0; }
  2. Thanks @attila. This is great info. Sorry, I should have checked my previous forum questions, but I appreciate the use of the API functions in this response.
  3. Hello, I'm using the Analog Discovery 2, and am using the API to basically use it as a high speed digitizer. What signal level would it take to drive the scope channels to full-scale on the ADC? I see that there are different gain options as well, but I also don't know how to control that with the API, if I even can? We'd like to set our max swing at full scale so we can get the best SNR. Thanks, Phil
  4. Thanks @attila! If I'm using the API functions (from Waveforms SDK reference manual) to configure and acquire data from the ADCs, can I set the high/low gain or the high/low attenuation? Are there specific functions to do this, or do these things happen automatically based on input signal level, even when using the API?
  5. Just to be clear on the setup in case I did post this in the wrong place, I'm using: -Analog Discovery 2 -Waveforms Beta Version 3.11.2 64-bit Qt5.9.7 Windows 7 SP 1 -I'm using the Waveforms Spectrum Analyzer tool a lot, along with the API calls for the ADC. I do also look at the Waveforms scope for troubleshooting.
  6. Thanks for the response @Fa-b! I see the reference to ADG612 in the Analog Discovery 2 Reference Manual: And it's this section that also mentions just the two gain settings, low gain at 0.019 and high gain at 0.212, basically a factor of 10 apart.
  7. I see in the documentation that the ADG612 gain switch between high gain and low gain to the ADC. I see in Waveforms Spectrum analyzer that there are many gain options: 0.01x, 0.1x, 1x, 10x, 100x. Which hardware gain setting is used in Waveforms for those gain settings? Thanks!
  8. One more hopefully quick question here: I would like to export the data after all of the windowing/padding/averaging is complete. I'm using: Spectrum1.Export("C:/Users/User/pjm_2019/data.txt") ...but this gives me the results for Trace1, Trace5, and Trace 6. Is there a way to export only Trace 6? I tried: Spectrum1.Trace6.Export("C:/Users/User/pjm_2019/data.txt") but that gave me an error. Thanks!
  9. Thank you @attila! The windowing before the padding seems to have worked. We'll have to experiment with the CZT to see if it will meet our needs and perhaps be easier than an FFT with the padding script.
  10. Thank you for the continued support on this, @attila! However, I think that the FFT window function is not working right when we pad before doing the windowing function. I'll explain: I'm using another signal processing program called Sigview, and I can add zero padding there as well. I did a bunch of exporting and graphing in Excel to compare padding between Sigview and Waveforms: These are the two FFTs I'm getting in Waveforms, no padding in red and 2x padding in green. You can see that the 2x padding trace in green does not look at all like the red trace without padding. This graph below is comparing Waveforms and Sigview, both Hann windows, both using no padding. They are basically identical, except for a 3dB offset. I used magnitude in Sigview and RMS (dB) in Waveforms, which I think accounts for that 3dB. But the important thing is that the shape of the FFTs is identical. Same data in both cases, same window (Hann), both programs produce the same FFT. Now, I add padding in Sigview. Blue is 2x padding, magenta is no padding. The traces are nearly identical, except the padding in the blue trace helps smooth out the peaks. I think this is how the padding should work. We were wondering if it would be possible to do the math to apply the Hann window on the data array in the script *before* adding the padding? So the order of operations would be: 1. Apply the Hann window to the data 2. Add zero padding 3. Take the FFT It looks like you added the padding, then did the window, then did the FFT. As you mentioned, applying the window after the padding really attenuates the actual data and adds more emphasis to the 0's. I would like to add the padding in Waveforms so we can take advantage of the averaging. With Sigview, I'd have to import many static datasets, process each one separately, and then average in C++, which would be much more laborious and time consuming. We found a couple of links that talk about this padding and windowing: Thanks!
  11. This is great! Thanks @attila! Does this script end up with a rectangular window? The padded, averaged result from the script looks very different from our previous unpadded result. Is there a way to set the type of windowing function that is used in your script? We'd like to use a Hann window. I tried to look through other objects/functions with cntrl+space, but didn't see any way to set the window type. Also, if I wanted more than 2x padding, would I do something like for(var i = 0; i < 2*c; i++) rg.push(t) //4x padding??? Thanks!
  12. Thanks @attila! It only occurred to do this after I saw the loop in your zero padding example.
  13. Is there a way for a script function to have a delay that will wait for a certain number of averages to take place before stopping the trace? Right now, I'm doing this: wait(1.1) Spectrum1.stop() Spectrum1.Export("C:/Users/User/pjm_2019/acquisition410.doc") For the few times I tried this by hand, 1.1 seconds was enough time to get at least 50 averages in my trace. I'm just wondering if there isn't something a little more precise than this, that would maybe get feedback from the Spectrum display and know exactly when 50 averages was achieved. Thanks!
  14. Thanks @attila! Is there a way to have the zero padded trace continue to run and be averaged?