function butterworth_m(handles,filter_type)
fs=1024;
y=handles.y;
fp1=str2double(get(handles.Fp1,'string'));
fs1=str2double(get(handles.Fs1,'string'));
fp2=str2double(get(handles.Fp2,'string'));
fs2=str2double(get(handles.Fs2,'string'));
Rs=str2double(get(handles.Rs1,'string'));
Rp=str2double(get(handles.Rp1,'string'));
if Rs==0
Rs=20;
end
if Rp==0
Rp=1;
end
wp1=2*fp1/fs;
ws1=2*fs1/fs;
wp2=2*fp2/fs;
ws2=2*fs2/fs;
switch filter_type
case 1 % lowpass
[N wn]=buttord(wp1,ws1,Rp,Rs);
[b a]=butter(N,wn);
case 2 % highpass
[N wn]=buttord(wp1,ws1,Rp,Rs);
[b a]=butter(N,wn,'high');
case 3 % bandpass
[N wn]=buttord([wp1 wp2],[ws1 ws2],Rp,Rs);
[b a]=butter(N,wn);
case 4 % bandstop
[N wn]=buttord([wp1 wp2],[ws1 ws2],Rp,Rs);
[b a]=butter(N,wn,'stop');
end
[H w]=freqz(b,a,1024,'whole');
H=H(1:512)';
w=w(1:512)';
mag=abs(H);
db=20*log10(mag+eps)/max(mag);
plot(handles.axes2,w/pi,db);
xlabel(handles.axes2,'Frequency(*π rad)');
ylabel(handles.axes2,'Gain(dB)');
y1=filter(b,a,y);
t=(1:fs)/fs;
plot(handles.axes4,t(round((N-1)/2)+150:round((N-1)/2)+200),y1(round((N-1)/2)+150:round((N-1)/2)+200));
xlabel(handles.axes4,'Time');
ylabel(handles.axes4,'Amplitude');
[fftdata f]=fft_(y1,fs);
plot(handles.axes3,f,fftdata,'r');
xlabel(handles.axes3,'Frequency');
ylabel(handles.axes3,'Amplitude');
set(handles.n,'string',num2str(N));
set(handles.Rp2,'string',num2str(Rp));
set(handles.Rs2,'string',num2str(Rs));
频率归一化是什么意思呢
追答wp1=2*fp1/fs;
就是这句,fs是采样频率,fs/2就是Nyquist频率,见采样定理。
以fs/2为1,其他的频率按它的百分比表示,这样就将很大范围的频率化成[0,1]之间了,有利于比较各个频率的分布情况。
谢谢您的解答
我只知道为了使波形不发生混叠采样频率应该至少为信号频率的两倍
但这里fs/2是什么呢,物理意义是什么呢,不是很清楚啊
db衰减是表示什么呢
就是你说的这个意思啊,既然采样频率fs应大于信号频率f的两倍,那么f<fs/2咯
db就是分贝,公式就是20*lg(|H(e^j0)|/|H(e^jw)|)
我们常说的通带允许的最大衰减、阻带应达到的最小衰减,都是这个定义,以分贝(dB)为单位。