fpga—fir滤波器(1)matlab生成fir滤波器系数及仿真

1.什么是滤波器

在通信领域中,信号传输往往伴随各种干扰,如电磁噪声,信道噪声等,为了保证信号传输中相对干净(可靠性),因此引入滤波的定义,滤出无用信号,保留有用信号;

在物理上,滤波器是由电容电感电阻组成的滤波电路。滤波器可以对电源线中特定频率的频点或该频点以外的频率进行有效滤除,得到一个特定频率的电源信号,或消除一个特定频率后的电源信号。

而在数字信号中,滤波则是通过剔除不合理的信号,尽力保留有用信号的相关算法,完成滤波;

2.Fir滤波器

FIR滤波器在系数满足一定条件的情况下,它的相频特性是线性的,可以有效的保留信号的相位信息,因此线性相位的 FIR 滤波器在实际工程中有着较为广泛的应用。FIR网格结构的特点是没有反馈支路,也就是说没有环路

简单来说,fir滤波实质上是一组特定的系数和信号完成卷积的过程,

时域卷积等于频域相乘

用数学公式来便是就是:

y[n] =a0x[n]+a1x[n-1]+a2x[n-2]+...

上式中的x代表待滤波数据,y代表输出数据;系数a0、a1、a2...就是滤波器的冲激响应系数。所以在FIR滤波器中,每一时刻的输出取决于之前的有限个输入,因此就是“有限冲激响应”。

3.Fadtool滤波器设计工具

MATLAB集成了一套功能非常强大的滤波器设计和分析工具FDAtool(新版为filterDesigner),它可以很方便的设计出一个滤波器,并且可以进行性能的分析。

在matlab中,命令行窗口输入:fdatool(新版为filterdesigner),弹出fir滤波器设计窗口:

  • 1 当前滤波器信息;
  • 2 设计滤波器图形显示,可以通过上方工具栏切换幅度相应,相位相应;
  • 3 响应类型:选定滤波器类型(低通、高通、带通、带阻),选择要设计IIR(无限冲激响应)滤波器还是FIR(有限冲击响应)滤波器,并且选择使用哪种方法设计对应的滤波器;
  • 4 滤波器阶数一般阶数越多滤波效果越好,但是系数对应的也越多,在FPGA硬件实现的时候会占用更多的资源,设计时要综合考虑;
  • 5 频率设定:设置采样频率及低通的频率;

参数配置完成后,点击设计滤波器,之后生成一个matlab的滤波器程序;

function Hd = f2
%F2 返回离散时间滤波器对象。

% MATLAB Code
% Generated by MATLAB(R) 9.11 and DSP System Toolbox 9.13.
% Generated on: 02-Jul-2023 10:17:10

% FIR Window Lowpass filter designed using the FIR1 function.

% All frequency values are in MHz.
Fs = 160  % Sampling Frequency

N    = 128;      % Order
Fc   = 10;       % Cutoff Frequency
flag = 'noscale';  % Sampling Flag

% Create the window vector for the design algorithm.
win = hamming(N+1);

% Calculate the coefficients using the FIR1 function.
b  = fir1(N, Fc/(Fs/2), 'low', win, flag);
Hd = dfilt.dffir(b);
% Set the arithmetic property.
set(Hd, 'Arithmetic', 'fixed', ...
    'CoeffWordLength', 16, ...
    'CoeffAutoScale', true, ...
    'Signed',         true, ...
    'InputWordLength', 16, ...
    'inputFracLength', 15, ...
    'FilterInternals',  'FullPrecision');
denormalize(Hd);


% [EOF]

4.在matlab中进行仿真

up=1;
 txdata=upsample(txdata,up);                                    %设置数据采样率
Hd =  f1;
int2_int16=[round(Hd.Numerator./max(abs(Hd.Numerator)).*13334)];%读取生成滤波器代码,量化适用于fpga的一组系数
        
txdata=conv(txdata,int2_int16);                                 %将数据和生成系数进行卷积
[ampy,freqx]=pwech(txdata,samplerate*up,rx_lo_freq);           
figure;
plot(freqx,20*log10(ampy));title('pwelch dBc');                 %绘制频谱

(生成图片大致如下,)

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基于MATLABFPGAFIR滤波器设计与仿真是一种常用的数字信号处理方法。首先,我们可以使用MATLAB来设计FIR滤波器系数。通过指定滤波器的截止频率、滤波器类型和滤波器阶数等参数,MATLAB可以生成滤波器系数。 接下来,我们可以使用MATLAB来进行FIR滤波器仿真。通过输入信号和滤波器系数,我们可以得到滤波后的输出信号。MATLAB提供了丰富的信号处理工具箱,可以方便地进行滤波器仿真和性能评估。 然后,我们可以将设计好的FIR滤波器用HDL Coder工具箱进行FPGA代码的生成。HDL Coder可以自动将MATLAB代码转换为适用于FPGA的硬件描述语言(如VHDL或Verilog)代码。通过使用FPGA开发工具,我们可以将生成的硬件描述语言代码下载到FPGA芯片中进行硬件实现。 最后,利用FPGA进行FIR滤波器的硬件实现。将输入信号传入FPGA芯片,并通过外部接口连接FPGA芯片与其他系统。FPGA会根据设计好的硬件描述语言代码进行滤波处理,并将滤波后的信号传递给输出接口。 综上所述,基于MATLABFPGAFIR滤波器设计与仿真可以实现高效的数字信号处理。MATLAB提供了强大的信号处理工具,可以方便地进行滤波器设计和仿真。而使用FPGA进行硬件实现,则可以获得更高的实时性能和处理能力。这种方法在许多领域,如通信、音频处理和图像处理等,都得到广泛应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值