FIR内插滤波器的FPGA实现(一)-matlab实现

这篇具有很好参考价值的文章主要介绍了FIR内插滤波器的FPGA实现(一)-matlab实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、FIR内插滤波器

FIR内插滤波器是一种基本的插值方法,主要有两个步骤:
1)在输入的每一个初始采样中间插入L个零点;
2)插零后的数据经过低通滤波器。
FIR内插滤波器的FPGA实现(一)-matlab实现

二、matlab代码实现

1)插值前的信号:

T=0.5; %信号持续时间
Fs=2000; %采样频率
N=T*Fs; %采样点数
x=(0:N-1)/Fs;
f=200; %信号频率
y=sin(2*pi*f*x);
f=(0:T*Fs-1)/T-Fs/2;
fft_y=2*abs(fftshift(fft(y)))/N;
figure(1)
subplot(211)
plot(x,y,x,y,'c*');
xlim([0,0.05]);
subplot(212)
plot(f,fft_y);

运行结果如图(时域、频域):
FIR内插滤波器的FPGA实现(一)-matlab实现
我们的目标是把采样频率提升五十倍。

2)插零点:

%% 插0点
L=49;%插值的点数
y_1=[];
for i=1:length(y)
   y_1=[y_1,y(i),zeros(1,L)];
end

fft_y1=2*abs(fftshift(fft(y_1)))/N/(L+1);
f_1=(0:T*Fs*(L+1)-1)/T-Fs*(L+1)/2;
figure(2)
plot(f_1,fft_y1);

得到的频域图:
FIR内插滤波器的FPGA实现(一)-matlab实现
可以看出内插零点在频域会实现频谱扩展,因此也可以解释为什么低通滤波器可以还原出信号。

3)滤波

使用matlab设计滤波器,在命令框输入filterdesigner即可。
FIR内插滤波器的FPGA实现(一)-matlab实现
采样频率为100khz,通带、截止频率为1khz和2khz,滤波器形式为直接型,设计出的滤波器为254阶次的。

y_2 = (L+1)*filter(fir,1,y_1);
x_1=(0:N*(L+1)-1)/Fs/(L+1);
fft_y3=2*abs(fftshift(fft(y_2)))/N/(L+1);
figure(3)
subplot(211)
plot(x_1,y_2);
xlim([0,0.05]);
subplot(212)
plot(f_1,fft_y3);

FIR内插滤波器的FPGA实现(一)-matlab实现
完成了低通滤波,信号的形状不变,但是采样频率增加了50倍,实现了升采样。
原信号(y),低通滤波后的信号(y_2)如图,采样频率提升50倍:
FIR内插滤波器的FPGA实现(一)-matlab实现

三、基于硬件实现的考虑

1)从FIR滤波器公式原理分析

FIR滤波器的过程实际上是乘系数再相加的过程,M为滤波器的阶数,b(k)为滤波器系数,如图:
y ( n ) = ∑ k = 0 M b ( k ) x ( n − k ) y(n) =\sum_{k=0}^{M} b(k)x(n-k) y(n)=k=0Mb(k)x(nk)
基于以上公式,我们可以写FIR滤波器的代码:

%% 卷积计算
for ii=1:254
    y_4(ii)=(L+1)*sum(fir(1:ii).*fliplr(y_1(1:ii)));
end
for ii=255:(L+1)*N
    y_4(ii)=(L+1)*(sum(fir.*fliplr(y_1(ii-253:ii))));
end
fft_y4=2*abs(fftshift(fft(y_4)))/N/(L+1);
figure(4)
subplot(211)
plot(x_1,y_4);
xlim([0,0.05]);
subplot(212)
plot(f_1,fft_y4);

FIR内插滤波器的FPGA实现(一)-matlab实现

运行结果是完全一样的。注意,曲线一开始的变形(红框处,即使用matlab的fir滤波器函数也有),是由于一开始输入的信号个数比滤波器的阶次小,多余的滤波器系数乘0导致的。
但是这样的滤波器消耗了极大的乘法器资源,因为阶次有254阶,即使在FPGA用FIR滤波器的IP,消耗的资源也是我们无法接受的。

2)简化的方法

我们注意到:由于内插是零点,因此绝大多数的乘法是不必要的,实际上对于这样一个滤波器,每次的有效乘法次数只有5-6次(254阶/插值倍数(50));
因此我们可以做如下的改进:
1.将fir滤波器的阶次扩展为300阶,通过补零实现,这样这个滤波器每次需要使用六次乘法。
2.通过六次乘法和相加实现完全相等的结果。
代码:

fir_1=[fir,zeros(1,300-254)];
for ii=301:(L+1)*N
    a=ceil((ii-1)/50);
    y_3(ii)=(L+1)*sum(fir_1(ii-(a-1)*50-1)*y(a)+fir_1(ii-(a-2)*50-1)*y(a-1)+fir_1(ii-(a-3)*50-1)*y(a-2)+fir_1(ii-(a-4)*50-1)*y(a-3)+fir_1(ii-(a-5)*50-1)*y(a-4)+fir_1(ii-(a-6)*50-1)*y(a-5));
end
figure(5)
plot(x_1,y_3);
xlim([0,0.05]);

