用Matlab写一段FIR滤波器实现的底层逻辑
时间: 2024-03-20 09:44:06 浏览: 53
matlab-基于MATLAB的数字滤波器FIR设计实现,带GUI界面-源码
好的,下面是一个简单的FIR滤波器实现的底层逻辑:
```matlab
% FIR滤波器设计
order = 50; % 滤波器阶数
fc = 0.2; % 截止频率
b = fir1(order, fc);
% 初始化滤波器状态
N = length(b);
x = zeros(1, N);
% 生成测试信号
fs = 1000; % 采样频率
t = 0:1/fs:1;
x_in = sin(2*pi*50*t) + sin(2*pi*150*t) + sin(2*pi*300*t);
% FIR滤波器实现
y = zeros(size(x_in));
for n = 1:length(x_in)
x = [x_in(n), x(1:end-1)]; % 将新采样点插入到输入缓存最前面
y(n) = b * x'; % 计算输出值
end
% 绘制频谱图
N = length(x_in);
xf = fft(x_in, N);
yf = fft(y, N);
f = (0:N-1)/N*fs;
figure;
plot(f, abs(xf), f, abs(yf));
xlabel('Frequency (Hz)');
ylabel('Magnitude');
legend('Input signal', 'Output signal');
```
这段代码中,我们首先使用fir1函数设计一个50阶的低通滤波器,截止频率为0.2。然后,我们初始化一个长度为N的输入缓存x,用于存储最近N个采样点。接着,我们生成一个包含三个正弦波的测试信号x_in,并使用for循环遍历每个采样点,将新采样点插入到输入缓存最前面,并计算当前输出值y(n)。最后,我们绘制了输入信号和输出信号的频谱图,方便观察滤波效果。
阅读全文