Easy to Use | Easy to Integrate | Easy to Support

# Measurement Computing Data Acquisition Knowledgebase

Home Tags Glossary
Welcome Guest ( )

MatLab Video:MatLab_Analog_Input

Welcome to using Measurement Computing devices with Matlab. Today I will be using the USB-1608GX-2A0 to read an input signal and compute its amplitude spectrum.

Let’s begin…Start a new script file to hold the commands

I am going to begin by defining a few variables. These are used in my display routine and help make the code clearer.

>>count = 256;
This is the number of samples I want to read;

>>rate = 256;
This is the frequency at which samples are read.

>>range = 5.0;
My device supports voltage ranges of 1, 2, 5 & 10. For this example I want 5 volts

Now I need to get the analog input object which contains the acquisition settings.
>>ai = analoginput( ‘mcc’, 0 );
The string ‘mcc’ is the driver identifier and the 0 is the board number assigned by the InstaCal program.

>>ch = addchannel( ai, 0 );
Where zero is the channel number

Set the input range
>>ch.InputRange = [-range range];

Set the sample rate
>>ai.SampleRate = rate;

set the number of samples to read
>>ai.SamplesPerTrigger = count;

And the trigger method
>>ai.TriggerType = ‘Immediate’;

The start command will start the acquisition running
>>start(ai);

And to read the voltage data use the getdata function
>>y = getdata(ai);

Use the FFT function to change the data to frequencies
>>yy = fft( y ) / count;

And the amplitude spectrum is twice the absolute value of the FFT
>>yyy = 2* abs( yy );

Finally, I will name my script FetchData.
Now I need an input signal and for that I have a Generator routine that outputs a complex waveform on the analog output line. To complete the electrical connection I have connected a wire between the output and the input. To display the data I have another routine called Plot that will graph the voltage and frequency data.
Now let’s test
>>gen; fetchdata; PlotData;

Refer to the transcript for a listing on all three scripts used in this video.

%Number of samples to acquire in powers of 2 (ie 64,128,256,512 etc)
count = 256;

%Rate at which the samples are to be acquired
rate = 256;

%Input voltage range
range = 5.0;

%set the input range for the channel
ch.InputRange = [-range range];

%set the sample rate
ai.SampleRate = rate;

%set number of samples to acquire
ai.SamplesPerTrigger = count;

%set acquisition start type
ai.TriggerType = 'Immediate';

%Start the acquisition
start(ai);

y = getdata(ai);

%calculate complex spectrum
yy = fft(y)/count;

%calculate amplitude spectrum
yyy = 2* abs(yy);

Analog Output Script

%Waveform length
cnt = 1024;

%Waveform update rate
fs = 4096;

%number of repeated cycles
cycles = 50;

%calculate complex waveform
angle = 2*pi/cnt;
x = (0:cnt-1) * angle;

y = sin(x * 2) + .5 * sin(x * 4) + 2 * sin(x * 8);

%get analog output object
ao = analogoutput('mcc',0);

%set analog output parameters
set(ao,'SampleRate',fs);
set(ao,'RepeatOutput',cycles);

ch = addchannel( ai, 0 );

%use the transpose function and send the data to ao
putdata(ao,transpose(y));

%start the waveform
start(ao);

Plot Script

%create window for displaying plots
h = figure;

%create an x-axis for time data
x = transpose((0:count-1) * 1 / rate);

%create x-axis frequency data
xx = transpose((0:count-1) * rate / count);

%plot the time data
subplot(2,1,1), plot(x(1:count),y(1:count));

%Scale and label plot display
axis([0.0 (count * 1/rate) -range range ]);
title('Voltage Waveform');
xlabel('Time');
ylabel('Volts');

%plot the frequency data
n = count / 2;
subplot(2,1,2),plot(xx(1:n),yyy(1:n));

%Scale and label plot display
axis([0.0 (rate/2) 0 range/2 ]);
title('Amplitude Spectrum');
xlabel('Frequency (Hz)');
ylabel('Volts');