function high_pushbutton9_Callback(hObject, eventdata, handles) % hObject handle to high_pushbutton9 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

global x; % 全局变量x:输入信号 global Fs; % 全局变量Fs:采样率 global tl; % 全局变量tl:时间轴 global x2; % 全局变量x2:处理后的信号

x1=x; % 将输入信号赋值给x1 % fp = 3000; % fs = fp-300; % 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; % 将截止频率转换为数字类型并乘以2 if get(handles.radiobutton1, 'value') % 如果选择了 Butterworth 滤波器 [n, Wn]=buttord(Wp,Ws, 2, 15); % 计算滤波器阶数和截止频率 [b, a]=butter(n, Wn, 'high'); % 计算 Butterworth 滤波器系数 axes(handles.axes3); % 将图像显示在 axes3 上 [h,w]=freqz(b,a); % 计算滤波器的频率响应 plot(w/piFs/2,abs(h)); % 绘制滤波器的幅频响应曲线 x1=filter(b,a,x1); % 通过 Butterworth 滤波器滤波信号 elseif get(handles.radiobutton4, 'value') % 如果选择了 FIR 滤波器,使用矩形窗口 b2=fir1(30, fp/Fs, 'high', boxcar(31)); % 计算 FIR 滤波器系数 axes(handles.axes3); % 将图像显示在 axes3 上 [h,w]=freqz(b2, 1, 512); % 计算滤波器的频率响应 plot(w/piFs/2, 20log(abs(h))); % 绘制滤波器的幅频响应曲线 x1=fftfilt(b2,x1); % 通过 FIR 滤波器滤波信号 elseif get(handles.radiobutton5, 'value') % 如果选择了 FIR 滤波器,使用三角窗口 b2=fir1(30, fp/Fs, 'high', triang(31)); % 计算 FIR 滤波器系数 axes(handles.axes3); % 将图像显示在 axes3 上 [h,w]=freqz(b2, 1, 512); % 计算滤波器的频率响应 plot(w/piFs/2, 20log(abs(h))); % 绘制滤波器的幅频响应曲线 x1=fftfilt(b2,x1); % 通过 FIR 滤波器滤波信号 elseif get(handles.radiobutton6, 'value') % 如果选择了 FIR 滤波器,使用汉明窗口 b2=fir1(30, fp/Fs, 'high', hamming(31)); % 计算 FIR 滤波器系数 axes(handles.axes3); % 将图像显示在 axes3 上 [h,w]=freqz(b2, 1, 512); % 计算滤波器的频率响应 plot(w/piFs/2, 20log(abs(h))); % 绘制滤波器的幅频响应曲线 x1=fftfilt(b2,x1); % 通过 FIR 滤波器滤波信号 elseif get(handles.radiobutton7, 'value') % 如果选择了 FIR 滤波器,使用汉宁窗口 b2=fir1(30, fp/Fs, 'high', hanning(31)); % 计算 FIR 滤波器系数 axes(handles.axes3); % 将图像显示在 axes3 上 [h,w]=freqz(b2, 1, 512); % 计算滤波器的频率响应 plot(w/piFs/2, 20log(abs(h))); % 绘制滤波器的幅频响应曲线 x1=fftfilt(b2,x1); % 通过 FIR 滤波器滤波信号 elseif get(handles.radiobutton8, 'value') % 如果选择了 FIR 滤波器,使用布莱克曼窗口 b2=fir1(30, fp/Fs, 'high', blackman(31)); % 计算 FIR 滤波器系数 axes(handles.axes3); % 将图像显示在 axes3 上 [h,w]=freqz(b2, 1, 512); % 计算滤波器的频率响应 plot(w/piFs/2, 20log(abs(h))); % 绘制滤波器的幅频响应曲线 x1=fftfilt(b2,x1); % 通过 FIR 滤波器滤波信号 elseif get(handles.radiobutton9, 'value') % 如果选择了 FIR 滤波器,使用凯泽窗口 b2=fir1(30, fp/Fs, 'high', kaiser(31)); % 计算 FIR 滤波器系数 axes(handles.axes3); % 将图像显示在 axes3 上 [h,w]=freqz(b2, 1, 512); % 计算滤波器的频率响应 plot(w/piFs/2, 20log(abs(h))); % 绘制滤波器的幅频响应曲线 x1=fftfilt(b2,x1); % 通过 FIR 滤波器滤波信号 end; axes(handles.axes5); % 将图像显示在 axes5 上 plot(tl,x1); % 绘制滤波后的信号波形 title('高通滤波器滤波后的信号波形'); % 设置图像标题 xlabel('时间/s'); % 设置x轴标签 N=length(x1); % 获取滤波后信号的长度 df=Fs/N; % 计算频率分辨率 w=[0:df:df*(N-1)] - Fs/2; % 计算频率轴 X=fft(x1); % 计算滤波后信号的傅里叶变换 X=fftshift(X); % 将频域信号移动到中心 axes(handles.axes6); % 将图像显示在 axes6 上 plot(w,abs(X)/max(abs(X))); % 绘制滤波后信号的频谱图 axis([-10000,10000,0,1]); % 设置坐标轴范围 title('高通滤波器滤波后的信号频谱图'); % 设置图像标题 xlabel('频率/Hz'); % 设置x轴标签 grid on; % 显示网格线 x2=x1; % 将滤波后的信号赋值给x2

MATLAB 高通滤波器:Butterworth、FIR 滤波器实现

原文地址: https://www.cveoy.top/t/topic/nKfU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录