MATLAB 带通滤波器 GUI 回调函数
function bandpass_pushbutton10_Callback(~, eventdata, handles) % hObject handle to bandpass_pushbutton10 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
global x; global Fs; global tl; global x2;
x1=x;
% fp = [2000,3000];
% fs = [1800,3300];
% Wp = 2fp/Fs;
% Ws = 2fs/Fs;
% if(Wp >= 1)
% Wp = 0.99;
% end
% if(Ws >= 1)
% Ws = 0.99;
% end
fp = get(handles.edit3,'string');
fp = str2double(fp)2;
fs = get(handles.edit4,'string');
fs = str2double(fs)2;
if get(handles.radiobutton1,'value')
[n, Wn]=buttord(Wp,Ws, 2, 15);
[b, a]=butter(n, Wn,'bandpass');
axes(handles.axes3);
[h,w]=freqz(b,a);
plot(w/piFs/2,abs(h));
x1=filter(b,a,x1);
elseif get(handles.radiobutton4,'value')
b2=fir1(30,[fp/Fs fs/Fs],boxcar(31));
axes(handles.axes3);
[h,w]=freqz(b2, 1,512);
plot(w/piFs/2,20log(abs(h)));
x1=fftfilt(b2,x1);
elseif get(handles.radiobutton5,'value')
b2=fir1(30,[fp/Fs fs/Fs], triang(31));
axes(handles.axes3);
[h,w]=freqz(b2, 1,512);
plot(w/piFs/2,20log(abs(h)));
x1=fftfilt(b2,x1);
elseif get(handles.radiobutton6,'value')
b2=fir1(30,[fp/Fs fs/Fs],hamming(31));
axes(handles.axes3);
[h,w]=freqz(b2, 1,512);
plot(w/piFs/2,20log(abs(h)));
x1=fftfilt(b2,x1);
elseif get(handles.radiobutton7,'value')
b2=fir1(30,[fp/Fs fs/Fs],hanning(31));
axes(handles.axes3);
[h,w]=freqz(b2, 1,512);
plot(w/piFs/2,20log(abs(h)));
x1=fftfilt(b2,x1);
elseif get(handles.radiobutton8,'value')
b2=fir1(30,[fp/Fs fs/Fs],blackman(31));
axes(handles.axes3);
[h,w]=freqz(b2, 1,512);
plot(w/piFs/2,20log(abs(h)));
x1=fftfilt(b2,x1);
elseif get(handles.radiobutton9,'value')
b2=fir1(30,[fp/Fs fs/Fs],kaiser(31));
axes(handles.axes3);
[h,w]=freqz(b2, 1,512);
plot(w/piFs/2,20log(abs(h)));
x1=fftfilt(b2,x1);
end;
axes(handles.axes5);
plot(tl,x1);
title('高通滤波器作用下的波形图');
xlabel('鏃堕棿/s');
N=length(x1);
df=Fs/N;
w=[0:df:df(N-1)] - Fs/2; %棰戠巼灏哄害
X=fft(x1);
X=fftshift(X);
axes(handles.axes6);
plot(w,abs(X)/max(abs(X)));
axis([-10000,10000,0,1]);
title('婊ら櫎鍣0鍚庤闊抽璋?');
xlabel('棰戠巼/Hz');
grid on;
x2=x1;
% 代码逐句详细解释内容:该函数为MATLAB GUI界面中“带通滤波”按钮的回调函数,点击该按钮后会执行该函数。
% 第1-4行为注释,说明该函数的输入参数以及对应的含义。
% 第6-9行定义了4个全局变量x、Fs、tl、x2,用于存储输入的信号、采样率、时间轴和滤波后的信号。
% 第11-13行将输入信号x赋值给x1。
% 第15-25行根据所选择的滤波器类型和滤波参数,设计滤波器并进行滤波操作,滤波后的结果存储在x1中。
% 第27-33行将滤波器的频率响应绘制在“滤波器特性”子图中。
% 第35-41行将滤波后的信号x1绘制在“高通滤波器作用下的波形图”子图中。
% 第43-52行将滤波后的信号进行傅里叶变换,并将其频谱绘制在“婊ら櫎鍣0鍚庤闊抽璋?”子图中。
% 第54行将滤波后的信号x1赋值给x2,以便后续使用。
% 该函数的作用为实现带通滤波器的设计和滤波操作,并在GUI界面中显示滤波器特性、滤波后的波形图和频谱图。
原文地址: https://www.cveoy.top/t/topic/nKf9 著作权归作者所有。请勿转载和采集!