Posts

Welcome!

In this blog, I will be posting articles about DSP applied to audio, as well as other related topics. The code examples provided will primarily focus on the JUCE framework, which is written in C++, but it can also be applied to other general purposes.

Thanks for reading and don't forget to listen to my music!

FPGA and STM32 [Stacked Connection using SPI] for DSP applications

Image
 In this video, you can see how I connected two development boards, an FPGA and an STM32, for DSP applications. They communicate via SPI, with the DAC and ADC on the STM32 board functioning as an interface, while the processing is handled by the FPGA. If you have any questions about the implementation, feel free to leave a comment!

Desert Resonator: Technical Analysis

Image
     In this post, I will provide a brief explanation of the signal processing algorithms behind my plug-in, 'Desert Resonator' .       Desert Resonator is a wavetable synthesizer featuring a physical modeling stage, an analog modelling low-pass filter, and a flanger.      This plugin is completely developed using the JUCE framework in C++. I did not utilize any JUCE libraries for the digital signal processing, everything is built from scratch.  I incorporated some elements that I previously uploaded on this blog, like the Steiner-Parker filter, which utilizes analog modelling techniques.      At the moment, the code will not be open source, but you can find on my blog the code for some of the stages of this plug-in.      I will explain each of the stages present in this plug-in. Wavetable Synth       The wavetable is a matrix of 9 different sound samples that are linearly interpo...

MXR Phase 90 - Analog modelling [C++ JUCE]

Image
Visit Repository        A phaser effect alters an audio signal by splitting it into two paths. One path remains unchanged, while the other undergoes phase shifting. The two paths are then combined, resulting in certain frequencies either reinforcing or canceling each other out, creating the characteristic sound.         The phase shifting stage comprises four cascaded op-amp-based all-pass filters. Each filter introduces a 90° phase shift at the cutoff frequency of the low-pass filter (which is 45°). Importantly, the magnitude response remains constant.   By connecting two of these networks in series, the phase at the Phaser frequency is shifted to 180° (90° + 90°). When the processed signal with the 180° phase-shift is added to the original signal, amplitude cancellation occurs only at Phaser frequency, creating a notch at this frequency.      Consequently, introducing series pairs of Phase Shifting Uni...

Wireless communication protocol using parity check and checksum [ASK modules]

Image
Visit Repository     This project aims to provide a unidirectional digital communication protocol, designed for applications requiring reliability and stability in the received information. Therefore, the chosen approach involves designing a model with a high load of redundant information for error detection.      It is worth clarifying that the project is focused on applications involving the gradual control of parameters. In addition to error detection, a user-customizable anomaly detection system is implemented in the transmitter. This mechanism ensures the coherence of values read by the analog-to-digital converter, preventing false readings caused by electronic component failures or noise.      In this proposed system, speed is not the priority; rather, it is tailored for applications where the risk of receiving incorrect data, misinterpreted as valid, must be avoided. Implementation      As a test mod...

Linear Analog Modelling - Steiner-Parker Filter [ C++ JUCE ]

Image
Visit Repository        In this post, I'll delve into a method for modelling linear circuits. By linear circuits, I'm referring to circuits  composed of linear components such as resistors, capacitors, and inductors. This technique isn't applicable to circuits containing non-linear components like diodes or transistors.       For demostration I'll construct a Steiner - Parker low pass filter.    Analog Modelling            The technique employed for modelling involves extracting the differential equations that describe the circuit's behavior. Subsequently, numerical methods for solving Ordinary Differential Equations (ODE) are utilized to approximate the solution.       Equations for your circuit can be obtained either manually or with the assistance of software tools. In my case, I prefer using System Modeler and Mathematica (from Wolfram).     ...

Linkwitz–Riley filters in C++ JUCE for multi-band processing

Image
Visit Repository         In this article, you'll learn how to implement a Linkwitz-Riley crossover filter, which is crucial for multiband processing. I'll start with a brief mathematical explanation of the implementation. Then, I'll showcase the equivalent C++ code, and finally, I'll guide you through its application in JUCE for audio processing.      Through this implementation, you'll not only gain the ability to create a multiband equalizer but also to incorporate your desired processing within each individual band. For example to implement an FX that works by bands.      Crossover filters are built in terms to get a flat frequency response. These are widely used in audio applications.Each band is constructed using a combination of low-pass and high-pass filters, each composed of two cascaded 2nd order Butterworth filters. Thus, the implementation of each Linkwitz-Riley filter requires the utilization of four Butte...