Filter cutoff frequency correction
조회 수: 7 (최근 30일)
이전 댓글 표시
Hello, I have this code to make a filter that cuts at 250 Hz and 0.7 amplitude, however, at 250 Hz I have 0.9441. Does anyone know how to correct this?
[b,a]=cheby1(3,0.5,2*pi*250,'s');
H=freqs(b,a,2*pi*[0:500]);
plot(0:500, abs(H))
댓글 수: 0
채택된 답변
Chunru
2021년 8월 27일
편집: Chunru
2021년 8월 28일
% For digital filter
fs = 1000;
frp = 250; % freq at Rp
[b, a] = cheby1(3, 0.5, frp/(fs/2));
[h, f] = freqz(b, a, 2048, fs);
plot(f, abs(h));
hold on; grid on
% Get the 3db frequency
f3db = interp1(abs(h), f, sqrt(0.5));
% Iterative Correction
while abs(f3db-250)>0.1
frp = frp * (250/f3db);
[b, a] = cheby1(3, 0.5, frp/(fs/2));
[h, f] = freqz(b, a, 2048, fs);
f3db = interp1(abs(h), f, sqrt(0.5));
end
plot(f, abs(h));
plot(f3db, sqrt(0.5), 'o');
legend('Original', 'Corrected', '3dB');
% for analog filter
figure
fh = 250;
epsilon = sqrt(10.^(0.5/10)-1);
f0 = fh/cosh(1/3*acosh(1/epsilon));
[b,a]=cheby1(3,0.5,2*pi*f0,'s');
H=freqs(b,a,2*pi*[0:500]);
plot(0:500, abs(H));
hold on
xline(250)
grid on
댓글 수: 4
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Analog Filters에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!