用matlab设计一个信号通过巴特沃斯滤波器的代码
时间: 2024-06-04 21:11:45 浏览: 150
以下是一个用Matlab设计信号通过巴特沃斯滤波器的代码:
1. 定义一个频率响应函数:
function [H] = butterworth_filter(N,w_c,type)
% N: 滤波器阶数
% w_c: 截止频率
% type: 滤波器类型('lowpass'或'highpass')
% H: 频率响应函数
if strcmp(type,'lowpass')
H = 1 ./ (1 + (j*w./w_c).^N);
elseif strcmp(type,'highpass')
H = (j*w./w_c).^N ./ (1 + (j*w./w_c).^N);
else
error('Invalid filter type.');
end
2. 设计巴特沃斯滤波器:
N = 4; % 滤波器阶数
w_c = 1000; % 截止频率
type = 'lowpass'; % 滤波器类型
fs = 8000; % 采样率
% 计算频率响应函数
w = 2*pi*linspace(0,fs/2,fs/2+1);
H = butterworth_filter(N,w_c,type);
% 绘制频率响应函数
figure;
plot(w,20*log10(abs(H)));
grid on;
xlabel('Frequency (Hz)');
ylabel('Magnitude (dB)');
title('Butterworth Filter Frequency Response');
3. 生成一个信号:
t = 0:1/fs:1; % 时间向量
f = 100; % 信号频率
x = sin(2*pi*f*t); % 生成正弦信号
% 绘制信号
figure;
plot(t,x);
grid on;
xlabel('Time (s)');
ylabel('Amplitude');
title('Original Signal');
4. 将信号通过滤波器:
% 将信号进行FFT
X = fft(x);
% 将频率响应函数进行FFT
H_fft = fftshift(ifft([H zeros(1,length(X)-length(H))]));
% 将信号与频率响应函数卷积
Y = X .* H_fft;
% 将卷积结果进行IFFT
y = ifft(Y);
% 绘制滤波后的信号
figure;
plot(t,real(y));
grid on;
xlabel('Time (s)');
ylabel('Amplitude');
title('Filtered Signal');
阅读全文