SignalLab is a cross-disciplinary console-based Java application designed to simulate, test, and analyze the data integrity pipeline of a digital communication system under variable electronic channel noise conditions. This project demonstrates the practical application of advanced software engineering patterns (OOP, custom exceptions, file handling) to concrete Electronics and Communication Engineering (ECE) concepts.
- Signal Generation & Quantization: Simulates analog waveforms (Sine, Square, Sawtooth) and samples them into binary bitstreams.
-
Nyquist-Shannon Validation: Strictly enforces sampling boundaries (
$F_s \ge 2 \cdot F_{signal}$ ) to prevent digital signal aliasing. - 7,4 Hamming Block Encoding: Dynamically encodes data blocks using systematic parities to detect and repair transmission bit-flips.
- Noisy Channel Simulation: Statistical bit-flip engine modeling stochastic real-world physical layer interference.
- Automated Logging: Saves a full execution telemetry and metrics summary report directly onto local disk files.
- Language: Java SE (JDK 8 or higher)
- IDE/Text Editor: Visual Studio Code (VS Code)
- Compilation Tool: Java Compiler (javac CLI infrastructure)
- Operating Environment: Windows Command Prompt / Terminal
SignalLab/
├── .gitignore # Prevents tracking of compiled binaries and system caches
├── README.md # VITyarthi-compliant installation and test documentation
├── statement.md # Documented functional and non-functional requirements
├── data/ # Target workspace directory for archived telemetry reports
│ └── Simulation_Report_YYYYMMDD_HHMMSS.txt
└── src/ # Source package architecture pipeline
└── com/
└── signallab/
├── Main.java # Application orchestration entry point
├── analysis/
│ └── BERAnalyzer.java # Telemetry and bit mismatch tracking
├── channel/
│ └── NoisyChannel.java # Stochastic bit-inversion simulation engine
├── encoding/
│ ├── HammingCode.java # Systematic matrix block encoder/decoder
│ └── LineEncoder.java # NRZ and Manchester physical map utilities
├── exceptions/
│ ├── InvalidSignalException.java
│ └── TransmissionException.java
├── receiver/
│ └── Receiver.java # Syndrome recovery and bit-repair station
├── signal/
│ ├── SignalGenerator.java# Continuous waveform array generation
│ └── Waveform.java # Waveform property identifiers (Enum)
└── util/
└── FileHandler.java # Disk persistence streaming layer
Open your command prompt or terminal and navigate into the root directory of your project folder:
cd C:\SignalLabCompile all localized package source files into a binary classpath destination using the following command:
javac -sourcepath src -d bin src/com/signallab/Main.javaLaunch the interactive command-line simulator using this execution command:
java -cp bin com.signallab.MainTo test the pipeline and confirm that the error correction and parameter validations are working correctly, perform these test validation profiles during execution:
When prompted in the menu console, input the following configuration parameters:
- Waveform Type: Enter
1(SINE) - Signal Frequency: Enter
5 - Sampling Rate: Enter
20(Valid under Nyquist-Shannon criteria) - Signal Duration: Enter
2 - Channel Error Probability: Enter
0.02(Simulates a 2% random noise layout) - Expected Output: The simulator will run completely, fix single-bit errors via parities, print an execution report card to the screen, and create an automated log file in your
C:\SignalLab\data\directory.
-
Waveform Type: Enter
1(SINE) -
Signal Frequency: Enter
10 -
Sampling Rate: Enter
15(Intentionally invalid; breaks the condition$15 \ge 2 \cdot 10$ ) -
Expected Output: The pipeline gracefully breaks immediately, raising an
InvalidSignalExceptionwith the message:Nyquist Shannon violation!. This proves the application's robust error-handling logic without crashing.