UDP Function Generator Example
Overview
This project demonstrates how to use the UDP Function Generator program to generate and transmit multiple real-time waveforms (sine, triangle, sawtooth, and square) over a UDP network. The program is designed to feed CSV-formatted data to Serial Studio, allowing users to visualize the generated waveforms in real-time.
With Serial Studio, you can use the Quick Plot feature to easily visualize data transmitted via the UDP socket. This provides an intuitive way to test and analyze waveform generation.
What is a Function Generator?
A function generator creates electrical waveforms that can be used for testing circuits, analyzing systems, and generating real-time signals for processing. This program simulates such a generator but transmits its output over a UDP socket instead of generating physical signals.
The waveforms can be used for:
- Testing UDP-based communication.
- Stress-testing Serial Studio to find bugs.
- Visualizing signal behavior in applications.
- Learning and experimenting with waveform generation and signal processing.
Program Features
- Waveform Types: Generate sine, triangular, sawtooth, and square waves.
- Customizable Settings:
- Number of waveforms to generate.
- Frequency, phase, and type of each waveform.
- Adjustable transmission interval.
- Verbose Output: Print real-time data to the console (optional).
- Aliasing Protection: Warns if the frequency is too high to ensure smooth waveform reconstruction.
Getting Started
Requirements
- GCC or any compatible C compiler.
- A system with POSIX support for UDP sockets (Linux, macOS, or Windows with WSL).
- Serial Studio for real-time visualization.
1. Compile the Program
To compile the program in UNIX systems, use the following command:
gcc -o udp_function_generator udp_function_generator.c -lm
On Windows, you will need to use:
gcc -o udp_function_generator.exe udp_function_generator.c -lws2_32 -lm
2. Run the Program
Use the following command to execute the program:
./udp_function_generator [-p port] [-i interval] [-n num_functions] [-v]
Command-Line Options:
-p <port>
: UDP port (default:9000
).-i <interval>
: Transmission interval in milliseconds (default:1.0 ms
).-n <num_functions>
: Number of waveforms to generate (default:1
).-v
: Enable verbose output (prints generated data to the console).
Example:
./udp_function_generator -p 9000 -i 5 -n 3 -v
3. Visualize Data in Serial Studio
To visualize the transmitted data:
-
Download and Install Serial Studio: Visit the official website to download and install the software.
-
Configure Serial Studio:
- Set the I/O Interface to
Network Socket
. - Select
UDP
as the Socket Type. - Set the Host to
localhost
. - Configure both the Local and Remote ports to match the program's
-p
option (default:9000
).
- Set the I/O Interface to
-
Enable Quick Plot:
- In Serial Studio, click on the Quick Plot checkbox in the Setup pane.
- This feature plots numerical values transmitted via UDP in real time.
-
Run the Program: Execute the
udp_function_generator
program. Waveforms will be displayed in Serial Studio's real-time plot.
Step-by-Step Guide
Waveform Configuration
When you run the program, it prompts you to configure the waveforms:
- Enter the type of waveform (
sine
,triangle
,saw
, orsquare
). - Specify the frequency in Hertz.
- Enter the phase in radians.
The program validates your input and warns about aliasing or distortion if the frequency is too high relative to the sampling rate.
Data Transmission
The program formats the waveform data into a comma-separated string and transmits it via UDP at the specified interval. You can view this data in Serial Studio or analyze it using any UDP-compatible client.
Troubleshooting
- No Waveforms in Serial Studio: Ensure that the UDP port matches between the program and Serial Studio, and that the host is set to
localhost
. - Distorted Waveforms: Reduce the frequency of the waveforms if they approach the Nyquist limit. The program issues warnings for frequencies near this threshold. If the frequencies are ok, please open a bug report.
- No Data Output: Ensure the program is running and the network configuration is correct.
Examples
Example 1: Single Sine Wave
Command:
./udp_function_generator -p 9000 -i 1 -n 1 -v
Configuration:
- Waveform Type:
sine
- Frequency:
10 Hz
- Phase:
0 radians
Example 2: Multiple Waveforms
Command:
./udp_function_generator -p 8000 -i 5 -n 3 -v
Configuration:
- Waveform 1:
triangle
,5 Hz
,0 radians
. - Waveform 2:
saw
,20 Hz
,1.5 radians
. - Waveform 3:
square
,50 Hz
,0 radians
.
Visualization:
- Serial Studio will display all three waveforms in real time, with a sampling interval of 5 ms.
Example 3: High-Frequency Warning
If the frequency exceeds 80% of the Nyquist rate, the program displays a warning:
Warning: Frequency 450.00 Hz approaches the Nyquist rate (500.00 Hz).
Consider reducing it below 400.00 Hz to ensure smooth waveform reconstruction.
This ensures a smooth visualization of waveforms.
Enjoy Your Testing!
For more advanced use cases, refer to the source code and explore the customizable options. You're welcome to make a PR with an improved version of this code.