Write a complex Digital Signal Processing(DSP) application with SignalLab using C#, VB.NET, J# or C++/CLI


 

This is a step by step tutorial for writing a complex Digital Signal Processing (DSP) application in .NET by using SignalLab. The steps are exactly identical in C#, Visual Basic .NET, C++/CLI and J#.

There is no code writing necessary to complete this application.

There is no need to know C#, Visual Basic, J# or C++ in order to create this application.


 

Here is what our application will do:

  1. The application will generate random signal.
  2. The signal will be plotted on a scope component.
  3. The signal will be filtered by a LowPass filter.
  4. The filtered signal will be recorded into a file.
  5. The filtered signal also will be plotted on the Scope.
  6. The application will perform Fast Fourier Transformation (FFT) on both the original and the filtered signal.
  7. The results of both FFTs will be shown in a separated Scope, and the FFT of the filtered signal will be shown in a Waterfall.

All of this will be done in less than 2 minutes, and without writing a single line of code.

ComplexSignalProcessing

The tutorial covers the following steps, which should take less than 5 minutes:

1. Add a RandomGen Component to Your Application's Form:

RandomGenPalette

2. Add a LowPass Component to Your Application's Form:

LowPassPalette

3. Add 2 Fourier Components to Your Application's Form:

FourierPalette

4. Add a Logger Component to Your Application's Form:

SignalLabLoggerPalette

5. Add 2 Scope Controls to Your Application's Form:

ScopePalette

6. Add a Waterfall Control to Your Application's Form:

WaterfallPalette

7. Add 2 channels to both scope1 and scope2:

7.1. Double-click on the scope1 component on the form:

ComplexForm1Scope1

7.2. Add 2 channel in the ScopeChannel Collection Editor, rename them to “Random”, and “LowPass”, then click OK:

ScopeChannelEditorTwoChannels

7.3. Repeat the same steps with scope2 so it will also have 2 channels named “Random”, and “LowPass”.

8. Connect the randomGen1.OutputPin to scope1.InputPins.Random, lowPass1.InputPin and fourier1.InputPin:

8.1. Select the randomGen1 component on the form:

Form1RandomGen1

8.2. In the randomGen1 Properties select OutputPin and click on the DottedButton button:

RandomGen1PropertiesOutputPin

8.3. In the connection editor check the InputPins.Random of the scope1, InputPin of lowPass1 and InputPin of fourier1, then click OK:

RandomGen1OutputPinEdit

9. Connect the lowPass1.OutputPin to scope1.InputPins.LowPass, logger1.InputPin and fourier2.InputPin:

9.1. Select the lowPass1 component on the form:

Form1LowPass1

9.2. In the lowPass1 Properties select OutputPin and click on the DottedButton button:

LowPass1PropertiesOutputPin

9.3. In the connection editor check the InputPins.LowPass of the scope1, InputPin of logger1 and InputPin of fourier2, then click OK:

LowPass1OutputPinEdit

10. Connect the fourier1.OutputPin to scope2.InputPins.Random:

10.1. Select the fourier1 component on the form:

Form1Fourier1

10.2. In the fourier1 Properties select SpectrumOutputPin and click on the DottedButton button:

Fourier1PropertiesOutputPin

10.3. In the connection editor check the InputPins.Random of the scope2, and click OK:

Fourier1OutputPinEdit

11. Connect the fourier2.OutputPin to scope2.InputPins.LowPass and waterfall1.InputPin:

11.1. Select the fourier2 component on the form:

Form1Fourier2

11.2. In the fourier2 Properties select SpectrumOutputPin and click on the DottedButton button:

Fourier2PropertiesOutputPin

11.3. In the connection editor check the InputPins.LowPass of the scope2, and InputPin of the waterfall1, then click OK:

Fourier2OutputPinEdit

12. Select file name for the file to be recorded by the logger1:

12.1. Select the logger1 component on the form:

ComplexForm1Logger1

12.2. In the logger1 Properties select the FileName property and enter the path and the name of the file where you want to record the processed data:

SignalLabLogerPropertiesFileName

13. Run the Application:

13.1 Press (F5) to run the application. You should see result similar to this one:

RunningComplexProcessing

Here is a diagram of the OpenWire connections in this application:

ComplexSignalProcessDiagram