|
|
Line 16: |
Line 16: |
| | | |
| ==Detailed description== | | ==Detailed description== |
| + | |
| + | |
| | | |
| | | |
Line 22: |
Line 24: |
| | | |
| ==Examples== | | ==Examples== |
| + | |
| + | |
| | | |
| | | |
Line 104: |
Line 108: |
| |- | | |- |
| | width="10%" align="center" style="border-top: 2px solid #000;" | [[File:]] - | | | width="10%" align="center" style="border-top: 2px solid #000;" | [[File:]] - |
− | | width="90%" style="border-top: 2px solid #000;" | ''Return''
| |
− | |}
| |
− |
| |
− |
| |
− | {| class="wikitable" style="width:60%; background-color:#FFFFFF;"
| |
− | |-
| |
− | | width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]]
| |
− | | width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''Uninit'''
| |
− | |-
| |
− | | colspan="2" | Un-initialize the UART and release the resources
| |
− | |-
| |
− | |-
| |
− | | width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-void-icon.png]] - VOID
| |
− | | width="90%" style="border-top: 2px solid #000;" | ''Return''
| |
− | |}
| |
− |
| |
− |
| |
− | {| class="wikitable" style="width:60%; background-color:#FFFFFF;"
| |
− | |-
| |
− | | width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]]
| |
− | | width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''ReceiveByteArray'''
| |
− | |-
| |
− | | colspan="2" | Receives an array of bytes and returns the number of bytes received.
| |
− | |-
| |
− | |-
| |
− | | width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE
| |
− | | width="90%" | Data
| |
− | |-
| |
− | | colspan="2" | A byte array variable to hold the received data
| |
− | |-
| |
− | | width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT
| |
− | | width="90%" | NumBytes
| |
− | |-
| |
− | | colspan="2" | Maximum number of bytes to try and receive
| |
− | |-
| |
− | | width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT
| |
− | | width="90%" | Timeout
| |
− | |-
| |
− | | colspan="2" | Max amount of time in ms to wait between bytes
| |
− | |-
| |
− | | width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u16-icon.png]] - UINT
| |
− | | width="90%" style="border-top: 2px solid #000;" | ''Return''
| |
− | |}
| |
− |
| |
− |
| |
− | {| class="wikitable" style="width:60%; background-color:#FFFFFF;"
| |
− | |-
| |
− | | width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]]
| |
− | | width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''ReceiveString'''
| |
− | |-
| |
− | | colspan="2" | Receives a string of bytes and returns the number of bytes received.
| |
− | |-
| |
− | |-
| |
− | | width="10%" align="center" | [[File:Fc9-string-icon.png]] - STRING
| |
− | | width="90%" | StringData
| |
− | |-
| |
− | | colspan="2" |
| |
− | |-
| |
− | | width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT
| |
− | | width="90%" | NumBytes
| |
− | |-
| |
− | | colspan="2" | Maximum number of bytes to try and receive
| |
− | |-
| |
− | | width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT
| |
− | | width="90%" | Timeout
| |
− | |-
| |
− | | colspan="2" | Max amount of time in ms to wait between bytes
| |
− | |-
| |
− | | width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE
| |
− | | width="90%" style="border-top: 2px solid #000;" | ''Return''
| |
− | |}
| |
− |
| |
− |
| |
− | {| class="wikitable" style="width:60%; background-color:#FFFFFF;"
| |
− | |-
| |
− | | width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]]
| |
− | | width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''Start'''
| |
− | |-
| |
− | | colspan="2" | Startup routine required by the hardware device. Automatically clears the display after initialising.
| |
− | |-
| |
− | |-
| |
− | | width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-void-icon.png]] - VOID
| |
− | | width="90%" style="border-top: 2px solid #000;" | ''Return''
| |
− | |}
| |
− |
| |
− |
| |
− | {| class="wikitable" style="width:60%; background-color:#FFFFFF;"
| |
− | |-
| |
− | | width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]]
| |
− | | width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''SetLEDState'''
| |
− | |-
| |
− | | colspan="2" | Sets the state of a single LED
| |
− | |-
| |
− | |-
| |
− | | width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE
| |
− | | width="90%" | Port
| |
− | |-
| |
− | | colspan="2" | 0 = PortA, 1 = PortB
| |
− | |-
| |
− | | width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE
| |
− | | width="90%" | LED
| |
− | |-
| |
− | | colspan="2" | 0 = LED0, 7 = LED7
| |
− | |-
| |
− | | width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE
| |
− | | width="90%" | State
| |
− | |-
| |
− | | colspan="2" |
| |
− | |-
| |
− | | width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-void-icon.png]] - VOID
| |
− | | width="90%" style="border-top: 2px solid #000;" | ''Return''
| |
− | |}
| |
− |
| |
− |
| |
− | {| class="wikitable" style="width:60%; background-color:#FFFFFF;"
| |
− | |-
| |
− | | width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]]
| |
− | | width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''GetRxIdent'''
| |
− | |-
| |
− | | colspan="2" | Gets the Rx ID as a Integer Standard and Extended IDs.
| |
− | |-
| |
− | |-
| |
− | | width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE
| |
− | | width="90%" | Buffer
| |
− | |-
| |
− | | colspan="2" |
| |
− | |-
| |
− | | width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u32-icon.png]] - ULONG
| |
− | | width="90%" style="border-top: 2px solid #000;" | ''Return''
| |
− | |}
| |
− |
| |
− |
| |
− | {| class="wikitable" style="width:60%; background-color:#FFFFFF;"
| |
− | |-
| |
− | | width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]]
| |
− | | width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''Initialise'''
| |
− | |-
| |
− | | colspan="2" | Must be called before any other CAN component macros to enable and initialise the CAN peripheral.
| |
− | |-
| |
− | |-
| |
− | | width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-void-icon.png]] - VOID
| |
| | width="90%" style="border-top: 2px solid #000;" | ''Return'' | | | width="90%" style="border-top: 2px solid #000;" | ''Return'' |
| |} | | |} |
Author
|
Matrix Ltd
|
Version
|
1.2
|
Category
|
DSP
|
Fast Fourier Transform (FFT) component
Provides a way of converting a buffer full of time domain data into frequency domain data. The output of the FFT is a set of frequency bins which correspond to the frequencies present in the signal. The number of frequency bins is equal to half the input buffer size with each bin being responsible for a portion of the frequency up to 1/2 the nyquist.
Detailed description
No detailed description exists yet for this component
Examples
Example takes two adjustable frequency sine wave inputs and combines them and then passes the collection of 256 samples to the FFT function which produces 128 individual frequency banks which are then plotted from left (lowest frequency) to right (highest frequency) using an XY chart component.
FFT Example
Frequency output for a set of data
Frequency banks can be worked out by using the sample frequency and buffer size. The number of frequency banks is equal to the number of samples divided by 2 minus 1. We subtract the one because bank 0 is always empty and so can be discounted.
FrequencyBanks = (SampleCount / 2) - 1
The frequency ranges present inside a bank can be worked out as follows.
FreqMin = ((SampleRate / 2) / (SampleCount / 2)) * Bank
FreqMax = ((SampleRate / 2) / (SampleCount / 2)) * (Bank + 1)
For example if we sample at 10KHz and collect 256 samples then frequency bank 10 would represent any frequencies in the range of 390.6Hz to 429.7Hz.
Here is a spreadsheet document that will calculate the frequencies present in each bank. The highlighted green fields are editable and will update the rest of the values.
File:FFT Frequency Bank Calculator.xls
Downloadable macro reference
|
ReadFrequencyBank
|
Reads the value from one of the frequency banks after the FFT conversion has been performed. Valid frequency banks range from 1 to the allocated buffer size / 2 assuming the buffers are sized to be equal to a power of 2.
|
- UINT
|
BankIdx
|
|
- UINT
|
Return
|
|
FFT
|
Performs the data conversion from time based data to frequency based data. Takes a full buffer input and converts it into real and imaginary frequency data ready for you to read the individual frequency bins.
|
- VOID
|
Return
|
|
QueueData
|
Takes a single value from the buffer input and stores it, once there are enough values queued up it returns a 1.
|
[[File:]] -
|
ProcessWhenFull
|
0 = Do Nothing when Buffer is full, 1 = Auto call FFT macro when Buffer is full
|
[[File:]] -
|
Return
|
Property reference
|
Properties
|
|
Connect To
|
|
|
Buffer Size
|
Number of individual elements the buffer can store, must be a power of 2, default 256.
|
|
Buffer Type
|
Sets the buffer data type.
|
|
Filter Input Data
|
Applies a hamming window filter to the time domain sample data to provide better frequency detection.
|
|
Sample Rate
|
Sample rate used to perform simple calculations like nyquist and bin size.
|
|
Nyquist Frequency
|
The maximum frequency that can theoretically be detected by the FFT component assuming the sample rate is setup correctly.
|
|
Frequency Bin Count
|
The number of frequency bins that the component will provide.
|
|
Frequency Bin Size (Hz)
|
The frequency range covered by each frequency bin.
|
|
Connections
|
|
Simulations
|