Problem plotting binary file

hi, im recording data on a pda using cf-6004 and the attached analogue input vi - the data attached has 700 samples acquired at 10,000Hz, the objected being monitored is vibrating just below 5kHz - this bit seems to work fine
problem - when i come to read the data, fft it and plot it it seems to treat each sample as 1 second and so gives a wrong fft freq value, how do i get around this?
thanks!
andy
Attachments:
files.zip ‏71 KB

When you save the data, you are not saving any timing information. You just have the raw data. In your acquisition, you are just assuming a default sample rate which is maybe not such a good idea either. If you want to stick with assumptions, then when you read the data from the file, create a waveform data type and specify a dt of 1/sample rate before wiring it to the Spectral Measurements function.
For better code, you might want to look at the shipping examples where logged binary data has a header created that includes the sample rate.

Similar Messages

  • Problems with binary files

    Hello everybody!
    I'm having deep trouble with reading from binary files.
    I have opened a DataInputStream with a FileInputStream to read the data (which consists of a lot of short-Variables) into my program.
    Then I wondered why the data read is always wrong, until I discovered the core of the problem yesterday night. It seems as if Java reads everything correct, but the 16bit unsigned int data from the file has a problem.
    It seems as if the second byte is written first, that means i.e. the decimal 2352 (Hex: 09 30) is written 30 09, and that wreaks havoc upon my program, because Java interprets this as dec 12297.
    Now I have the following questions:
    1. Is this a kind of one- or two-complement problem?
    2. Is it possible to read this in a byte array (yes), and convert this byte array afterwards into a short variable?
    3. Is it possible to read this kind of data with a Java class?
    Thank you very much in advance,
    Hans Munzel

    Thank you for your quick reply!
    I already thought that this is the right way to solve this. Now I have already looked it up:
    - I have found no class that is able to transform a byte array into a basic data type.
    - The class Integer is able to convert int variables into a Hex string, making it possible to concatenate the Strings in the correct order and convert it.
    - The class Byte is unfortunately NOT able to do this.
    So, I have tried to make a conversion via combinations of toString(), decode(), and parseInt() (and a lot of other methods, too), but this is a) very complicated and b) prone to errors which result normally in a fatal exception.
    So, am I missing something? I am using JDK 1.3.1, and have looked through the java.lang and java.math packages, but I found nothing I can use.
    The only thing close to converting a couple of bytes to a Java datatype is the DataInputStream with its readShort() etc. methods, but is is causing the problem in the first place ...

  • Problem with binary file transfer

    Hello everybody,
    I've got a bit of a strange problem. I'm making an application that opens a socket connection to a waiting perl script on the other side of the line. What it should do is recieve an int (filesize in bytes) and then a binary stream. This stream is written to a file, and I should have succesfully transfered a file.
    But the file I end up with isn't the same. The size is correct, and almost al the binary data seems to match up with the original, save a very few corruptions. The beginning and ending of the 2 files are exactly the same though.
    I know the Perl script is correct, I've stored the output through another script and had no problems.
    This is the code I used in Java:
    The Reader:
    in = new BufferedReader(new InputStreamReader(sock.getInputStream()));The important stuff:
    private void readBytes(int numberOfBytes) {
         FileOutputStream fos = null;
         try {
              fos = new FileOutputStream("image.jpg");
              DataOutputStream dos = new DataOutputStream(fos);
              for (int x = 0; x < numberOfBytes; x++) {
                   dos.writeByte(in.read());
         catch (IOException e) {
              System.out.println("IO Exception in readBytes");
    }I've got no idea how this could fail. Anybody who does? Thanks in advance.

    Thanks, the last two answers explained my problems. I've got it fixed now, this is the way I did it:
    private void readBytes(int numberOfBytes) {
         try {
              fileSock = new Socket(host,2001);
              fileIn = new BufferedInputStream(new DataInputStream(fileSock.getInputStream()));
              FileOutputStream fos = null;
              fos = new FileOutputStream("image.jpg");
              DataOutputStream dos = new DataOutputStream(fos);
              for (int x = 0; x < numberOfBytes; x++) {
                   dos.writeByte(fileIn.read());
              dos.close();
              fos.close();
              fileSock.close();
         catch (IOException e) {
              System.out.println("IO Exception in readBytes");
    } I'll assign the Duke Dollars, thanks again for helping out.

  • Read binary file in LabVIEW 2012

    Hi,
    Have anyoune experienced problems reading binary files in 2012 previously saved in 2010.
    As shown on attached image, the same VI is opened in 2010 and 2012 reading the same binary file containing the data structure "ProcessList IN".
    I suspect it has something to do with the variants ?
    The error message does help a lot (-;
    Any ideas ?
    Kind regards
    Kahr
    Regards Kahr
    Certified LabVIEW Architect
    CIM A/S
    Attachments:
    Read_Binary_File_Error_LV2012.png ‏426 KB

    Hi Kahr,
    "error 1" tells one of the input parameters is wrong: it's either the path or the cluster datatype! The error message only mentions a file path AS AN EXAMPLE!
    You're using BinaryRead similar to those old Datalog file functions to read a cluster of several data. It has been know that datalog files get tricky when one is using a different LabVIEW version to read them due to changes of internal data representation. Maybe that's the point that hits you now?
    Best regards,
    GerdW
    CLAD, using 2009SP1 + LV2011SP1 + LV2014SP1 on WinXP+Win7+cRIO
    Kudos are welcome

  • Binary files in java

    hi
    I am a bit new to java and am having some problems with binary files. What I need to do is search a binary file for any accurances of the data contained with in another set of binary files. I need to know if the first file contains any of the signatures in the set of files. any help would be great.
    thanks very much
    Colin

    you take your file, you read in some bytes and you loop thru those bytes to find matching bytes that you are looking for. Here's some cdoe that's probably not as elegant as it could be, but you get what you pay for.
    public static int indexOf(byte[] a, byte[] b) {
       return indexOf(a, b, 0);
    public static int indexOf(byte[] a, byte[] b, int start) {
       if(a == null || b == null || a.length == 0 || b.length == 0 || a.length < b.length) {
          return -1;
    outer:   for(int i = start; i < a.length-b.length; i++) {
          if(a[i] == b[0]) {
             for(int j = 0; j < b.length; j++) {
                if(a[i+j] != b[j]) {
                   break outer;
             return i;
    }

  • Memory issues writing binary files, using a subVI to do all File Handling, topVI, when run normally files are way too large.

    Problem writing binary files with LV 8.5. I have one VI that does all the interaction/file I/O and another VI for testing. I find when I run the subVI where all the data reading/writing is happening with break points and single stepping through the code all is OK, but when I run normally the files are much larger than they should be and as well when I close the files I get a error. Any insights?  
    Walter

    Waltz wrote:
    I found the problem, I was actually trying to close the files twice.
    I don't see how this could cause the symptoms you described in the first post.
    (It only explains the error on close).
    LabVIEW Champion . Do more with less code and in less time .

  • How do you open multiple binary files and plot them all on the same graph?

    I have three different binary files and I want to plot all 3 of them onto a graph.
    I am familiar with opening and reading a single binary file. (Thanks to the help examples!) 
    But to do multiple numbers at the same time?  I was thinking of putting 3 different 'reading from binary file' blocks with the rest of the 'prompts', 'data type', etc.. and then connecting them on the same wire.
    However, I got into a mess already when I tried to read one .bin file to dynamic data type --> spectral measurements --> graph waveform.  The error was Not enough memory to complete this operation...  Why is that?  That didnt happen in the help example "Read Binary File.vi"...  Has it got something to do with the dynamic data type?
    Thank you for your time.
    Jud~

    Have a look at the image below and attached VI.  Simply enter the different paths into the PathArray control.
    R
    Message Edited by JoeLabView on 07-30-2008 09:59 PM
    Attachments:
    multipleBinary2Graph.vi ‏18 KB
    multipleBinary.PNG ‏5 KB

  • Including scaling information in binary file, which can be plotted in graph

    I need to plot a graph from a from a bin file, I am able to plot the graph using read binary file vi but the scaling is nowhere close to what it needs to be.
    Its in auto scaling mode, if I set the values manually by giving maximum and minimum values the graph disappears,
    I believe it has something to do with some missing header file not included in the binary file as of now.
    Can anyone help , I need to know , how to add header in the binary file so that I include the information of scales or units of measurements of the data which has to be plotted.

    Hi Shrikant,
    you include "header information" the same way as you include "data" in your binary file: You simply write that information to the file...
    When trying to plot "the file" you read both parts (header and data), one after the other!
    Best regards,
    GerdW
    CLAD, using 2009SP1 + LV2011SP1 + LV2014SP1 on WinXP+Win7+cRIO
    Kudos are welcome

  • Problem when streaming out a binary file

    Hi,
    I am trying to stream out a binary file to an output stream (not a file, but a socket). My file is a gzip file, and I was initially simply trying to open the
    file, read it to a a byte array, and writing it out to my output stream. However, I got corrupted data at my other end and it took me quite a bit of
    debugging hours to find out why.
    I tried writing to a file the same information I was writing to my output stream but, although my file was correct, my output stream still contained
    corrupted data.
    I think I have finally narrowed down my problem to the fact that when I try to write a 0x00 value to my output stream, everything gets ignored from this
    point until I write a 0x0a byte to my output stream. Obviously this produces corrupted data, since I need all the bytes of my binary file.
    If somebody can direct me as to how to write a 0x00 value to a socket output stream, I would really appreciate your input.
    This is a sample of my code (Right now I am writing byte by byte: not very efficient, but was the only way I found where I was getting a problem):
    // out is of type OutputStream
    if (Zipped){
         // In this case we just have to stream the file out
    File myFile = new File(fileName);
         FileInputStream inputFile = new FileInputStream(myFile);
         FileOutputStream fos = new FileOutputStream(new File("/tmp/zip.gz")); //zip.gz results in a good (not corrupted) file.
         ByteArrayOutputStream out1 = new ByteArrayOutputStream(1024);
         int bytes = (int)myFile.length();
         byte[] buffer = new byte[bytes];
         bytes = inputFile.read(buffer);
         while (bytes != -1) {
              out1.write(buffer,0,bytes);
              bytes = inputFile.read(buffer);
         inputFile.close();
         try {
              int count=0;
              bytes=out1.size();
              while (count<bytes){
                   fos.write(buffer,count,1);
    out.write(buffer,count,1); // when buffer[count] == 0x00, everything after it gets ignored until a 0x0a byte is written.
                   count++;
         } catch (IOException ioe) {
              SysLog.event("IOEXCEPTION: "+ioe);
         } catch (Exception e) {
              SysLog.event("EXCEPTION: "+e);
         fos.flush();
         fos.close();
         out.flush();
    out.close();
         return;
    }

    Actually, I had thought about that and for some time I tried getting rid of some of the header information in the gzipped file, and then I stopped doing that when I realized that part of the gzipped file is a CRC value which I believe is computed taking into account both the data of the file and the header information. If this is the case, then getting rid of part of the header would produce a corrupted file ... but then, I might be wrong in this issue.
    Anyway, to make my application more clear, what I am doing is writing the code for a cgi command which is suppossed to access information from a database, create an xml file, gzip it, and then send it to the client who requested the information.
    Therefore, what I am sending is an xml file (Content-Type: text/xml) in compressed format (Content-Encoding: gzip). Note that if I don't gzip the file and then send it uncompressed to the client, I have no problems. However, for me it is very important to gzip it because the size of the file can get very large and that would just take bandwidth unnecessarily.
    On the other hand, if I try to gunzip the file locally, I have no problem either (the file is not corrupt at the server's end). Therefore, my problem is when I stream it out.
    Any further help would be really appreciated!

  • Problem working with binary file

    Hi,
    I have two seperate programs.
    The first one:
    *Reads a  PDF file from disk via InputStreamReader.read(char[])
    *converts it to s String [String.valueOf(char[])]
    connects to other program using Socket and writes the string's bytes to the OutputStream of the Socket (socket.getOutputStream().write(string.getBytes);)
    Second one:
    *Reads the file from socket via BufferedReader.read(char[])
    *converts it to a string via String.valueOf()
    *writes it to a file using FileOutputStream.write(content.getBytes())
    The problem is:
    If the secong program is running on Win2K,the PDF file is opened with no errors but the pages are all blank.But everything is OK if it is running on Unix(IBM AIX java ver 1.3.1)
    First program is always on Win2K.
    I compared the win2k and unix PDF files,some nonprintable chars are displayed as ? in the win2K one,
    what can be the reason? why does the same problem not occur on Unix?
    Some problems are mentioned on web/forums but these are related with browsers or servlets which I am not using in this case.
    Thanks in advance,

    PDF is a binary file.
    You're doing 1 of 2 possible things wrong....
    1) trying to read a binary file as a text file ( string )
    You can't "just read" a binary file as a text file to extra the strings.
    You need to get the binary format, and parse it's format properly to extract the
    string data.
    2) trying to send a binary file across a socket as a string
    You need to read the PDF file as an array of bytes and send them across
    the socket as such. Trying to convert binary data to characters / strings
    is wrong. characters get converted to and from native encoding schemes to
    unicode.... among other problems.
    regards,
    Owen

  • Binary file problem (Read a specific Stream)

    Hi Guys ,
    I have a problem , I want to read a binary files but not the whole binary file. I only want to read one stream.
    Forexample , I have a binar files which has 5 streams. If I only want to read one of the stream what should i do ? How do i get the position of each stream starting and end ?
    The binary file is attached.
    Please note that the file was 5.7mb where as labview message system allows 5.2mb. therfore i uploaded the file on a file host
    http://uploading.com/files/55524a3d/10211001_.raw/
    Thankyou in advance
    Rgs
    M Omar Tariq

    As far as I can understand. You are able to read and decode the file in Labview. But have problems with big files. In such cases. Read the data file in chunked and discard data not needed. You can also make a tool that splits the multi-channel data into separate files in a binary format easy to read from Labview. It is also not needed to have all the data in memory then analyzing the data. Analysis may in many cases be done in chunks.
    Besides which, my opinion is that Express VIs Carthage must be destroyed deleted
    (Sorry no Labview "brag list" so far)

  • Urgent - pls help - Problem while inserting binary file into Oracle DB

    Hi,
    I am trying to insert binary files into a Blob column in a Oracle 10G table.
    The binary files would be uploaded by the web users and hence come as multipart request. I use apache commons upload streaming API to handle it. Finally i am getting a input stream of the uploaded file.
    The JDBC code is
    PreparedStatement ps=conn.prepareStatement("insert into bincontent_table values(?)");
    ps.setBinaryStream(1,inStream,length);
    My problem starts when i try to find the length of the stream. available() method of inputstream does not return the full length of the stream. so i put a loop to read thru the stream and find the length as shown below
    int length=0;
    while((v=inStream.read())!=-1)
    length++;
    Now, though i got the length, my stream pointer has reached the end and i cant reset it(it throws an error if i try).
    So i copied the stream content to a byte array and created an ByteArrayInputStream like this.
    tempByteArray=new byte[length];
    stream.read(tempByteArray,0,length);
    ByteArrayInputStream bais=new ByteArrayInputStream(tempByteArray);
    Now if i pass this bytearray input stream instead of the normal input stream to the prepared statement's setBinaryStream() method it throws an error as
    "ORA-01460: unimplemented or unreasonable conversion requested".
    Now how to solve this?
    My doubts are ,
    1) preparedStatement.setBinaryStream(int parameterIndex, InputStream x, int length) expects an inputstream and its length. if i have the stream how to find its length with out reading the stream?
    2) Also as the length parameter is a integer, what if i have a large binary file whose length runs more than the capacity of integer
    3) Alternatively there is a setBlob(int i, Blob x) in prepared statement. But how to instantiate a Blob object and set it here
    4) Is there any better way to do this.
    Thanks in advance

    "ORA-01460: unimplemented or unreasonable conversion
    requested".When the setBinaryStream method is used, the driver may have to do extra work to determine whether the parameter data should be sent to the server as a LONGVARBINARY or a BLOB (reference: javadoc)
    1) preparedStatement.setBinaryStream(int parameterIndex,
    InputStream x, int length) expects an inputstream and its length. if i
    have the stream how to find its length with out reading the stream?no. stream may have no specified length. i think you have wrong understanding about stream.
    2) Also as the length parameter is a integer, what if i have a large
    binary file whose length runs more than the capacity of integer
    3) Alternatively there is a setBlob(int i, Blob x) in prepared statement.
    But how to instantiate a Blob object and set it here
    4) Is there any better way to do this.use ps.setBlob(1, instream) instead

  • Problems writing a structured binary file...

    Hi Folks,
    I've been working with one of my students to convert this matlab routine into a VI to no avail:
    fwrite(fout,version,'char');
    fwrite(fout,nchar_text,'short');
    % convert wave_text into array of ascii integers
    fwrite(fout,wave_text,'char');
    % output a null character to terminate string
    %count=fwrite(fout,0,'char');
    fwrite(fout,n_bits,'char');
    fwrite(fout,n_bytes,'char');
    fwrite(fout,data_polarity,'char');
    fwrite(fout,user_data,'float');
    fwrite(fout,s_rate,'ulong');
    fwrite(fout,adrange,'float');
    fwrite(fout,n_pts,'long');
    fwrite(fout,wave,'short');
    fclose(fout);
    I've written a VI that can open the files written by this Matlab procedure with no problem (see openfile.VI), however I can't seem to recreate the method for writing this file to binary (writefile.VI).  I think the Matlab approach is very similar to C, and I'm guessing the issue has to do with converting datatypes effectively.  I've been searching the forms and google, but can't seem to come up with the proper solution.  Any pointers would be greatly appreciated!
    Best,
    Jason Gallant
    Attachments:
    writefile.vi ‏27 KB
    openfile.vi ‏26 KB

    crossrulz wrote:
    The additional bytes for the array and string lengths is what is throwing you off.  Even if you turn it off at the Write Binary File, because you built a cluster they will be in there.  You do not want to cluster up your data in this case.  You need to string together a bunch of Write Binary Files, one for each of your parts of data.  Similar to what you had to do in Matlab.
    Great suggestion!  We tried implementing this, and things are looking better.   I've attatched the new VI that implements this.   There still seems to be a problem, however with the datatypes being written.  As mentioned in the previous post, the data written is:
    version   - 'char
    nchar_text, 'short'
    wave_text, 'char'
    n_bits,'char'
    n_bytes,'char'
    data_polarity,'char'
    user_data,'float'
    s_rate,'ulong'
    adrange,'float'
    n_pts,'long'
    wave,'short'
    Should i be typecasting (or something similar) to string in order to make this readable by my previous routine?
    Attachments:
    writefile.vi ‏38 KB

  • Problem saving 2D array to binary file

    I am getting some strange results when trying to write a transposed 2D array of Unisgned 8-bit data to a binary file. Attached is an example program ("071026_ArraySave_Bug.vi") which demonstrates the suspicious behavior.
    The program generates a small 2D array of U8 data, then saves it to two temporary files using two different methods.
    1) Row-by-row: The 2D array is auto-indexed, and the indexed row is written to file at once (with the prepended size option disabled).
    2) Point-by-point: Two For loops are used to auto-index each element and write it to file individually.
    The saved files are then reopened and the data is read into two 1D arrays for display.
    The bug occurs when the generated 2D array is transposed before being saved to file. In the point-by-point method, the data is always saved to the file as desired, i.e. by row or by column depending on whether the data was transposed. However, in the row-by-row method the data is incorrectly saved when the input data is transposed. Without transposing the array, the row-by-row results are correct.
    Saving the array row-by-row is significantly faster for larger arrays, so this method is desired.
    Note that the option to transpose the input data in the attached VI is performed using a case structure with a boolean constant ("Bug Control"). This is important because:
    1) The bug does not occur if the boolean constant is replaced with a control.
    2) The bug does not occur if the case structure is replaced with a "Select" node from the Comparison Palette.
    3) The bug still occurs if the case structure is removed such that the array is always transposed (i.e. keep the True case).
    For now, I have been able to circumvent the bug in practice by transposing the array and then passing it through a Select with a constant True (the False case uses the untransposed array). This allows the faster row-by-row method to be used without error, but requires new memory allocation for the transposed array.
    I will appreciate any help that can be given regarding this problem, or simply confirmation that it is indeed a bug in Labview 8.5. It is worth noting that the same program did not produce any errors when run in Labview 7.
    Thank you for your help,
    David Viggiano
    Attachments:
    071026_ArraySave_Bug.vi ‏29 KB

    This is a known bug (CAR : 4DP855N3) , related to memory management. see this thread
    If I remember well, Altenbach shown somewhere that forcing the transpose operation to produce a copy of the memory was a proper workaround.
    Message Edité par chilly charly le 10-26-2007 08:40 PM
    Chilly Charly    (aka CC)
             E-List Master - Kudos glutton - Press the yellow button on the left...        
    Attachments:
    071026_ArraySave_Bug[1].png ‏2 KB

  • Problem rendering certain bytes when reading binary file

    I have a two part problem. I am trying to read files of any type from a client and transfer them over a pipe to a UNIX host running a C API. I have this process working for text data just fine however when I try and submit binary data there appears to be some data loss. Most of the file appears to end up on the host but it just isn't as long as the source, nor will it render correctly.
    In investigating this problem I tried to simply output a temporary copy of the transferred file on the client as I was reading the file just to see if my "thinking/process" was correct. The copy of the file ends up the same length but some bytes seem to have been misread. Upon doing a windiff on the source and copy it appears that several characters that are rendered as blocks in the original show up as '?' in the destination file.
    I believe this is an entirely different problem than why I am losing data on the host side but I want to first figure out why this problem is occuring. The below code is how I am reading and writing the binary file. I realize it has some problems with it, it is more of a POC at this point.
               final int BUF_SIZE = 1000;  // 1K
               char[] cBuffer = new char[BUF_SIZE];
               byte[] bBuffer = new byte[BUF_SIZE];
               int read = BUF_SIZE;
               long length = fLocalFile.length();
               FileInputStream fis = new FileInputStream(fLocalFile);
               DataInputStream dis = new DataInputStream(fis);
               FileOutputStream fos = new FileOutputStream("C:\\temp.file", false);
               DataOutputStream dos = new DataOutputStream(fos);
               for (int start = 0; start < length && reply.getSuccess(); start += read)
                   System.out.println("length: " + length + " start: " + start);
                   read = dis.read(bBuffer, 0, BUF_SIZE);
                   // Send the file data
                   String sTemp = sDestName + ":" + new String(bBuffer,0,read);
                   dos.write(bBuffer,0,read);
                   reply = axBridge.execute (Commands.CMD_FILE_TRANSFER_SEND, sTemp);
                dos.close();
            }It seems as if when reading or writing on the data streams some of the characters aren't getting converted correctly. Can anyone help? I've been testing with a PDF if that sheds any light.

    Yes but you ARE converting to a String first which you then send to the axBridge (sTemp!). Try just sending the bytes. You can easily pre-pend the "<filename>:" by sending those first.
    I know that some conversions occur when converting to a String, what they are exactly and what the exact effects are escapes me. Past experience though has taught me to ALWAYS send bytes, with no conversions, what you read is what you send.
    You may need to modify the send/receive protocol so that you send the command first with the filename then the bytes are sent after...
    As for why the file is not being written correctly to: c:\\temp.file, don't know... try the following code, it tends to be one of the "standard" ways of "streaming" data...
         byte buf[] = new byte[bufSize];
         int bRead = -1;
         while ((bRead = in.read (buf)) != -1)
             out.write (buf,
                     0,
                     bRead);
         }     And try just using a FileOutputStream or wrapping in a BufferedOutputStream.

