I need to get the difference equation of a specific elliptic filter. I calculated the transfer function coefficients in MATLAB with:
%% Low pass design n = 10; passband_ripple = 1; stopband_attenuation = 60; f = 4750; fs = 44100; [B,A] = ellip(n,passband_ripple,stopband_attenuation,f/(0.5*fs),'low');
However, when I use the difference equation, I calculated from the transfer function, the samples go to +-inf. Here is the code where I create the noise input sound and filter it with difference eq.
xin = rand(1,fs/20); xin = xin - mean(xin); xin = [xin zeros(1,fs*2)]; x = xin; y = zeros(1, length(x)); %% Low pass b1 = 0.0027; b2 = -0.0134; b3 = 0.0362; b4 = -0.0651; b5 = 0.089; b6 = -0.0978; a1 = -7.953; a2 = 29.7485; a3 = -68.5714; a4 = 107.5494; a5 = -119.7162; a6 = 95.6848; a7 = -54.2043; a8 = 20.8340; a9 = -4.9109; a10 = 0.5401; for n = 11:length(y) y(n) = b1*x(n) - b2*x(n-1) + b3*x(n-2) - b4*x(n-3) + b5*x(n-4) - ... b6*x(n-5) + b5*x(n-6) - b4*x(n-7) + b3*x(n-8)- b2*x(n-9) + ... b1*x(n-10) - ... a1*y(n-1) - a2*y(n-2) - a3*y(n-3) - a4*y(n-4) - a5*y(n-5) - ... a6*y(n-6) - a7*y(n-7) - a8*y(n-8) - a9*y(n-9) - a10*y(n-10); end
The filter function does what I want, but I need to be able to filter the sound sample-by-sample.
y = filter(B,A,x);
How can I obtain the right difference equation of my filter?