mirror of
https://github.com/radio95-rnt/fm95.git
synced 2026-02-26 19:23:51 +01:00
im a genius
This commit is contained in:
@@ -18,22 +18,6 @@ float sincf(float x) {
|
||||
return (x == 0.0f) ? 1.0f : sinf(M_PI * x) / (M_PI * x);
|
||||
}
|
||||
|
||||
void init_bpf(FIRFilter *bpf, float start, float end) {
|
||||
int m = FILTER_LEN - 1;
|
||||
float sum = 0.0f;
|
||||
|
||||
for(int n = 0; n < FILTER_LEN; n++) {
|
||||
float x = n-m/2.0f;
|
||||
float h1 = sincf(2.0f*start*x) * (0.54 - 0.46 * cosf(M_2PI * n / m));
|
||||
float h2 = sincf(2.0f*end*x) * (0.54 - 0.46 * cosf(M_2PI * n / m));
|
||||
bpf->filter[n] = h1-h2;
|
||||
sum += bpf->filter[n];
|
||||
}
|
||||
|
||||
for(int n = 0; n < FILTER_LEN; n++) {
|
||||
bpf->filter[n] /= sum;
|
||||
}
|
||||
}
|
||||
void init_lpf(FIRFilter *lpf, float freq) {
|
||||
int m = FILTER_LEN - 1;
|
||||
float sum = 0.0f;
|
||||
|
||||
@@ -23,6 +23,5 @@ typedef struct filters
|
||||
float filter[FILTER_LEN];
|
||||
int filter_idx;
|
||||
} FIRFilter;
|
||||
void init_bpf(FIRFilter *bpf, float start, float end);
|
||||
void init_lpf(FIRFilter *lpf, float freq);
|
||||
float fir_filter(FIRFilter *fir, float sample);
|
||||
10
src/fm95.c
10
src/fm95.c
@@ -406,7 +406,7 @@ int main(int argc, char **argv) {
|
||||
|
||||
// #region Setup Filters/Modulaltors/Oscillators
|
||||
Oscillator osc;
|
||||
init_oscillator(&osc, polar_stereo ? 31250.0 : 19000, sample_rate);
|
||||
init_oscillator(&osc, polar_stereo ? 31250.0 : 9500, sample_rate);
|
||||
|
||||
FMModulator sca_mod;
|
||||
init_fm_modulator(&sca_mod, sca_frequency, sca_deviation, sample_rate);
|
||||
@@ -485,21 +485,21 @@ int main(int argc, char **argv) {
|
||||
output[i] = mono*MONO_VOLUME;
|
||||
if(stereo) {
|
||||
float stereo = (ready_l - ready_r) / 2.0f;
|
||||
float stereo_carrier = get_oscillator_sin_multiplier_ni(&osc, polar_stereo ? 1 : 2);
|
||||
float stereo_carrier = get_oscillator_sin_multiplier_ni(&osc, polar_stereo ? 1 : 4);
|
||||
|
||||
if(polar_stereo) {
|
||||
output[i] += ((stereo+0.2)*stereo_carrier)*STEREO_VOLUME;
|
||||
} else {
|
||||
float pilot = get_oscillator_sin_multiplier_ni(&osc, 1);
|
||||
float pilot = get_oscillator_sin_multiplier_ni(&osc, 2);
|
||||
output[i] += pilot*PILOT_VOLUME +
|
||||
(stereo*stereo_carrier)*STEREO_VOLUME;
|
||||
}
|
||||
}
|
||||
if(rds_on && polar_stereo == 0) {
|
||||
float rds_carrier = get_oscillator_sin_multiplier_ni(&osc, 3);
|
||||
float rds_carrier = get_oscillator_sin_multiplier_ni(&osc, 6);
|
||||
output[i] += (current_rds_in*rds_carrier)*RDS_VOLUME;
|
||||
if(!sca_on) {
|
||||
float rds2_carrier_66 = fir_filter(&rds2_bpf, rds_carrier*get_oscillator_sin_multiplier_ni(&osc, 0.5f));
|
||||
float rds2_carrier_66 = get_oscillator_sin_multiplier_ni(&osc, 7);
|
||||
output[i] += (current_rds2_in*rds2_carrier_66)*RDS2_VOLUME;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user