## Efficient digital interpolation filter Started by 11 months ago5 replieslatest reply 11 months ago165 views

I came across this paper entitled "Design of Efficient Digital Interpolation Filters and Sigma-Delta Modulator for Audio DAC" where the author oversamples an input frequency, fsig = 1kHz with ratio L = 128 and update frequency, fsi = 64kHz. The interpolation filter specification is given by: passband ripple = 0.001dB for frequency <0.45*fsi and stopband attenuation = 174dB for frequency > 0.55*fsi.

For single-stage system, the Butterworth filter order is given by:

[S1_B_N, S1_B_Wn] = buttord(0.45/128, 0.55/128, 0.001, 174);

Matlab gives S1_B_N = 121 for the expression above.

For two-stage system, L1 = 2 and L2 = 64, I am using the equations below to get Butterworth filter order:

L1 = 2;

L2 = 64;

fp1 = 0.45/L1;

fs1 = 0.55/L1;

fp2 = 0.45/128;

fs2 = (L1-0.55)/128;

[S2_B_N1, S2_B_Wn1] = buttord(fp1, fs1, p_dB/2, s_dB);

[S2_B_N2, S2_B_Wn2] = buttord(fp2, fs2, p_dB/2, s_dB);

Matlab gives S2_B_N1 = 111 and S2_B_N2 = 21 as compared to author's result of S2_B_N1 = 77 and S2_B_N2 = 21. Please advise if I missed out sth,

[ - ] frequency points might need to be doubled due to convention of matlab for frequency being normalised to Nyquist (not Fs)

[ - ] I accidentally found out that buttord(0.45, 0.55, p_dB/2, s_dB) gives N1 = 77 for L1 = 2 and L2 = 64 but when I considered L1 = 16 and L2 = 8, the author's result for N1 = 120 and N2 = 7. I still do not understand the equation used to derive the filter order.

[ - ] L1 = 16;

L2 = 8;

fp1 = 0.45*2/L1;

fs1 = 0.55*2/L1;

fp2 = 0.45/(L1*L2);

fs2 = (L1-0.55)/(L1*L2);

[S2_B_N1, S2_B_Wn1] = buttord(fp1, fs1, .001, 174);

[S2_B_N2, S2_B_Wn2] = buttord(fp2, fs2, .001, 174);

[ - ] Thanks for your codes, it works. BTW, why passband ripple not divided by 2?

[ - ] 