实现基于FPGA的低通滤波器FIR设计(含matlab和FPGA verilog源码)-Altera-Intel社区-FPGA CPLD-ChipDebug

实现基于FPGA的低通滤波器FIR设计(含matlab和FPGA verilog源码)

1 滤波器的特征参数介绍

图 1 低通滤波器特征参数.png

图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 单位脉冲响应和幅频响应.png

图2 低通滤波器的matlab单位脉冲响应和幅频响应

4 FPGA信号发生器

为了验证低通滤波器,我们设计了测试验证的sin信号发生器。
wire [17:0] kfreq= (k<2048)?18’h00333:18’h00FFF;//1khz-5khz
产生1khz和5khz的sin波。

图 3 信号发生器产生 1khz 和 5khz 的 sin 测试源.png
图3 信号发生器产生1khz和5khz的sin测试源

测试源的FFT分析:
图 4 测试源数据的 matlab 分析.png

图4 测试源数据的matlab分析

由图4的频域图可知,测试源产生了1khz和5khz的sin。

FPGA代码见下面第一个回答

请登录后发表评论

    • chipdebug的头像-ChipDebugchipdebug徽章-创作大使-ChipDebug等级-LV3-ChipDebug超级版主0