Why do I get different frequency response using state-space representation and transfer function

13 views (last 30 days)
po-wei huang
po-wei huang on 17 Jan 2018
Edited: Christoph F. on 17 Jan 2018
After using butter function to design a filter (as follow), I wanted to check the frequency response. However I suddenly find that the frequency response seems to be different using different representation. That doesn't make sense to me. Thanks a lot for answering me.
[Input, Fs]=audioread('input.wav');
Ws=[10 3800]/(Fs/2);
Wp=[30 3500]/(Fs/2);
[N, Wn]=buttord(Wp,Ws,0.1,30); %Design band pass filter.
[A,B,C,D]=butter(N,Wn);
sos=ss2sos(A,B,C,D);
fvtool(sos,'Fs',Fs); % Plot Freq Response using state space representation.
[b,a]=ss2tf(A,B,C,D);
fvt=fvtool(b,a,'Fs',Fs); % Plot Freq Response using Transfer Function.
Output=filter(b,a,Input);
audiowrite('output.wav',Output,Fs);

Answers (1)

Christoph F.
Christoph F. on 17 Jan 2018
Edited: Christoph F. on 17 Jan 2018
124th order recursive filters are iffy, numerically. At this point, the limited precision of even the double datatype can lead to erroneous behavior.
Generally: max(abs(a)) is on the order of 10^31 min(abs(a)) is on the order of 10^-9

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!