matlab实现巴特沃斯高通和低通滤波
时间: 2023-07-13 14:07:54 浏览: 114
Matlab中可以使用 `butter` 函数来实现巴特沃斯高通和低通滤波。
下面是一个示例代码,其中使用 `butter` 函数设计一个4阶的巴特沃斯低通滤波器,截止频率为100 Hz,然后将其应用于一个具有高频噪声的信号。同样,我们还使用 `butter` 函数设计一个4阶的巴特沃斯高通滤波器,截止频率为10 Hz,并将其应用于一个具有低频噪声的信号。
```matlab
% 生成一个随机信号
fs = 1000; % 采样率为1000 Hz
t = 0:1/fs:1-1/fs; % 时间向量
x = sin(2*pi*50*t) + sin(2*pi*120*t); % 生成一个有高频噪声的信号
x = x + 2.5*randn(size(t)); % 添加高斯白噪声
% 巴特沃斯低通滤波器
fc = 100; % 截止频率为100 Hz
Wn = fc/(fs/2); % 归一化截止频率
[b,a] = butter(4,Wn,'low'); % 4阶巴特沃斯低通滤波器
y = filtfilt(b,a,x); % 应用滤波器
% 绘制原始信号和滤波后的信号
figure;
subplot(2,1,1);
plot(t,x);
title('原始信号');
xlabel('时间 (秒)');
ylabel('幅度');
subplot(2,1,2);
plot(t,y);
title('滤波后的信号');
xlabel('时间 (秒)');
ylabel('幅度');
% 巴特沃斯高通滤波器
fc = 10; % 截止频率为10 Hz
Wn = fc/(fs/2); % 归一化截止频率
[b,a] = butter(4,Wn,'high'); % 4阶巴特沃斯高通滤波器
z = filtfilt(b,a,x); % 应用滤波器
% 绘制原始信号和滤波后的信号
figure;
subplot(2,1,1);
plot(t,x);
title('原始信号');
xlabel('时间 (秒)');
ylabel('幅度');
subplot(2,1,2);
plot(t,z);
title('滤波后的信号');
xlabel('时间 (秒)');
ylabel('幅度');
```
注意,这里使用 `filtfilt` 函数来获得零相位滤波器的输出,以避免滤波后的相位变化。
阅读全文