# L = 44 # Manuelle Vorgabe Filterordnung ############## FIR-Filterentwurf ########## a = [1] # Nennerpolynom = 1 bei FIR-Filtern #=== Windowed FIR / Least Square ========= F_c = f_DB / (f_S/2) # -6dB - Frequenz b = sig.firwin(L, F_c) # Hamming-Window #=== Frequency Sampling ================== b = sig.firwin2(L, [0, F_DB, F_SB, 1], [1, 1, 0, 0]) #=== REMEZ / Parks-McClellan / Equiripple W_DB = 1; W_SB = 1 # manuelle Ordnung: b = sig.remez(L, [0, F_DB, F_SB, 1], [0, 1], [W_DB, W_SB], Hz = 2) # minimale Ordnung: (L_min,F,A,W) = dsp.remezord([F_DB, F_SB], [1, 0], [A_DB_lin, A_SB_lin], Hz = 2) b = sig.remez(L_min, F, A, W ) ############## IIR-Filterentwurf ######## #=== Butterworth Filter=================== [Lb,F_b] = sig.buttord(F_DB,F_SB,A_DB,A_SB) #[b, a] = sig.butter(Lb, F_b) #=== IIR-Wrapper (nur Python) ===== #[b, a] = sig.iirdesign(F_DB, F_SB, # A_DB, A_SB, ftype='ellip') ############################################ print('Filterkoeffizienten:') print('a = ', a); print('b = ', b) ## Calculate H(w), w = 0 ... pi, 1024 Pts. [w, H] = sig.freqz(b, a, 1024) # Translate w to physical frequencies: f = w / (2 * pi) * f_S
F_DB = 0.08 # corner of passband F_SB = 0.12 # corner of stopband # L = 32 # manual filter order N_plt = 1000 # Number of plotted samples N_show = 400 # Number of displayed samples Pe = 0.5 * erfc(sqrt(SNR)) # theoretical error probability # for BPSK VEC_SIZE = max(np.ceil(100 / Pe), 10000) # minimum vector length f(Pe) # for estimating the SNR # ====== Filter ================================ # b = ones(4) a = 1 # MA filter # Parks-McClellan / Remez (= Linphase FIR) - Filter: L, bands, amps, w = dsp.remezord([F_DB, F_SB], [1, 0], [del_DB, del_SB]) # b = sig.remez(L, [0, F_DB, F_SB, 0.5], [1, 0], [1, 1], Hz = 1) b = sig.remez(L, bands, amps, w) # IIR-Filter [b, a] = sig.iirdesign(F_DB * 2, F_SB * 2, R_DB, R_SB, ftype="ellip") # [b, a] = sig.iirdesign(F_DB*2, F_SB*2, R_DB, R_SB, ftype='cheby2') # [b, a] = sig.iirdesign(F_DB*2, F_SB*2, R_DB, R_SB, ftype='butter') # b = [0.2]; a = [1, -0.8] # # ================================================ w, H = sig.freqz(b, a, 2048) Hmax = max(abs(H)) H = H / Hmax tau, w = dsp.grpdelay(b, a, 2048) f = w / (2 * pi)
A_SB_lin = 10**(-A_SB / 20.0) # und linear # L = 44 # Manuelle Vorgabe Filterordnung ############## FIR-Filterentwurf ########## a = [1] # Nennerpolynom = 1 bei FIR-Filtern #=== Windowed FIR / Least Square ========= F_c = f_DB / (f_S / 2) # -6dB - Frequenz b = sig.firwin(L, F_c) # Hamming-Window #=== Frequency Sampling ================== b = sig.firwin2(L, [0, F_DB, F_SB, 1], [1, 1, 0, 0]) #=== REMEZ / Parks-McClellan / Equiripple W_DB = 1 W_SB = 1 # manuelle Ordnung: b = sig.remez(L, [0, F_DB, F_SB, 1], [0, 1], [W_DB, W_SB], Hz=2) # minimale Ordnung: (L_min, F, A, W) = dsp.remezord([F_DB, F_SB], [1, 0], [A_DB_lin, A_SB_lin], Hz=2) b = sig.remez(L_min, F, A, W) ############## IIR-Filterentwurf ######## #=== Butterworth Filter=================== [Lb, F_b] = sig.buttord(F_DB, F_SB, A_DB, A_SB) #[b, a] = sig.butter(Lb, F_b) #=== IIR-Wrapper (nur Python) ===== #[b, a] = sig.iirdesign(F_DB, F_SB, # A_DB, A_SB, ftype='ellip') ############################################ print('Filterkoeffizienten:') print('a = ', a) print('b = ', b) ## Calculate H(w), w = 0 ... pi, 1024 Pts. [w, H] = sig.freqz(b, a, 1024) # Translate w to physical frequencies:
F_DB = 0.08 # corner of passband F_SB = 0.12 # corner of stopband #L = 32 # manual filter order N_plt = 1000 # Number of plotted samples N_show = 400 # Number of displayed samples Pe = 0.5 * erfc(sqrt(SNR)) # theoretical error probability # for BPSK VEC_SIZE = max(np.ceil(100 / Pe), 10000) # minimum vector length f(Pe) # for estimating the SNR #====== Filter ================================ # b = ones(4) a = 1 # MA filter # Parks-McClellan / Remez (= Linphase FIR) - Filter: L, bands, amps, w = dsp.remezord([F_DB, F_SB], [1, 0], [del_DB, del_SB]) #b = sig.remez(L, [0, F_DB, F_SB, 0.5], [1, 0], [1, 1], Hz = 1) b = sig.remez(L, bands, amps, w) # IIR-Filter [b, a] = sig.iirdesign(F_DB * 2, F_SB * 2, R_DB, R_SB, ftype='ellip') #[b, a] = sig.iirdesign(F_DB*2, F_SB*2, R_DB, R_SB, ftype='cheby2') #[b, a] = sig.iirdesign(F_DB*2, F_SB*2, R_DB, R_SB, ftype='butter') #b = [0.2]; a = [1, -0.8] # #================================================ w, H = sig.freqz(b, a, 2048) Hmax = max(abs(H)) H = H / Hmax tau, w = dsp.grpdelay(b, a, 2048) f = w / (2 * pi)