Different frequency responses using [z,p,k] method and [b,a] for 2nd order elliptical filter
이전 댓글 표시
Hi, I am designing an elliptical filter and using 2nd order. My code is below, however, both of them display different frequency responses. Why is that so? Am I doing something wrong here? However, when I am plotting for 4th order, both responses are same.
%Filter design
[b,a]=ellip(2,20,25,200/210,'high');
% [b,a]=ellip(2,20,25,[2000 9000]/(fs/2),'bandpass');
fvtool(b,a)
[z,p,k] = ellip(2,20,25,200/210,'high');
sos = zp2sos(z,p,k);
fvtool(sos)
채택된 답변
추가 답변 (1개)
If fvtool is like freqz, you need to make sure that the sos input has more than one row. Otherwise, the input might not be interpreted as an sos input. Here's an example with freqz.
[b,a]=ellip(2,20,25,200/210,'high');
[z,p,k] = ellip(2,20,25,200/210,'high');
[sos,g] = zp2sos(z,p,k);
freqz(b,a)
freqz(sos)
freqz([sos;[g 0 0 1 0 0]]) % add another section that is gain g for the expected response
댓글 수: 3
Giggs B.
2021년 7월 19일
Paul
2021년 7월 20일
Each second order section is of the form [b a], so an sos array for n sections is n x 6 is of the form:
[b1 a1;
[b2 a2;
.
.
.
bn an]
So that second section represents
b2 = [g 0 0]
a2 = [1 0 0]
which is just a gain of g. As I showed (and stated in doc freqz) if you want to use sos as input to freqz, it has to have at least two sections. So I added a second section that is effectively a unity gain of g to a) make freqz realize the input is sos, and b) to make the gain of the product of those sos's match the gain of the filter.
Giggs B.
2021년 7월 20일
카테고리
도움말 센터 및 File Exchange에서 Digital Filter Design에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


