mirror of
https://github.com/eried/portapack-mayhem.git
synced 2024-10-01 01:26:06 -04:00
Adding FIR_taps for EU AM broadcasting 9K00A3E
This commit is contained in:
parent
400cccdcc1
commit
25dfa96257
@ -245,12 +245,29 @@ constexpr fir_taps_real<32> taps_6k0_decim_2 {
|
|||||||
11815, 10413, 7946, 4978, 2134, -83, -1411, -1857,
|
11815, 10413, 7946, 4978, 2134, -83, -1411, -1857,
|
||||||
-1640, -1080, -474, -21, 208, 247, 178, 95,
|
-1640, -1080, -474, -21, 208, 247, 178, 95,
|
||||||
} },
|
} },
|
||||||
|
};
|
||||||
|
|
||||||
|
// IFIR prototype filter fs=48000 ; pass=4500 , stop=7800, decim=4, fout=12000
|
||||||
|
// For Europe AM commercial broadcasting stations in LF/MF/HF, Emissions Designator 9K00A3E Bandwidth: 9.00 kHz (derivated from taps_6k0_decim_2 ):
|
||||||
|
// Pre-decimate LPF FIR filter design Created by SciPy Python with the "window method", num_taps = 32, cut_off = 4950. sample_rate = 48000 # Hz,
|
||||||
|
// Created with h = signal.firwin(num_taps, cut_off, nyq=sample_rate/2, window=('chebwin',49)) , achieving good STOP band plot < -60 dB's with some ripple.
|
||||||
|
// post-escaled h taps to avoid decimals , targetting <= similar int values as previous taps_6k0_dsb_channel peak < 32.767 (2 exp 15) and similar H(f)gain
|
||||||
|
constexpr fir_taps_real<32> taps_9k0_decim_2 {
|
||||||
|
.low_frequency_normalized = -4500.0f / 48000.0f, // Negative -cutt off freq -3dB (real achieved data ,in the plot and measurements)
|
||||||
|
.high_frequency_normalized = 4500.0f / 48000.0f, // Positive +cutt off freq -3dB (idem)
|
||||||
|
.transition_normalized = 3300.0f / 48000.0f, // 3300 Hz = (7800 Hz - 4500 Hz) (both from plot H(f) curve plot)
|
||||||
|
.taps = { {
|
||||||
|
-40, 3, 98, 239, 340, 266, -96, -726,
|
||||||
|
-1391, -1659, -1041, 772, 3691, 7156, 10271, 12118,
|
||||||
|
12118, 10271, 7156, 3691, 772, -1041, -1659, -1391,
|
||||||
|
-726, -96, 266, 340, 239, 98, 3, -40
|
||||||
|
} },
|
||||||
};
|
};
|
||||||
|
|
||||||
// Channel filter: fs=12000, pass=3000, stop=3300, decim=1, fout=12000
|
// Channel filter: fs=12000, pass=3000, stop=3300, decim=1, fout=12000
|
||||||
/* NOTE: Slightly less than 1.0 gain (normalized to 65536) due to max(taps) being
|
/* NOTE: Slightly less than 1.0 gain (normalized to 65536) due to max(taps) being
|
||||||
* slightly larger than 32767 (33312).
|
* slightly larger than 32767 (33312).
|
||||||
*/
|
*/
|
||||||
constexpr fir_taps_complex<64> taps_6k0_dsb_channel {
|
constexpr fir_taps_complex<64> taps_6k0_dsb_channel {
|
||||||
.low_frequency_normalized = -3000.0f / 12000.0f,
|
.low_frequency_normalized = -3000.0f / 12000.0f,
|
||||||
.high_frequency_normalized = 3000.0f / 12000.0f,
|
.high_frequency_normalized = 3000.0f / 12000.0f,
|
||||||
@ -275,6 +292,36 @@ constexpr fir_taps_complex<64> taps_6k0_dsb_channel {
|
|||||||
} },
|
} },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Channel filter: fs=12000, pass=4450, stop=4800, decim=1, fout=12000 (4k45 selected = aprox 4k5, after several iterative plot H(f) test, best trade off curve)
|
||||||
|
// For Europe AM commercial broadcasting stations in LF/MF/HF, Emissions Designator 9K00A3E Bandwidth: 9.00 kHz (derivative from taps_6k0_dsb_channel)
|
||||||
|
// FIR filter design created by SciPy Python with the "window method"; num_taps = 64, cut_off = 4450. sample_rate = 12000 # Hz,
|
||||||
|
// Created with : h=signal.firwin(num_taps, cut_off, nyq=sample_rate/2, window=('chebwin',50)), achieving good STOP band plot < -60 dB's with some ripple.
|
||||||
|
// post-escaled h taps to avoid decimals , targetting <= similar int values as previous taps_6k0_dsb_channel peak < 32.767 (2 exp 15), (29253) and similar H(f)gain
|
||||||
|
constexpr fir_taps_complex<64> taps_9k0_dsb_channel {
|
||||||
|
.low_frequency_normalized = -4500.0f / 12000.0f, // Negative -cutt off freq -3dB (in the H(f) curve plot)
|
||||||
|
.high_frequency_normalized = 4500.0f / 12000.0f, // Positive +cutt off freq -3dB (in the H(f) curve plot)
|
||||||
|
.transition_normalized = 350.0f / 12000.0f, // 350Hz = (4800 Hz -4450 Hz) cut-3dB's (both data comes from H(f) curve plot and confirmed by measurements )
|
||||||
|
.taps = { {
|
||||||
|
{ -34, 0 }, { 23, 0 }, { -13, 0 }, { -19, 0 },
|
||||||
|
{ 55, 0 }, { -65, 0 }, { 25, 0 }, { 59, 0 },
|
||||||
|
{ -137, 0 }, { 141, 0 }, { -35, 0 }, { -146, 0 },
|
||||||
|
{ 287, 0 }, { -262, 0 }, { 26, 0 }, { 317, 0 },
|
||||||
|
{ -544, 0 }, { 441, 0 }, { 29, 0 }, { -638, 0 },
|
||||||
|
{ 980, 0 }, { -707, 0 }, { -191, 0 }, { 1272, 0 },
|
||||||
|
{ -1805, 0 }, { 1175, 0 }, { 660, 0 }, { -2934, 0 },
|
||||||
|
{ 4214, 0 }, { -2774, 0 }, { -3655, 0 }, { 29253, 0 },
|
||||||
|
{ 29253, 0 }, { -3655, 0 }, { -2774, 0 }, { 4214, 0 },
|
||||||
|
{ -2934, 0 }, { 660, 0 }, { 1175, 0 }, { -1805, 0 },
|
||||||
|
{ 1272, 0 }, { -191, 0 }, { -707, 0 }, { 980, 0 },
|
||||||
|
{ -638, 0 }, { 29, 0 }, { 441, 0 }, { -544, 0 },
|
||||||
|
{ 317, 0 }, { 26, 0 }, { -262, 0 }, { 287, 0 },
|
||||||
|
{ -146, 0 }, { -35, 0 }, { 141, 0 }, { -137, 0 },
|
||||||
|
{ 59, 0 }, { 25, 0 }, { -65, 0 }, { 55, 0 },
|
||||||
|
{ -19, 0 }, { -13, 0 }, { 23, 0 }, { -34, 0 },
|
||||||
|
} },
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// USB AM 2K80J3E emission type ///////////////////////////////////////////
|
// USB AM 2K80J3E emission type ///////////////////////////////////////////
|
||||||
|
|
||||||
// IFIR prototype filter: fs=12000, pass=3000, stop=3300, decim=1, fout=12000
|
// IFIR prototype filter: fs=12000, pass=3000, stop=3300, decim=1, fout=12000
|
||||||
|
Loading…
Reference in New Issue
Block a user