Maybe you are looking for

  • More than 2 dropdown boxes in the UI Configuration/SRM-MDM Catalogue Search

    Hi! We know that there is a limit to the number of drop-down boxes we can define in SRM-MDM UI configuration. However, we really have a need for that as there is no variant configuration in SRM-MDM. In this case, we want to allow user to select the c

  • Forms and reports

    I'm working in Oracle forms and reports domain and would like to upgrade my skills . can anyone tell me what technology in oracle is apt to learn at this time after forms and reports and also the one that is demanding ?

  • Anyone else found BUG with Photoshop and Lightroom capture time?

    Has anyone else experienced this or can you replicate it? *The problem: Changing the capture time of an image in Lightroom and then exporting to Photoshop causes a program error in Photoshop when saving. *My environment: Mac Intel - OS X 10.5.2 - Lig

  • Comparisons between X61s and X201s - and X201 and X201s

    I have been very happy with my x61s since prchasing it in Jan 2008. However, I need to migrate to a new notebook, want to have a similar experience with the new machine and am therefore considering the X201 series. Can anyone give me a high-level com

  • Dolby digital in itunes over hdmi for 7770

    I just bought a amd sapphire 7770 and now itunes won't output dolby digital over hdmi but other programs will. I am using the latest drivers and software, how do I fix this?