具体结果如下:
FIR内插滤波器的FPGA实现(一)-matlab实现
实现的结果除了前300个点,与matlab的滤波器完全一致,前300个点不一样的原因在本文的 三(1) 已经说明了,具体的改进方法也可以参考 三(1) 中的代码,这里没有给出。实际应用中,这个偏差也是影响很小的,因为在有用的信号之前往往也会有一些值作为滤波器的输入。

总结

我们用六个乘法实现了50倍数的升采样,减小了硬件资源消耗。后续有时间会编写FPGA代码。文章来源地址https://www.toymoban.com/news/detail-438397.html

到了这里,关于FIR内插滤波器的FPGA实现(一)-matlab实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 利用FPGA实现全串行低通FIR滤波器

    设计一个15阶(长度为16)的具有线性相位低通FIR滤波器,采用布拉克曼窗函数设计,截止频率为500HZ,抽样频率为2000HZ;采用FPGA实现全串行FIR滤波器,系数的量化位数为12比特,输入数据位数为12比特,输出数据位数为29比特,系统时钟为16KHZ 设计思路 :首先采用MATLAB根据要

    2024年02月07日
    浏览(35)
  • 滤波器设计:FIR和IIR高、低、带通滤波器的实现及Matlab代码

    滤波器设计:FIR和IIR高、低、带通滤波器的实现及Matlab代码 引言: 滤波器作为信号处理中非常重要的一部分,广泛应用于数字信号处理、音频处理、图像处理等领域。本文主要讨论FIR(有限长冲激响应)和IIR(无限长冲激响应)两种常见滤波器的设计及其实现。 FIR滤波器

    2024年02月09日
    浏览(28)
  • 解析使用FPGA逻辑实现FIR滤波器的几种架构

    有限脉冲响应(finite impulse response,FIR)数字滤波器         FIR滤波器的实质就是输入序列与系统脉冲响应的卷积,即:         其中,N为滤波器的阶数,也即抽头数;x(n)为第n个输入序列;h(n)为FIR滤波器的第n级抽头系数。         FIR滤波器基本结构如下:      

    2024年02月08日
    浏览(28)
  • FPGA 的数字信号处理:Verilog 实现简单的 FIR 滤波器

    该项目介绍了如何使用 Verilog 实现具有预生成系数的简单 FIR 滤波器。 不起眼的 FIR 滤波器是 FPGA 数字信号处理中最基本的模块之一,因此了解如何将具有给定抽头数及其相应系数值的基本模块组合在一起非常重要。因此,在这个关于 FPGA 上 DSP 基础实用入门的教程中,将从一

    2024年02月09日
    浏览(36)
  • FPGA设计FIR滤波器低通滤波器,代码及视频

    名称:FIR滤波器低通滤波器 软件:Quartus 语言:Verilog/VHDL 本资源含有verilog及VHDL两种语言设计的工程,每个工程均可实现以下FIR滤波器的功能。 代码功能: 设计一个8阶FIR滤波器(低通滤波器),要求截止频率为20KHz,使用线性相位结构。 参数设计方法: 使用matlab软件设计滤

    2024年02月08日
    浏览(36)
  • FIR滤波器简述及FPGA仿真验证

    数字滤波器的设计,本项目做的数字滤波器准确来说是FIR滤波器。 FIR滤波器(有限冲激响应滤波器),与另一种基本类型的数字滤波器——IIR滤波器(无限冲击响应滤波器)相对应,其实就是将所输入的信号都看成是离散的,用离散的冲击信号代替实际的信号。对于FIR滤波器

    2024年02月09日
    浏览(34)
  • 数字信号处理翻转课堂笔记17——窗函数法设计FIR滤波器及matlab实现

    对应教材:《数字信号处理(第五版)》西安电子科技大学出版社,丁玉美、高西全著 (1)窗函数法设计FIR线性相位滤波器的原理; (2)加窗效应:加窗对滤波器特性的影响(难点); (3)典型窗函数及其主要特性和参数(重点); (4)窗函数法设计FIR滤波器的步骤(

    2024年01月16日
    浏览(40)
  • FPGA 的 DSP:Verilog 中的简单 FIR 滤波器

    本项目介绍如何用 Verilog 实现一个带有预生成系数的简单 FIR 滤波器。 简陋的 FIR 滤波器是 FPGA 数字信号处理中最基本的构建模块之一,因此了解如何利用给定的抽头数和相应的系数值组装一个基本模块非常重要。因此,在这个关于在 FPGA 上入门 DSP 基础知识的实用方法迷你系

    2024年03月17日
    浏览(31)
  • 信号处理之FIR数字滤波器(Matlab仿真)

            数字滤波器的作用是滤除不感兴趣的信号,留下想要的信号。数字滤波器可分为无限脉冲响应(IIR)数字滤波器、有限脉冲响应(FIR)数字滤波器两种,两者各有优缺点,其中FIR数字滤波器因其具有良好的线性相位特性受到广泛应用,线性相位是指信号中各频率成分的相对

    2024年02月03日
    浏览(35)
  • 基于FPGA的FIR数字滤波器设计(quartus和vivado程序都有)。

    基于FPGA的FIR数字滤波器设计(quartus和vivado程序都有)。 附: 1.配套quartus从MATLAB系数生成直到仿真成功说明文档。 2.配套仿真出波形(图1)的视频。      

    2024年02月10日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包