Example #1
0
int main()
{
    double x;
    struct FirStruct fs;
    int i;

    init_fir(&fs, 100.0 * 30.0 * 60.0);

    for (i = 0; i < 1000000; i++) {
        x = sin(2.0 * M_PI * (double) i / 4000) + sin(2.0 * M_PI * (double) i / 8000);
        printf("%g %g\n", x, fir_filter(x, &fs));
    }
    return (0);
}
Example #2
0
void ssb_init( float shift_carrier)
{
	double m_NcoInc;
	float a[83];
	float b[89];
	float c[89]; 
	/*
	 * Kaiser Window FIR Filter
	 * Passband: 0.0 - 3000.0 Hz
	 * Order: 83
	 * Transition band: 3000.0 Hz
	 * Stopband attenuation: 80.0 dB
	 */
	a[0] =	-1.7250879E-5f;
	a[1] =	-4.0276995E-5f;
	a[2] =	-5.6314686E-5f;
	a[3] =	-4.0164417E-5f;
	a[4] =	3.0053454E-5f;
	a[5] =	1.5370155E-4f;
	a[6] =	2.9180944E-4f;
	a[7] =	3.6717512E-4f;
	a[8] =	2.8903902E-4f;
	a[9] =	3.1934875E-11f;
	a[10] =	-4.716546E-4f;
	a[11] =	-9.818495E-4f;
	a[12] =	-0.001290066f;
	a[13] =	-0.0011395542f;
	a[14] =	-3.8172887E-4f;
	a[15] =	9.0173044E-4f;
	a[16] =	0.0023420234f;
	a[17] =	0.003344623f;
	a[18] =	0.003282209f;
	a[19] =	0.0017731993f;
	a[20] =	-0.0010558856f;
	a[21] =	-0.004450674f;
	a[22] =	-0.0071515352f;
	a[23] =	-0.007778209f;
	a[24] =	-0.0053855875f;
	a[25] =	-2.6561373E-10f;
	a[26] =	0.0070972904f;
	a[27] =	0.013526209f;
	a[28] =	0.016455514f;
	a[29] =	0.013607533f;
	a[30] =	0.0043148645f;
	a[31] =	-0.009761283f;
	a[32] =	-0.02458954f;
	a[33] =	-0.03455451f;
	a[34] =	-0.033946108f;
	a[35] =	-0.018758629f;
	a[36] =	0.011756961f;
	a[37] =	0.054329403f;
	a[38] =	0.10202855f;
	a[39] =	0.14574805f;
	a[40] =	0.17644218f;
	a[41] =	0.18748334f;
	a[42] =	0.17644218f;
	a[43] =	0.14574805f;
	a[44] =	0.10202855f;
	a[45] =	0.054329403f;
	a[46] =	0.011756961f;
	a[47] =	-0.018758629f;
	a[48] =	-0.033946108f;
	a[49] =	-0.03455451f;
	a[50] =	-0.02458954f;
	a[51] =	-0.009761283f;
	a[52] =	0.0043148645f;
	a[53] =	0.013607533f;
	a[54] =	0.016455514f;
	a[55] =	0.013526209f;
	a[56] =	0.0070972904f;
	a[57] =	-2.6561373E-10f;
	a[58] =	-0.0053855875f;
	a[59] =	-0.007778209f;
	a[60] =	-0.0071515352f;
	a[61] =	-0.004450674f;
	a[62] =	-0.0010558856f;
	a[63] =	0.0017731993f;
	a[64] =	0.003282209f;
	a[65] =	0.003344623f;
	a[66] =	0.0023420234f;
	a[67] =	9.0173044E-4f;
	a[68] =	-3.8172887E-4f;
	a[69] =	-0.0011395542f;
	a[70] =	-0.001290066f;
	a[71] =	-9.818495E-4f;
	a[72] =	-4.716546E-4f;
	a[73] =	3.1934875E-11f;
	a[74] =	2.8903902E-4f;
	a[75] =	3.6717512E-4f;
	a[76] =	2.9180944E-4f;
	a[77] =	1.5370155E-4f;
	a[78] =	3.0053454E-5f;
	a[79] =	-4.0164417E-5f;
	a[80] =	-5.6314686E-5f;
	a[81] =	-4.0276995E-5f;
	a[82] =	-1.7250879E-5f;


	/*
	 * Kaiser Window FIR Filter
	 * Passband: 0.0 - 1350.0 Hz
	 * modulation freq: 1650Hz
	 * Order: 88
	 * Transition band: 500.0 Hz
	 * Stopband attenuation: 60.0 dB
	 */
	
	b[0] =	-2.081541E-4f;
	b[1] =	-3.5587244E-4f;
	b[2] =	-5.237722E-5f;
	b[3] =	-1.00883444E-4f;
	b[4] =	-8.27162E-4f;
	b[5] =	-7.391658E-4f;
	b[6] =	9.386093E-5f;
	b[7] =	-6.221307E-4f;
	b[8] =	-0.0019506976f;
	b[9] =	-8.508009E-4f;
	b[10] =	2.8596455E-4f;
	b[11] =	-0.002028003f;
	b[12] =	-0.003321186f;
	b[13] =	-2.7830937E-4f;
	b[14] =	2.7148606E-9f;
	b[15] =	-0.004654892f;
	b[16] =	-0.0041854046f;
	b[17] =	0.001115112f;
	b[18] =	-0.0017027275f;
	b[19] =	-0.008291345f;
	b[20] =	-0.0034240147f;
	b[21] =	0.0027767413f;
	b[22] =	-0.005873899f;
	b[23] =	-0.011811939f;
	b[24] =	-2.075215E-8f;
	b[25] =	0.003209243f;
	b[26] =	-0.0131212445f;
	b[27] =	-0.013072912f;
	b[28] =	0.0064319638f;
	b[29] =	1.0081245E-8f;
	b[30] =	-0.023050211f;
	b[31] =	-0.009034872f;
	b[32] =	0.015074444f;
	b[33] =	-0.010180626f;
	b[34] =	-0.034043692f;
	b[35] =	0.004729156f;
	b[36] =	0.024004854f;
	b[37] =	-0.033643555f;
	b[38] =	-0.043601833f;
	b[39] =	0.04075407f;
	b[40] =	0.03076061f;
	b[41] =	-0.10492244f;
	b[42] =	-0.049181364f;
	b[43] =	0.30635652f;
	b[44] =	0.5324795f;
	b[45] =	0.30635652f;
	b[46] =	-0.049181364f;
	b[47] =	-0.10492244f;
	b[48] =	0.03076061f;
	b[49] =	0.04075407f;
	b[50] =	-0.043601833f;
	b[51] =	-0.033643555f;
	b[52] =	0.024004854f;
	b[53] =	0.004729156f;
	b[54] =	-0.034043692f;
	b[55] =	-0.010180626f;
	b[56] =	0.015074444f;
	b[57] =	-0.009034872f;
	b[58] =	-0.023050211f;
	b[59] =	1.0081245E-8f;
	b[60] =	0.0064319638f;
	b[61] =	-0.013072912f;
	b[62] =	-0.0131212445f;
	b[63] =	0.003209243f;
	b[64] =	-2.075215E-8f;
	b[65] =	-0.011811939f;
	b[66] =	-0.005873899f;
	b[67] =	0.0027767413f;
	b[68] =	-0.0034240147f;
	b[69] =	-0.008291345f;
	b[70] =	-0.0017027275f;
	b[71] =	0.001115112f;
	b[72] =	-0.0041854046f;
	b[73] =	-0.004654892f;
	b[74] =	2.7148606E-9f;
	b[75] =	-2.7830937E-4f;
	b[76] =	-0.003321186f;
	b[77] =	-0.002028003f;
	b[78] =	2.8596455E-4f;
	b[79] =	-8.508009E-4f;
	b[80] =	-0.0019506976f;
	b[81] =	-6.221307E-4f;
	b[82] =	9.386093E-5f;
	b[83] =	-7.391658E-4f;
	b[84] =	-8.27162E-4f;
	b[85] =	-1.00883444E-4f;
	b[86] =	-5.237722E-5f;
	b[87] =	-3.5587244E-4f;
	b[88] =	-2.081541E-4f;

	/*
	 * Kaiser Window FIR Filter
	 *
	 * Filter type: Q-filter
	 * Passband: 0.0 - 1350.0 Hz
	 * modulation freq: 1650Hz
	 *  with +90 degree pahse shift
	 * Order: 88
	 * Transition band: 500.0 Hz
	 * Stopband attenuation: 60.0 dB
	 */

	c[0] =	6.767926E-5f;
	c[1] =	-2.1822347E-4f;
	c[2] =	-3.3091355E-4f;
	c[3] =	1.1819744E-4f;
	c[4] =	2.1773627E-9f;
	c[5] =	-8.6602167E-4f;
	c[6] =	-5.9300865E-4f;
	c[7] =	3.814961E-4f;
	c[8] =	-6.342388E-4f;
	c[9] =	-0.00205537f;
	c[10] =	-5.616135E-4f;
	c[11] =	4.8721067E-4f;
	c[12] =	-0.002414588f;
	c[13] =	-0.003538588f;
	c[14] =	-2.7166707E-9f;
	c[15] =	-3.665928E-4f;
	c[16] =	-0.0057645175f;
	c[17] =	-0.004647882f;
	c[18] =	8.681589E-4f;
	c[19] =	-0.0034366683f;
	c[20] =	-0.010545009f;
	c[21] =	-0.0045342376f;
	c[22] =	9.309649E-4f;
	c[23] =	-0.01009504f;
	c[24] =	-0.015788108f;
	c[25] =	-0.0027427748f;
	c[26] =	-0.0020795742f;
	c[27] =	-0.021347176f;
	c[28] =	-0.019808702f;
	c[29] =	-4.1785704E-9f;
	c[30] =	-0.011752444f;
	c[31] =	-0.037658f;
	c[32] =	-0.020762002f;
	c[33] =	8.017756E-4f;
	c[34] =	-0.03406628f;
	c[35] =	-0.060129803f;
	c[36] =	-0.01745214f;
	c[37] =	-0.008082453f;
	c[38] =	-0.08563026f;
	c[39] =	-0.09845453f;
	c[40] =	-0.010001372f;
	c[41] =	-0.06433928f;
	c[42] =	-0.31072536f;
	c[43] =	-0.35893586f;
	c[44] =	0.0f;
	c[45] =	0.35893586f;
	c[46] =	0.31072536f;
	c[47] =	0.06433928f;
	c[48] =	0.010001372f;
	c[49] =	0.09845453f;
	c[50] =	0.08563026f;
	c[51] =	0.008082453f;
	c[52] =	0.01745214f;
	c[53] =	0.060129803f;
	c[54] =	0.03406628f;
	c[55] =	-8.017756E-4f;
	c[56] =	0.020762002f;
	c[57] =	0.037658f;
	c[58] =	0.011752444f;
	c[59] =	4.1785704E-9f;
	c[60] =	0.019808702f;
	c[61] =	0.021347176f;
	c[62] =	0.0020795742f;
	c[63] =	0.0027427748f;
	c[64] =	0.015788108f;
	c[65] =	0.01009504f;
	c[66] =	-9.309649E-4f;
	c[67] =	0.0045342376f;
	c[68] =	0.010545009f;
	c[69] =	0.0034366683f;
	c[70] =	-8.681589E-4f;
	c[71] =	0.004647882f;
	c[72] =	0.0057645175f;
	c[73] =	3.665928E-4f;
	c[74] =	2.7166707E-9f;
	c[75] =	0.003538588f;
	c[76] =	0.002414588f;
	c[77] =	-4.8721067E-4f;
	c[78] =	5.616135E-4f;
	c[79] =	0.00205537f;
	c[80] =	6.342388E-4f;
	c[81] =	-3.814961E-4f;
	c[82] =	5.9300865E-4f;
	c[83] =	8.6602167E-4f;
	c[84] =	-2.1773627E-9f;
	c[85] =	-1.1819744E-4f;
	c[86] =	3.3091355E-4f;
	c[87] =	2.1822347E-4f;
	c[88] =	-6.767926E-5f;
	
	audio_fir = init_fir( 83, a );
	hilbert = init_fir( 89, c );
	delay   = init_fir( 89, b );
	interpolateIQ = init_cfir( 83, a ); 
	nco_enabled = 0 ;
	if( abs(shift_carrier) > 0 ) {	
		m_NcoInc = (2.0 * 3.14159265358979323846)*shift_carrier/SAMPLE_RATE;
		m_OscCos = cos(m_NcoInc);
		m_OscSin = sin(m_NcoInc);

		m_Osc1.re = 1.0;	//initialize unit vector that will get rotated
		m_Osc1.im = 0.0;
		nco_enabled = 1;
	}
}