필터 지우기
필터 지우기

Multiple filters without built in functions

조회 수: 1 (최근 30일)
Lee
Lee 2016년 10월 2일
편집: David Goodmanson 2016년 10월 4일
Hey everyone!
I cannot figure out why I'm not able to get the amplitude reponse I expect from my code. In this code I'm running one script for project that should build a plot for a Lowpass Filter, Two pole Lowpass Filter, and a Zero pole. This is for a Physics class so I don't necessarily need to know anything about using transfer functions. We're just using Labview Elvis Board during lab, and having to plot our Measured data vs. Theory data in Matlab.
The Issue You'll notice if you plot this that the Y axis should be values from 0 to -60 (about) for figure 1, and from 0 to -180 (about) for the phase. The fisrt two plots are generic Lowpass filters using theory data for my resistor and capacitor. I'm certain If these plot correctly, the rest of my plots will be okay.
Here is the code. I'm pretty certain i'm not converting something correctly but i've been looking at this for a few hours and i've come for help! It's pretty standard code. I've also included part of our experimental data so you can see the difference
R1 = 1070.2; %kOhms
R2 = 1077.4; %kOhms
RAlt = 682.4; %Ohms
C1 = .0000000003308; %uF
C2 = .0000000003322 ;%uF
f = 1:10000;
fc1pole_low = 1/(R1*C1);
fc2pole_low = 1/sqrt(R1*R2*C1*C2);
f_zero = 1/(R1*C1);
f_pole = 1/((C1*R1*R2)/(R1+R2));
fczero = 1/(R1*C1);
fcpole = 1/((C1*R1*R2)/(R1+R2));
fczero_new = 2*fczero; %6db
C1G = zeros(1,max(f));
C2G = zeros(1,max(f));
C2GEq = zeros(1,max(f));
C2GUnc = zeros(1,max(f));
C3G = zeros(1,max(f));
for z = 1:length(f)
C1G(z) = 1/(1+1j.*z.*R1.*C1);
C2G(z) = (1/(1+1j*z*R1*C1))*(1/(1+1j*z*R2*C2));
C2GEq(z) = 1/(1-(z*R1*C1)^2+1j*z*3*R2*C2);
C2GUnc(z) = (1/(1+1j*z*R1*C1))^2;
C3G(z) = (R2/(R1+R2))*((1+1j*z*R1*C1)/(1+1j*z*C1*(R1*R2/(R1+R2))));
end
Amplitude =@(G) 20.*log10(abs(G));
Phase =@(G) atan(imag(G)./real(G));
C1amp = Amplitude(C1G);
C1phase = Phase(C1G);
figure
plot(f,C1amp)
figure
plot(f,C1phase)
  댓글 수: 1
Steven Lord
Steven Lord 2016년 10월 3일
The atan function returns angles in radians, not degrees. Consider atand or atan2d instead.

댓글을 달려면 로그인하십시오.

답변 (1개)

David Goodmanson
David Goodmanson 2016년 10월 3일
편집: David Goodmanson 2016년 10월 4일
One possible reason is that R is about 1 kohm and C is about 300pF. This gives you an RC time constant of about .3 usec and a break point 1/(2piRC) at about 500 KHz. The frequencies of interest are only a few kHz, so the filter lets everything through and doesn't do anything. It appears that either the frequencies of interest have to be larger or one of R and C is too small.

카테고리

Help CenterFile Exchange에서 Circuits and Systems에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by