1 滤波器的特征参数介绍
图1 低通滤波器特征参数
如图1所示,低通滤波器的通带截止频率为ωp ,通带容限为α1,阻带截止频率为ωs,阻带容限为α2。通带定义为|ω|≤ωp ,过渡带定义为ωp<|ω|<ωs,阻带定义为ωs≤|ω|<π。
2 设计目标
要求:使用fir滤波器设计一个滤波器系数为15阶的低通滤波器,通带截止频率为1KHZ,采样频率为44.1khz。
3 matlab的设计验证
close all
clear all
clc
%设计一个低通滤波器 采样频率为44.1khz, 截止频率为1khz
FS = 44100; %HZ
fc = 1000;
N = 15;
Q = 16;
%以采样频率的一半,对频率进行归一化处理
wn_lpf=fc*2/FS;
%采用fir1函数设计FIR滤波器
b_lpf=fir1(N-1,wn_lpf);
%滤波系数进行量化
b_16=round(b_lpf/max(abs(b_lpf))*(2^(Q-1)-1));
%求滤波器的幅频响应
m_lpf=20*log(abs(fft(b_lpf)))/log(10);
b16_lpf=20*log(abs(fft(b_16)))/log(10);
%设置幅频响应的横从标单位为Hz
x_f=[0:(FS/length(m_lpf)):FS/2];
%绘制单位脉冲响应
subplot(221);stem(b_lpf);xlabel('n');ylabel('h(n)');
title('低通滤波器的单位脉冲响应','fontsize',8);
subplot(222);stem(b_16);xlabel('n');ylabel('h(n)');
title('低通滤波器的单位脉冲响应','fontsize',8);
%绘制幅频响应曲线
subplot(223);plot(x_f,m_lpf(1:length(x_f)));xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);
title('低通滤波器的幅频响应','fontsize',8);
subplot(224);plot(x_f,b16_lpf(1:length(x_f)));xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);
title('低通滤波器的幅频响应','fontsize',8);
图2 低通滤波器的matlab单位脉冲响应和幅频响应
4 FPGA信号发生器
为了验证低通滤波器,我们设计了测试验证的sin信号发生器。
wire [17:0] kfreq= (k<2048)?18’h00333:18’h00FFF;//1khz-5khz
产生1khz和5khz的sin波。
图3 信号发生器产生1khz和5khz的sin测试源
测试源的FFT分析:
图4 测试源数据的matlab分析
由图4的频域图可知,测试源产生了1khz和5khz的sin。
FPGA代码见下面第一个回答
5 FPGA的fir设计
Fir滤波器verilog代码设计采取全并行模式。
fpga实验modelsim仿真结果,从图5来看1khz几乎保持不变,而5khz波形幅度上被抑制了很多。
图5 modelsim fir实验结果时域波形
Matlab fft分析:
图6 matlab分析实验结果
由图2和图6对比,5khz经过滤波后的功率减小了20DB,图2与图5基本一致,fir的低通滤波器全并行设计成功。
数字滤波器是FPGA做通信的基本功,顶一个。