Experimental implementation of the adaptive filter of "Interface" magazine in 2016-2017
Dependencies: amakusa mbed-dsp mbed shimabara ukifune unzen_nucleo_f746
Fork of skeleton_unzen_nucleo_f746 by
ハードウェアおよびソフトウェアはskelton_unzen_nucleo_f746を基本にしています。
signal_processing.h
- Committer:
- shorie
- Date:
- 2017-02-01
- Revision:
- 18:b9b1116f8768
- Parent:
- 16:d4ea3e6a0bce
- Child:
- 19:f5e785fe50b1
File content as of revision 18:b9b1116f8768:
#ifndef _SIGNAL_PROCESSING_H_ #define _SIGNAL_PROCESSING_H_ #include "amakusa.h" #define SAMPLING_FREQUENCY 48000 enum wave_form { triangle, square }; // Variable Frequency Oscillator. Only square and triangle class VFO { public: VFO( void ); virtual ~VFO(void); void run( float out_buffer[], // place to write the right output samples unsigned int block_size // block size [sample] ); // parameter settings void set_frequency( int freq ); // unit is Hz. void set_Fs( int Fs ); // unit is Hz. void set_duty_cycle( float duty ); // 0 ... 0.5 void set_wave_form( wave_form form ); private: // control variables. int frequency; // VFO frequency [Hz] int Fs; // sampling Frequency [Hz] float duty_cycle; // VFO duty cycle. 0 ... 0.5 wave_form form; // form of the wave form. int current_phase; // internal variable of VFO. // internal variable. int half_way; // change point by duty cycle. ( period * duty_cycle ). float rising_rate; float falling_rate; void update_parameters(void); // call one of the parameter is changed. }; // Monophonic synthsizer class class Monophonic { public: Monophonic( unsigned int block_size ); virtual ~Monophonic(void); void run( float out_buffer[], // place to write the right output samples unsigned int block_size // block size [sample] ); void set_Fs( int Fs ); // unit is Hz. void set_vfo_frequency( int freq ); // unit is Hz. void set_vfo_duty_cycle( float duty ); // 0 ... 0.5 void set_vfo_wave_form( wave_form form ); private: VFO *vfo; }; // User Signal processing Class class SignalProcessing { public: // essential members. Do not touch SignalProcessing( unsigned int block_size ); void run( float rx_left_buffer[], // array of the left input samples float rx_right_buffer[], // array of the right input samples float tx_left_buffer[], // place to write the left output samples float tx_right_buffer[], // place to write the right output samples unsigned int block_size // block size [sample] ); // project depenedent members. void set_volume( float vol ); void set_Fs( int Fs ); // unit is Hz. void set_vfo_frequency( int freq ); // unit is Hz. void set_vfo_duty_cycle( float duty ); // 0 ... 0.5 void set_vfo_wave_form( wave_form form ); private: // essential members. Do not touch. void enter_critical_section(void); void leave_critical_section(void); // project dependent members. float volume_level; // 0 ... 1.0 Monophonic * note; }; #endif