Write a LabView code that acquires a jpeg image

Hello,
i need help in doing the following on labview,
a. Decompose the picture into the RGB arrays and display each color (red, blue, and  green arrays)on separate graphs
b. Crop a 200pixels x 200pixels rectangle around the center of the image and display
can it be done ? 
Thank You 

Hi chris696!
I suggest you to use NI Example Finder to look for sample code.
You can find this, in LabVIEW Help >> Find examples... menu.
Search for jpeg, and choose for exmaple ReadFileExample.vi from the reults.
Here are some hint regarding to the topic as well:
http://zone.ni.com/reference/en-XX/help/370281P-01/nivisionlvbasics/acquire_or_read_an_image/
BR,
Balazs Nagy

Similar Messages

  • Is it possible to write a as3 code that will search for particular file in the loacal disk

    Is it possible to write a as3 code that will search for particular file in the loacal disk

    Not for a web-based design

  • Jpeg image on phone

    Good day.
    I try to make a MIDP 2.0 application that load a jpeg image from a netweok camera and display it on Canvas.
    I load image from http ad store it on a byte array, then Image.createImage(data, 0, len); where data is the array and len is the data length.
    At the and I make repaint();
    On method paint I make g.drawImage(image, 0,0, Graphics.LEFT|Graphics.TOP);
    If I try it on Wireless Toolkit 2.2 emulators it run correctly.
    On Nokia emulators. Sony-Ercisson MIDP 2.0 emulator and on Wireless Toolkit 2.1 emulators it makes a NullPointer Exception in method paint.
    java.lang.NullPointerException
    at CanonCamera.ImageCanvas.paint(+28)
    at javax.microedition.lcdui.Canvas.callPaint(+80)
    at javax.microedition.lcdui.Display.repaint(+78)
    at javax.microedition.lcdui.Display.registerNewCurrent(+238)
    at javax.microedition.lcdui.Display.screenChange(+55)
    at javax.microedition.lcdui.Display$DisplayManagerImpl.screenChange(+5)
    at com.sun.midp.lcdui.EmulEventHandler.screenChangeEvent(+24)
    at com.sun.midp.lcdui.DefaultEventHandler$QueuedEventHandler.run(+750)
    If I try my program On Nokia 6600 device a bad image format error message appears.
    I have tried to load the leaf.jpg image from my web site with the program only changing the url.
    This file is part of Wireless Toolkit 2.2 PhotoAlbum demo.
    In all platforms it run correctly.
    Why the most important image has problems?
    Best regards.
    Stefano Errani

    I share the same issue and question.
    I too have no problem downloading images over the phone and creating an Image, as long as the image is a PNG.
    im = Image.createImage(imageData, 0, imageData.length);
    If the image is a PNG, all is well. If, on the other hand, the Image is a JPEG, the application chokes on this line (the Illegal Argument Exception). Since I am trying to pull images dynamically off a webcam too, I have to be able to do it with JPEG.
    From what I can tell, JSR 189 will support JPEG, but it's not released yet. For now, it's PNG's only. Obviously, some smart people have solved this problem somehow, but I can't find any source code using Google or otherwise that shows how to do it. Can someone please enlighten us?
    Thanks!

  • How to create a white back ground for Jpeg image to upload on various webites

    Hello, I have Photoshop Elements 11. I designed a book cover with Microsoft Word 2010 and saved the file as a Pdf. I want to upload an image of this book cover to various web sites that require a Jpeg image and the book cover has to cover at least 85% of the image and require a pure white back ground. Pixel size can be 1,000 or more. Can somebody help me? I did go to the library to get reference books but, I can't ascertain from these books how to do this. I am a beginner to Photoshop and realize I will have to get training for future projects. Thank you very much for any information you provide to me. I wanted to upload an image from my computer to show you the book cover but there was a dialogue box that appeared saying the file was too large to upload. The book cover I designed is 8.5' x 11.0"

    Wow! I can't thank you enough! There is not enough space here for me to express my gratitude for helping me! You are a saint! I had the Pdf files uploaded and stored in my organizer, so the images of the book covers appeared in the bottom of Photoshop Elements 11 Editor. I did exactly as you instructed, then sent the Jpeg  to Amazon and it uploaded in less than 5 minutes. The image could be a little bigger, but now I can utilize the software enough to tweak it.Thanks so much!!!! Any other ideas would be greatly appreciated. Take care and have a great 2013!

  • Problem while executing the code( that covert jpeg images to movie)

    http://java.sun.com/products/java-media/jmf/2.1.1/solutions/JpegImagesToMovie.html
    here is the code:
    * @(#)JpegImagesToMovie.java     1.3 01/03/13
    * Copyright (c) 1999-2001 Sun Microsystems, Inc. All Rights Reserved.
    * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use,
    * modify and redistribute this software in source and binary code form,
    * provided that i) this copyright notice and license appear on all copies of
    * the software; and ii) Licensee does not utilize the software in a manner
    * which is disparaging to Sun.
    * This software is provided "AS IS," without a warranty of any kind. ALL
    * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
    * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
    * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE
    * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
    * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS
    * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
    * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
    * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
    * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
    * POSSIBILITY OF SUCH DAMAGES.
    * This software is not designed or intended for use in on-line control of
    * aircraft, air traffic, aircraft navigation or aircraft communications; or in
    * the design, construction, operation or maintenance of any nuclear
    * facility. Licensee represents and warrants that it will not use or
    * redistribute the Software for such purposes.
    import java.io.*;
    import java.util.*;
    import java.awt.Dimension;
    import javax.media.*;
    import javax.media.control.*;
    import javax.media.protocol.*;
    import javax.media.protocol.DataSource;
    import javax.media.datasink.*;
    import javax.media.format.VideoFormat;
    * This program takes a list of JPEG image files and convert them into
    * a QuickTime movie.
    public class JpegImagesToMovie3 implements ControllerListener, DataSinkListener {
    public boolean doIt(int width, int height, int frameRate, Vector inFiles, MediaLocator outML) {
         ImageDataSource ids = new ImageDataSource(width, height, frameRate, inFiles);
         Processor p;
         try {
         System.err.println("- create processor for the image datasource ...");
         p = Manager.createProcessor(ids);
         } catch (Exception e) {
         System.err.println("Yikes! Cannot create a processor from the data source.");
         return false;
         p.addControllerListener(this);
         // Put the Processor into configured state so we can set
         // some processing options on the processor.
         p.configure();
         if (!waitForState(p, p.Configured)) {
         System.err.println("Failed to configure the processor.");
         return false;
         // Set the output content descriptor to QuickTime.
         p.setContentDescriptor(new ContentDescriptor(FileTypeDescriptor.QUICKTIME));
         // Query for the processor for supported formats.
         // Then set it on the processor.
         TrackControl tcs[] = p.getTrackControls();
         Format f[] = tcs[0].getSupportedFormats();
         if (f == null || f.length <= 0) {
         System.err.println("The mux does not support the input format: " + tcs[0].getFormat());
         return false;
         tcs[0].setFormat(f[0]);
         System.err.println("Setting the track format to: " + f[0]);
         // We are done with programming the processor. Let's just
         // realize it.
         p.realize();
         if (!waitForState(p, p.Realized)) {
         System.err.println("Failed to realize the processor.");
         return false;
         // Now, we'll need to create a DataSink.
         DataSink dsink;
         if ((dsink = createDataSink(p, outML)) == null) {
         System.err.println("Failed to create a DataSink for the given output MediaLocator: " + outML);
         return false;
         dsink.addDataSinkListener(this);
         fileDone = false;
         System.err.println("start processing...");
         // OK, we can now start the actual transcoding.
         try {
         p.start();
         dsink.start();
         } catch (IOException e) {
         System.err.println("IO error during processing");
         return false;
         // Wait for EndOfStream event.
         waitForFileDone();
         // Cleanup.
         try {
         dsink.close();
         } catch (Exception e) {}
         p.removeControllerListener(this);
         System.err.println("...done processing.");
         return true;
    * Create the DataSink.
    DataSink createDataSink(Processor p, MediaLocator outML) {
         DataSource ds;
         if ((ds = p.getDataOutput()) == null) {
         System.err.println("Something is really wrong: the processor does not have an output DataSource");
         return null;
         DataSink dsink;
         try {
         System.err.println("- create DataSink for: " + outML);
         dsink = Manager.createDataSink(ds, outML);
         dsink.open();
         } catch (Exception e) {
         System.err.println("Cannot create the DataSink: " + e);
         return null;
         return dsink;
    Object waitSync = new Object();
    boolean stateTransitionOK = true;
    * Block until the processor has transitioned to the given state.
    * Return false if the transition failed.
    boolean waitForState(Processor p, int state) {
         synchronized (waitSync) {
         try {
              while (p.getState() < state && stateTransitionOK)
              waitSync.wait();
         } catch (Exception e) {}
         return stateTransitionOK;
    * Controller Listener.
    public void controllerUpdate(ControllerEvent evt) {
         if (evt instanceof ConfigureCompleteEvent ||
         evt instanceof RealizeCompleteEvent ||
         evt instanceof PrefetchCompleteEvent) {
         synchronized (waitSync) {
              stateTransitionOK = true;
              waitSync.notifyAll();
         } else if (evt instanceof ResourceUnavailableEvent) {
         synchronized (waitSync) {
              stateTransitionOK = false;
              waitSync.notifyAll();
         } else if (evt instanceof EndOfMediaEvent) {
         evt.getSourceController().stop();
         evt.getSourceController().close();
    Object waitFileSync = new Object();
    boolean fileDone = false;
    boolean fileSuccess = true;
    * Block until file writing is done.
    boolean waitForFileDone() {
         synchronized (waitFileSync) {
         try {
              while (!fileDone)
              waitFileSync.wait();
         } catch (Exception e) {}
         return fileSuccess;
    * Event handler for the file writer.
    public void dataSinkUpdate(DataSinkEvent evt) {
         if (evt instanceof EndOfStreamEvent) {
         synchronized (waitFileSync) {
              fileDone = true;
              waitFileSync.notifyAll();
         } else if (evt instanceof DataSinkErrorEvent) {
         synchronized (waitFileSync) {
              fileDone = true;
              fileSuccess = false;
              waitFileSync.notifyAll();
    public static void main(String args[]) {
         if (args.length == 0)
         prUsage();
         // Parse the arguments.
         int i = 0;
         int width = -1, height = -1, frameRate = 1;
         Vector inputFiles = new Vector();
         String outputURL = null;
         while (i < args.length) {
         if (args.equals("-w")) {
              i++;
              if (i >= args.length)
              prUsage();
              width = new Integer(args[i]).intValue();
         } else if (args[i].equals("-h")) {
              i++;
              if (i >= args.length)
              prUsage();
              height = new Integer(args[i]).intValue();
         } else if (args[i].equals("-f")) {
              i++;
              if (i >= args.length)
              prUsage();
              frameRate = new Integer(args[i]).intValue();
         } else if (args[i].equals("-o")) {
              i++;
              if (i >= args.length)
              prUsage();
              outputURL = args[i];
         } else {
              inputFiles.addElement(args[i]);
         i++;
         if (outputURL == null || inputFiles.size() == 0)
         prUsage();
         // Check for output file extension.
         if (!outputURL.endsWith(".mov") && !outputURL.endsWith(".MOV")) {
         System.err.println("The output file extension should end with a .mov extension");
         prUsage();
         if (width < 0 || height < 0) {
         System.err.println("Please specify the correct image size.");
         prUsage();
         // Check the frame rate.
         if (frameRate < 1)
         frameRate = 1;
         // Generate the output media locators.
         MediaLocator oml;
         if ((oml = createMediaLocator(outputURL)) == null) {
         System.err.println("Cannot build media locator from: " + outputURL);
         System.exit(0);
         JpegImagesToMovie3 imageToMovie3 = new JpegImagesToMovie3();
         imageToMovie3.doIt(width, height, frameRate, inputFiles, oml);
         System.exit(0);
    static void prUsage() {
         System.err.println("Usage: java JpegImagesToMovie -w <width> -h <height> -f <frame rate> -o <output URL> <input JPEG file 1> <input JPEG file 2> ...");
         System.exit(-1);
    * Create a media locator from the given string.
    static MediaLocator createMediaLocator(String url) {
         MediaLocator ml;
         if (url.indexOf(":") > 0 && (ml = new MediaLocator(url)) != null)
         return ml;
         if (url.startsWith(File.separator)) {
         if ((ml = new MediaLocator("file:" + url)) != null)
              return ml;
         } else {
         String file = "file:" + System.getProperty("user.dir") + File.separator + url;
         if ((ml = new MediaLocator(file)) != null)
              return ml;
         return null;
    // Inner classes.
    * A DataSource to read from a list of JPEG image files and
    * turn that into a stream of JMF buffers.
    * The DataSource is not seekable or positionable.
    class ImageDataSource extends PullBufferDataSource {
         ImageSourceStream streams[];
         ImageDataSource(int width, int height, int frameRate, Vector images) {
         streams = new ImageSourceStream[1];
         streams[0] = new ImageSourceStream(width, height, frameRate, images);
         public void setLocator(MediaLocator source) {
         public MediaLocator getLocator() {
         return null;
         * Content type is of RAW since we are sending buffers of video
         * frames without a container format.
         public String getContentType() {
         return ContentDescriptor.RAW;
         public void connect() {
         public void disconnect() {
         public void start() {
         public void stop() {
         * Return the ImageSourceStreams.
         public PullBufferStream[] getStreams() {
         return streams;
         * We could have derived the duration from the number of
         * frames and frame rate. But for the purpose of this program,
         * it's not necessary.
         public Time getDuration() {
         return DURATION_UNKNOWN;
         public Object[] getControls() {
         return new Object[0];
         public Object getControl(String type) {
         return null;
    * The source stream to go along with ImageDataSource.
    class ImageSourceStream implements PullBufferStream {
         Vector images;
         int width, height;
         VideoFormat format;
         int nextImage = 0;     // index of the next image to be read.
         boolean ended = false;
         public ImageSourceStream(int width, int height, int frameRate, Vector images) {
         this.width = width;
         this.height = height;
         this.images = images;
         format = new VideoFormat(VideoFormat.JPEG,
                        new Dimension(width, height),
                        Format.NOT_SPECIFIED,
                        Format.byteArray,
                        (float)frameRate);
         * We should never need to block assuming data are read from files.
         public boolean willReadBlock() {
         return false;
         * This is called from the Processor to read a frame worth
         * of video data.
         public void read(Buffer buf) throws IOException {
         // Check if we've finished all the frames.
         if (nextImage >= images.size()) {
              // We are done. Set EndOfMedia.
              System.err.println("Done reading all images.");
              buf.setEOM(true);
              buf.setOffset(0);
              buf.setLength(0);
              ended = true;
              return;
         String imageFile = (String)images.elementAt(nextImage);
         nextImage++;
         System.err.println(" - reading image file: " + imageFile);
         // Open a random access file for the next image.
         RandomAccessFile raFile;
         raFile = new RandomAccessFile(imageFile, "r");
         byte data[] = null;
         // Check the input buffer type & size.
         if (buf.getData() instanceof byte[])
              data = (byte[])buf.getData();
         // Check to see the given buffer is big enough for the frame.
         if (data == null || data.length < raFile.length()) {
              data = new byte[(int)raFile.length()];
              buf.setData(data);
         // Read the entire JPEG image from the file.
         raFile.readFully(data, 0, (int)raFile.length());
         System.err.println(" read " + raFile.length() + " bytes.");
         buf.setOffset(0);
         buf.setLength((int)raFile.length());
         buf.setFormat(format);
         buf.setFlags(buf.getFlags() | buf.FLAG_KEY_FRAME);
         // Close the random access file.
         raFile.close();
         * Return the format of each video frame. That will be JPEG.
         public Format getFormat() {
         return format;
         public ContentDescriptor getContentDescriptor() {
         return new ContentDescriptor(ContentDescriptor.RAW);
         public long getContentLength() {
         return 0;
         public boolean endOfStream() {
         return ended;
         public Object[] getControls() {
         return new Object[0];
         public Object getControl(String type) {
         return null;
    on executing with the command:
    java JpegImagesToMovie -w <width> -h <height> -f <frame rate per sec.> -o <output URL> <input JPEG file 1> <input JPEG file 2> ...
    comes this......
    Exception in thread"JMF thread:SendEventQueue:com.sun.media.processor.unknown Handler" java.lang.NullPointerException"
    plz help

    Don't forget to use the "Code Formatting Tags",
    see http://forum.java.sun.com/help.jspa?sec=formatting,
    so the posted code retains its original formatting.

  • How can i convert .gif/.bmp/.jpeg file to labview code(vi)?

    Hi,
    I am having a .gif file which consists of vi code. I want to convert that .gif file into vi & complile it. I am using LV 6.1 & 7 express. Is is possible?
    Reverse is surely possible like we can convert the vi diagram into .gif/.bmp file? But above i dont know?
    Your help will really appreciated.
    Best Regards,
    Nirmal

    If I understand your desire, it's to be able to convert a graphical image (bit map or screen photo, for example) into a functional block of LabView code, with all of the wire work done, etc. This is a task approximately equivalent to performing optical character recognition.
    In the case of a non-system subvi, unless that subvi is loaded, so that it's graphical representation can be recognized by comparing the bit-map image for the subvi on the photo with the available vi's.
    Another difficult problem to solve is when the bit-map has been scaled up or down, such that there's a pixel count mismatch between the VI iconic bitmap and the photographic bitmap you wish to import into your code diagram.
    And if you try to do recognition on objects that have h
    ad their RGB color representations changed, as can happen when JPG compression or other compression forms are used that reduce to total number of colors saved, that challenges the object recognition further.
    Also, what you're interested in having is only of value to Labview programmers, so there's not a very large market for such a tool to be sold to - unlike bitmaps of scanned text to ASCII or wordprocessor applications - traditional OCR software.
    All this ins't to say it can't be done, but that it's difficult, and for the person or company that undertakes it, the sales potential is limited.
    Regards,
    Bob Donnell

  • How can I write a code that triggers when clicking on Save button

    I want to hide certain fields inside my tracking list, if the login user is not part of the “Managers” group.
    To do so I want to add the following Page-load code inside a web part :-
    using (SPSite site = new SPSite(SPContext.Current.Site.Url))
    using (SPWeb web = site.OpenWeb())
    {SPGroup group = site.Groups["Managers"];
    bool isUser = site.IsCurrentUserMemberOfGroup(group.ID);
    if (isUser)
    {textbox.Visible=false;}}
    And the following custom code that triggers when saving the form :-
    using (SPSite site = new SPSite(SPContext.Current.Site.Url))
    using (SPWeb web = site.OpenWeb())
    SPList list = web.Lists["ListName"];web.AllowUnsafeUpdates = true;
    SPListItem item = list.Items[SPContext.Current.ListItem.UniqueId];
    txtTitle.Text = item["Title"] as string;item.Update();web.AllowUnsafeUpdates = false;
    But I am not sure where exactly I should add the custom code for the save button ? I tried writing it inside the Oninit method , but I got many errors as shown below:-
    So can anyone advice how i should write the web part to include the Page load & the custom save button code?
    second question in general is my above approach considered valid , i mean to hide/show list columns using web parts ?

    Hi,
    According to your post, my understanding is that you want to hide/show list columns based on specify the permission for Users, SharePoint Groups or Active Directory Groups.
    Here is a solution from CodePlex for your reference:
    SharePoint 2013 Column & View Permission
    https://sp2013columnpermission.codeplex.com/
    Best Regards
    Dennis Guo
    TechNet Community Support

  • How can I write code that uses schemas returned by one query to run another

    I need to use the data returned by this SQL
    Select owner
    From dba_tables
    Where tablename = 'TRANSACT';
    To run the following SQL for every schema in the database:
    Select $vschema, count(*)
    from $vschema..transact;
    Where I am using $vschema as a variable to hold owners returned by the first statement.
    I have tried using 1 cursor, 2 cursors, 1 coursor and an execute immediate command and either my code fails or I get a message that it ran successful but I cant see the data that I want returned by the second query.

    I don't actually want to get the count on the transact table for each schema I just used that as an example to simplify... Maybe the code that I have written so far would be better... Here is one attempt:
    SET SERVEROUTPUT ON SIZE 1000000
    SET VERIFY OFF
    DECLARE
    v_schema Varchar2(50);
    v_chgdate DATE;
    v_debits NUMBER(14,4);
    v_amount NUMBER(14,2);
    /* First cursor */
    CURSOR get_schemas (v_schema OUT char) IS
    SELECT DISTINCT t.owner
    FROM sys.dba_tables t
    WHERE t.table_name = 'GERCVLOG'
    ORDER BY t.owner;
    /* Second cursor */
    CURSOR get_stats (v_schema IN char) IS
    SELECT MAX(g.chgdate),
    SUM(g.debits),
    SUM(g.totalamt)
    FROM &&v_schema..gercvlog g
    WHERE g.chgdate >= '01-Jan-07' or
    g.chgdate = (SELECT MAX(g1.chgdate)
    FROM &&v_schema..gercvlog g1);
    BEGIN
    /* Open first cursor*/
    OPEN get_schemas (v_schema OUT char);
    LOOP
    FETCH get_schemas INTO v_schema;
    EXIT WHEN get_schemas%NOTFOUND;
    dbms_output.put_line('Schema: '||v_schema);
    OPEN get_stats (v_schema IN char);
    LOOP
    FETCH get_stats INTO v_chgdate, v_debits, v_amount;
    FETCH get_schemas INTO v_schema;
    EXIT WHEN get_stats%NOTFOUND;
    dbms_output.put_line('Latest Import: '||v_chgdate);
    dbms_output.put_line('Total Debits: '||v_debits);
    dbms_output.put_line('Total Dollars: '||v_amount);
    dbms_output.put_line('______________________________');
    END LOOP;
    CLOSE get_stats;
    END LOOP;
    CLOSE get_schemas;
    END;
    /

  • Calling a library function node much faster than labview code?

    Hi,  I wrote a labview routine to perform a multiple tau autocorrelation on a large array of integers.  A multi tau autocorrelation is a way to reduce the computation time of the correlation but at the expense of resolution.  You can taylor the multitau correlation to give you good resolution where you need it.  For instance, I require good resolution near the middle (the peak) of the correlation, so I do a linear autocorrelation for the first 64 channels from the peak, then I skip every second channel for the next 32, then skip every 4th channel for 32 more, then skip every 8th for 32 channels... etc.
    Originally, I wrote my own multitau calculation, but it took several hours to perform for just 1024 channels of the correlation of around 2million points of data.  I need to actually do the the correlation on probably 2 billion or more points of data, which would take days.  So then I tried using labview's AutoCorrelation.vi which calls a library function.  It could do a linear autocorrelation with 4 million points in less than a minute.  I figured that writing my code in C and calling it using a call library function node would be faster, but that much faster?
    Finally, I wrote some code that extracts the correlation data points that I would've got from my multitau code from the linear correlation function that I get from the AutoCorrelation.vi.  Clearly this is not optimal, since I spend time calculating all those channels of the correlation function just to throw them away in the end, but I need to do this because the final step of my procedure is to fit the correlation function to a theoretical one.  With say 2million points, the fit would take too long.  The interesting thing here is that simply extracting the 1024 point from the linear autocorrelation function takes a significant amount of time.  Is labview really that slow?
    So, my questions are...  if I rewrite my multitau autocorrelation function in C and call it using a call library function node, will it run that much faster?  Can I achieve the same efficiency if I use a formula node structure?  Why does it take so long just to extract 1024 points from an array?
    I've tried hiding indicators and this speeds things up a little bit, but not very much.
    I'll attach my code if you're interested in taking a look.  There is a switch on the front panel called 'MultiTau'... if in the off position, the code performs the linear autocorrelation with the AutoCorrelation.vi, if in the on position, it performs a multitau autocorrelation using the code I wrote.  Thanks for any help.
    Attachments:
    MultiTauAutocorrelate.vi ‏627 KB

    Hi,
    The C routine that AutoCorrelation.vi is using is probably a higly optimised routine. If you write a routine in LabVIEW, it should be less then 15% slower. But you'd have to know all ins and outs of LabVIEW. How data is handled, when memory is allocated, etc. Also note that the AutoCorrelation.vi has years of engineering behind it, and probably multiple programmers.
    It might even be possible that the c code uses an algorithmic improvement, like the Fast Fourier Transform improves speed on the Fourier Transform. I think the autocorrelation can be done using FFT, but that isn't my thing, so I'm not sure.
    For a fair comparation, posting the code in this forum was a good idea. I'm sure together we can get it to 115% or less of the C variant. (15/115 is just a guess, btw)
    I'm still using LV7.1 for client compatibility, so I'll look at the code later.
    Regards,
    Wiebe.
    "dakeddie" <[email protected]> wrote in message news:[email protected]...
    Hi,&nbsp; I wrote a labview routine to perform a multiple tau autocorrelation on a large array of integers.&nbsp; A multi tau autocorrelation is a way to reduce the computation time of the correlation but at the expense of resolution.&nbsp; You can taylor the multitau correlation to give you good resolution where you need it.&nbsp; For instance, I require good resolution near the middle (the peak) of the correlation, so I do a linear autocorrelation for the first 64 channels from the peak, then I skip every second channel for the next 32, then skip every 4th channel for 32 more, then skip every 8th for 32 channels... etc. Originally, I wrote my own multitau calculation, but it took several hours to perform for just 1024 channels of the correlation of around 2million points of data.&nbsp; I need to actually do the the correlation on probably 2 billion or more points of data, which would take days.&nbsp; So then I tried using labview's AutoCorrelation.vi which calls a library function.&nbsp; It could do a linear autocorrelation with 4 million points in less than a minute.&nbsp; I figured that writing my code in C and calling it using a call library function node would be faster, but that much faster?Finally, I wrote some code that extracts the correlation data points that I would've got from my multitau code from the linear correlation function that I get from the AutoCorrelation.vi.&nbsp; Clearly this is not optimal, since I spend time calculating all those channels of the correlation function just to throw them away in the end, but I need to do this because the final step of my procedure is to fit the correlation function to a theoretical one.&nbsp; With say 2million points, the fit would take too long.&nbsp; The interesting thing here is that simply extracting the 1024 point from the linear autocorrelation function takes a significant amount of time.&nbsp; Is labview really that slow?So, my questions are...&nbsp; if I rewrite my multitau autocorrelation function in C and call it using a call library function node, will it run that much faster?&nbsp; Can I achieve the same efficiency if I use a formula node structure?&nbsp; Why does it take so long just to extract 1024 points from an array?I've tried hiding indicators and this speeds things up a little bit, but not very much.I'll attach my code if you're interested in taking a look.&nbsp; There is a switch on the front panel called 'MultiTau'... if in the off position, the code performs the linear autocorrelation with the AutoCorrelation.vi, if in the on position, it performs a multitau autocorrelation using the code I wrote.&nbsp; Thanks for any help.
    MultiTauAutocorrelate.vi:
    http://forums.ni.com/attachments/ni/170/185730/1/M​ultiTauAutocorrelate.vi

  • Is there a tool to clean a directory structure of unused LabVIEW code?

    I could write this from scratch as follows:
    Load all of my LabVIEW code including dynamically-called VIs into memory, then list all these VIs.
    List all VIs in the directory structure I want to clean.
    For each VI in the directory structure that's not in memory, delete it. If this leaves that VI's parent directory empty, delete that parent directory.
    There is probably already a tool or VI that does this, but I can't find it. Does such a thing exist?

    bmihura,
    I to have had the need/desire to do this.  At my previous employer I wrote a tool that assisted with that function.  Unfortunately I no longer have access to that tool.  If you have a very big program you may have memory and speed related issues when you load "all the VI's into memory".  
    Good Luck
    WW
    Wire Warrior
    Behold the power of LabVIEW as my army of Roomba minions streaks across the floor!

  • How to use LabVIEW code in a Thesis?

    Hello,
    If I write some code, for example, in MATLAB or C++, that I want to include in my thesis as part of a discussion or in the Appendix, it's a fairly straightforward process: copy/paste
    However, this isn't really an option for LabVIEW code. Even a screen cap wouldn't work very well - especially for situations with case structures or nested SubVIs.
    I was wondering if anybody has any thoughts as to a good way to show / convey some of the work done in LabVIEW in a situation like this?

    Robber_Tom wrote:
    Hello,
    I was wondering if anybody has any thoughts as to a good way to show / convey some of the work done in LabVIEW in a situation like this?
    A former co worker of mine had a 50 page thesis, with 30 pages of print screen source code.  In my opinion LabVIEW source shouldn't be in a thesis, and for that reason I didn't have any in mine.
    Unofficial Forum Rules and Guidelines - Hooovahh - LabVIEW Overlord
    If 10 out of 10 experts in any field say something is bad, you should probably take their opinion seriously.

  • Building LabVIEW Executables That Prompt For Administrative Rights Under Vista

    Hi Everyone,
    I've discovered the hard way the differences between Vista and XP...  I've got a compiled LabVIEW program that needs administrative privledges to run.  However, when a user launches the program without proper rights under Vista, it doesn't prompt for administrative rights, it just runs and produces strange errors.  Is there a way to make the program prompt the user for administrative rights so that they don't always have to right-click and select "Run as administrator"?  I heard mention of a "manifest" file that can do this, but I haven't found any details.
    Thanks!

    I have no solution, but do you know why have to be an Admin to run your program? Do you write data to c:\program files? or any other 'forbidden' location?
    Maybe rewriting your app is the best option?
    Ton
    Free Code Capture Tool! Version 2.1.3 with comments, web-upload, back-save and snippets!
    Nederlandse LabVIEW user groep www.lvug.nl
    My LabVIEW Ideas
    LabVIEW, programming like it should be!

  • Labview vi that takes data and populates a list/array

    Hello everyone, I was assigned to create a device that acquires voltages. I found a Data Acquisition box that does just that (not from NI, so I had to use activeX).
    Although I am only electrical, and don't have too much experience with programming, I tried a VI that could capture this data.
    The following is something that works but does not do exactly what I need. It only acquires the data for a specific channel selected manually using a numeric control and displays it on "data" digital indicator. What I have been trying to do is do the channel change automatically, starting from channel 0 to 6 (increment by 1), and each time populating some kind of array or list with this value until all 7 readings are taken. I tried For Loop, which seems easier to use, with a zero as a starting constant, but as hard as I try, it won't work. I would appreciate any help on the matter.

    joshorola wrote:
    Hello everyone, I was assigned to create a device that acquires voltages. I found a Data Acquisition box that does just that (not from NI, so I had to use activeX).
    Although I am only electrical, and don't have too much experience with programming, I tried a VI that could capture this data.
    The following is something that works but does not do exactly what I need. It only acquires the data for a specific channel selected manually using a numeric control and displays it on "data" digital indicator. What I have been trying to do is do the channel change automatically, starting from channel 0 to 6 (increment by 1), and each time populating some kind of array or list with this value until all 7 readings are taken. I tried For Loop, which seems easier to use, with a zero as a starting constant, but as hard as I try, it won't work. I would appreciate any help on the matter.
    Your image is pretty useless, because we cannot see most of the code (It is hidden in other frames of the stacked sequence structure!) The use of stacked sequences typically is discouraged. Don't use them!
    Also your while loop is unecessary, because it only iterates once. If you would remove the while loop, nothing would change.
    Since you know the number of channels (and thus iterations) before the loop starts, a FOR loop is correct. We cannot tell what you did wrong unless you show us what you tried.
    Please attach your actual VI. Thanks
    LabVIEW Champion . Do more with less code and in less time .

  • Need help with Labview code for DAQmx

    I'm currently trying to write Labview code for some thesis research and am having problems.  I'm using the cDAQ 9172 with strain gage modules and two voltage input modules.  I'll be reading/recording a voltage from an external source on one channel, while recording strains and accelerations with the other channels.  I need to do all this simultaneously.
    Everything I've done to this point has been in SignalExpress so I'm not sure how to program any of this.  I also need to be able to calibrate the strain gages prior to each set of recordings.  Any help you guys could offer would be greatly appreciated.  Thanks.

    Hi,
    I'm not sure how much this will help you, but I've attached a screen dump of code from a project I did that sounds pretty similar to what you're working on. The code is from a subVI that I used to create the daqMX measurement task for my data acquisition. I was also using a 9172. This was written in 8.5, but the only thing that you may not have access to is the functions for null offset and shunt cal of the strain gage channels. Hopefully this will at least get you started on your way to setting this up.
    Andrew Carollo
    Attachments:
    create task.jpg ‏208 KB

  • Timing the Execution of Labview code

    Hey Guys,
    I am looking for suggestions to limit the execution time for my code, or even to time it, Idont want it to exceed say 30 seconds as the next device is carried in to be tested.  I am initialising the code,aquiring parameters from a database , running through the test sequence and writing the results back to a database. Thanks guys.
    Damien

    Damien,
    You might get more replies by posting on the LabVIEW Board.  It gets much more traffic than this one, which is primarily for issues related to hardware counter/timer cards.
    Several methods are in common use for timing code. One is to use the Tools >> Profile >> Performance and Memory menu item. This opens a window which allows you to get information about the time each VI and subVI takes to execute along with quite a bit of other useful information.  It is quite helpful for idenitfying those portions of the code which are taking the largest amount of time.  Then you can focus your efforts to improve the code where they will do the most good.  If your code does not use subVIs, (well, it should), then this will not help much.
    A way to test the time of small segments of code, subVIs or not, is to include the code in a 3-frame sequence structure. The first and last frames have Tick Count functions. In the middle frame is the code under test, often inside a For loop so that it can be repeated many times to capture the time of code which may execute in nanoseconds or microseconds. After the sequence structure completes the two tick counts are subtracted to get the elapsed time for the code in the middle.  There are many posts in the LV Board about pitfalls and how to optimize this technique.
    As for limiting the time, this can be more problematic.  Assuming that you are not running on a Real Time operating system, it is hard to guarantee a maximum time.  I think timed loops will report that they finished late.  The key is to break up the code so that no section takes very long.  Then a supervisory module can stop a process after any section if the total time approaches or exceeds your limit.  For example if your database is offline, you need to make sure that the code which acquires the parameters has a timeout mechanism so the program does not wait forever for data it may never get.
    Lynn

Maybe you are looking for

  • I have $84 store balance but need to change registered country (I moved - foreign credit card)...

    Can I spend that and won't have a problem later when I change my country, with apps and everything? I read your 'purchased'  won't show your stuff anymore, but you can still search individually and re-download free, sounds like some chaos comes with

  • Credit memo related Data not reflected in  BCT Query

    Hi Experts , If anyone can help me . Problem : I have loaded data in 0SD_C03 for sales analysis. Everything is alright and all data except Credit Memo related data are showing . During the selection in query the C/D posting + Doc Categ + Net Value fo

  • PixelGrabber - assistance with code needed

    Hello, I have been trying to get the color of a pixel on an image on a program for the past week. I have been advised to use pixelgrabber, and to save results in an array. I am trying to understand it by creating a new application just for the purpos

  • Dynamic Time calculation outside Time dim.

    <p>Hi Guys,<br><br>How do I create a member formula for Y-T-D (Year To Date) outsidethe Time dimension? What I can do is use loads of if statements,but that means I have to make around 1000 IF statements.<br>My Time dimension looks like this;<br><br>

  • Slow iTunes podcast download

    Hi, It takes me, and others, 11 minutes to download our new episode (69MB) from iTunes.  Other people's podcasts, of a similar size, I can download in 1 or 2 minutes. My internet speed is solid, and I've just contacted godaddy support, and they insis