当前位置: 首页 > news >正文

基于FPGA的FFT图像滤波设计

1.FFT滤波算法介绍

        FFT滤波就是通过傅里叶运算将图像转换到频域空间,然后在频域中对图像进行处理,最后将处理后的图像通过傅里叶逆运算将图像转会到时域空间。

  在频域空间中,我们能够更好的对图像的噪声进行分析,然后找出相关规律将噪声信息去除。

  本文重点讲解如何在FPGA中实现FFT图像算法,对于算法原理不过多讲解

2.FFT滤波算法系统框架设计

 

 如上图所示,本系统程序由5个模块组成,下面对每个每模块进行详细介绍。

 2.1 image_sample_switch模块说明

         该模块的作用将输入的图像数据进行变化,从而满足蝶形FFT的运算形式。为什么要对图像数据进行变化呢?因为蝶形FFT数据的数据必须满足

 

 

  • 1. image_sample_switch程序接口

名称

方向

位宽

说明

pixel_clk

Input

1

图像工作时钟

clk

Input

1

算法运行时钟(2Xpixel_clk)

reset

Input

1

复位信号(active high)

image_vs_i

Input

1

图像场信号

image_hs_i

input

1

图像行信号

 image_data_i

input

size

图像数据

image_sample_wren_o

input

1

AXI总线形式的写信号

image_sample_last_o

input

size

AXI总线形式的last信号

image_sample_wrdb_o

Output

size

转化后的图像数据

 仿真结果如下图所示

 

 2.2 image_fft_control模块说明

 该模块的作用是实现FFT的蝶形运算,由于蝶形运算比较复杂,我们直接调用xilinx的FFT-IP进行运算。

 

 

 如下图所示,调用FFT-IP,将转换深度设置为1024(因为我们的图像是每行640个像素),资源选择pipelined streaming 模式。

 

 

 

将Data Format  设置为fixed point;

scaling options设置为unscaled;

rounding modes  设置为truncation

 

 

 

 

 

对IP的操作,首先将FFT-IP配置为FFT模式,然后按照AXI总线形式进行数据输入既可。

仿真结果如下图所示

 

 

 2.3 image_fliter_cal模块说明

该模块的作用就是对频域数据进行计算,通过前面的FFT转化后的数据变成频域数值,频域数值是有实部和虚部,主要是对实部和虚部。如何对实部和虚部进行运算呢,就是分别对实部和虚部进行平方操作,然后将它们进行加法计算,将结果进行开平方操作;最近将开平方运算后的数据与设置的阈值进行比较。

 

 

 

 

 

 

 

 2.4 image_ifft_control模块说明

 该模块的作用就是将频域空间的数据转换到时域空间,该功能的实现通过调用Xilinx的FFT-IP实现。

 

  • 1. image_ifft_contro程序接口

名称

方向

位宽

说明

clk

Input

1

工作时钟

fft_initi_i

Input

1

Ip初始化信号

image_fliter_wren_i

input

1

图像写信号

image_fliter_last_i

input

size

图像结束信号

image_fliter_db_im_i

input

size

图像虚部数据

Image_fliter_real_db_i

input

size

图像实部数据

image_ifft_wren_o

input

1

AXI总线形式的写信号

image_ifft_last_o

input

size

AXI总线形式的last信号

image_ifft_wrdb_o

Output

size

转化后的图像数据

 

,所以对图像每行数据进行扩充,从而满足需求,一般补充的数据都是0,这样不会影响计算结果。

http://www.lryc.cn/news/323816.html

相关文章:

  • WPF 立体Border
  • java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics
  • 代码随想录(day8)——字符串
  • JavaScript 权威指南第七版(GPT 重译)(二)
  • 【python_往企业微信群中发送文件】
  • 华为校招机试 - 循环依赖(20240320)
  • 基于Spring Boot技术的幼儿园管理系统
  • 查找众数及中位数 - 华为OD统一考试(C卷)
  • bash命令执行.sh文件 windows python环境
  • refreactive vue3
  • 【项目实践Day06】异步请求与同步请求+Ajax+微信小程序上实现发送异步请求
  • Elasticsearch面试系列-01
  • QT tableWidget横向纵向设置
  • Unity Mesh简化为Cube mesh
  • openGauss学习笔记-249 openGauss性能调优-使用Plan Hint进行调优-Join顺序的Hint
  • 大规模预训练语言模型的可解释性研究与实践
  • Rust常用库之序列化和反序列化库serde(使用 Serde 处理json)
  • java设计模式(2)---六大原则
  • 数学建模(层次分析法 python代码 案例)
  • Gitlab介绍
  • Amuse .NET application for stable diffusion
  • 【机器学习-05】模型的评估与选择
  • 【11】工程化
  • Python中requests、aiohttp、httpx性能对比
  • 网络原理(5)——IP协议(网络层)
  • GE IS200AEPAH1BKE IS215WEPAH2BB是两种不同的压力测量模块
  • Rust 与 C++ ,孰优孰劣?
  • MySQL、Oracle的时间类型字段自动更新:insert插入、update更新时,自动更新时间戳
  • Testng框架集成新业务
  • springboot 单元测试