$30
Project Objective
The project aims at design and simulation of a mechanical converter that converts binary representation of a number into its value in the decimal numeral system. The input consists of 8 signals representing bits – 1 if a signal is recorded, and 0 – if the signal is missing. The device generates a spring oscillation the frequency of which corresponds to the magnitude of the recorded input.
Task 1
Write a class Spring that implements the concept of a 1D massless spring and, hence, encapsulates its stiffness double k with the default value equal 1. Add the following methods:
1. The default constructor and an overloaded constructor that specifies the stiffness.
2. The public getter and a private setter;
3. Overloaded public move() methods that return an array of coordinates of an oscillating mass:
- double[] move(double t, double dt, double x0, double v0) – a body of unit mass oscillates during a period double t starting from t = 0 with initial conditions x(0) = x0 and v(0) = v0. The coordinate is computed per each double dt time step;
- double[] move(double t, double dt, double x0) – a body of unit mass oscillates during a period double t starting from t = 0 with initial conditions x(0) = x0 and v(0) = 0. The coordinate is computed per each double dt time step;
- double[] move(double t0, double t1, double dt, double x0, double v0) – a body of unit mass oscillates from t = t0 till t = t1 with initial conditions x(t0) = x0 and v(t0) = v0. The coordinate is computed per each double dt time step;
- double[] move(double t0, double t1, double dt, double x0, double v0, double m) – a body of a specified mass double m oscillates from t = t0 till t = t1 with initial conditions x(t0) = x0 and v(t0) = v0. The coordinate is computed per each double dt time step;
Task 2
1. Continue with the class Spring and add the following public methods:
- Spring inSeries(Spring that) – takes by reference a Spring that argument, connects it with this Spring in series and returns a new Spring object that represents the equivalent spring;
- Spring inParallel(Spring that) – takes by reference a Spring that argument, connects it with this Spring in parallel and returns a new Spring object that represents the equivalent spring;
2. Write a class SpringArray and implement the following public static methods:
- Spring equivalentSpring(String springExpr) – takes a String expression that represents connections of springs of unit stiffness and returns the equivalent spring. The Spring springExpr is a valid expression of balanced braces {} and brackets []. Empty brackets without nested braces and brackets represent a single spring of unit stiffness. Brackets with nested braces and brackets represent springs connected in parallel. Braces with nested braces and brackets represent springs connected in series.
- Spring equivalentSpring(String springExpr, Spring[] springs) – takes a String expression that represents connections of springs specified by a Spring array Spring[] springs and returns the equivalent spring.
Task 3
Write a class FT that implements the concept of Fourier transform / series. It transforms an array of coordinate values at different time moments into an array of the amplitudes of harmonic oscillations. Declare member variables and implement methods as needed.
Task 4
Write a class Converter that aims at conversion of a binary representation of a single byte into its decimal value. Consider a sequence of 8 bits and design a system of springs that implements each of them.
- Add a method that takes as its argument a sequence of 8 binary digits and adds connects the corresponding spring systems into a general system.
- Add a method that connects to the obtained system of spring a body of unit mass and computes its oscillations.
- Add a method that calculates the frequency amplitudes of the oscillations using the implemented Fourier transform.
- Add a method that determines the decimal value of the original binary sequence using the computed frequency amplitudes.