用matlab设计一个采用汉明窗的Fir低通滤波器
时间: 2024-06-11 10:08:07 浏览: 240
% 设计一个采用汉明窗的FIR低通滤波器
% 采样频率为8kHz,截止频率为1kHz,滤波器阶数为51
fs = 8000; % 采样频率
fc = 1000; % 截止频率
N = 51; % 滤波器阶数
% 生成理想低通滤波器的频率响应
h_ideal = 2*fc/fs * sinc(2*fc/fs*(-(N-1)/2:(N-1)/2));
% 生成汉明窗
w = hamming(N)';
% 将理想低通滤波器的频率响应与汉明窗相乘
h = h_ideal .* w;
% 绘制频率响应曲线
f = linspace(0, fs/2, N);
H = fft(h);
H = H(1:N/2+1);
plot(f, abs(H));
grid on;
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('Frequency Response of Hamming Windowed FIR Lowpass Filter');
% 将滤波器系数保存为MATLAB文件
save('hamming_fir_lowpass_filter.mat', 'h');
相关问题
用matlab设计一个采用汉明窗的数字FIR低通滤波器
步骤如下:
1. 确定滤波器的参数,包括滤波器长度N、截止频率fc、采样率fs等。
2. 计算出滤波器的理想频率响应,即低通滤波器的理想幅度响应Hd和相位响应。
3. 在matlab中使用fir1函数设计FIR滤波器,输入参数包括滤波器长度N、截止频率fc和窗函数类型(这里选择汉明窗)。
4. 绘制滤波器的幅度响应和相位响应曲线,以及滤波器的单位脉冲响应h(n)。
以下是matlab代码示例:
% 设置滤波器参数
N = 51; % 滤波器长度
fc = 0.2; % 截止频率
fs = 1; % 采样率
% 计算理想频率响应
M = (N-1)/2;
n = 0:N-1;
hd = 2*fc*sinc(2*fc*(n-M));
h = hd.*hamming(N)';
Hd = fft(hd);
H = fft(h);
% 设计FIR滤波器
h_fir = fir1(N-1, fc, 'low', hamming(N));
% 绘制滤波器响应曲线
w = linspace(0, pi, 1000);
Hd_w = 2*fc*sinc(2*fc*(w-pi/2));
H_fir = freqz(h_fir, 1, w);
figure;
subplot(2,1,1);
plot(w/pi, abs(Hd_w), 'r--', w/pi, abs(H), 'b-', w/pi, abs(H_fir), 'k-');
xlabel('Normalized frequency (\times\pi rad/sample)');
ylabel('Magnitude');
legend('Ideal', 'Hamming', 'FIR');
title('Frequency Response');
subplot(2,1,2);
plot(w/pi, unwrap(angle(Hd_w)), 'r--', w/pi, unwrap(angle(H)), 'b-', w/pi, unwrap(angle(H_fir)), 'k-');
xlabel('Normalized frequency (\times\pi rad/sample)');
ylabel('Phase (rad)');
legend('Ideal', 'Hamming', 'FIR');
title('Phase Response');
% 绘制滤波器单位脉冲响应曲线
figure;
stem(0:N-1, h);
hold on;
stem(0:N-1, h_fir, 'r--');
xlabel('n');
ylabel('Amplitude');
legend('Ideal', 'FIR');
title('Impulse Response');
Matlab采用汉明窗测试低通滤波器的代码
下面是使用汉明窗测试低通滤波器的Matlab代码:
```matlab
% 采样频率
fs = 1000;
% 信号频率
f = 50;
% 信号长度
N = 1024;
% 生成信号
t = (0:N-1)/fs;
x = sin(2*pi*f*t);
% 低通滤波器参数
fc = 100;
Wn = fc/(fs/2);
% 汉明窗
win = hamming(N);
% FIR滤波器系数
h = fir1(N-1, Wn, 'low', win);
% 频率响应
[H, f] = freqz(h, 1, N/2, fs);
% 绘制频率响应曲线
figure;
plot(f, 20*log10(abs(H)));
title('Lowpass Filter Magnitude Response');
xlabel('Frequency (Hz)');
ylabel('Magnitude (dB)');
% 滤波后的信号
y = filter(h, 1, x);
% 绘制信号和滤波后的信号
figure;
plot(t, x);
hold on;
plot(t, y);
title('Filtered Signal');
xlabel('Time (s)');
ylabel('Amplitude');
legend('Original Signal', 'Filtered Signal');
```
这段代码首先生成了一个频率为50Hz的正弦信号,然后使用汉明窗设计了一个低通滤波器,并计算了其频率响应曲线。最后,将信号通过该滤波器进行滤波,并绘制了信号和滤波后的信号的图像。
阅读全文