首页 > 技术 > 内容

离散小波变换的FPGA实现(二)

时间:2026-01-29  作者:Diven  阅读:0

尺度函数族

众所周知,小波变换的双正交基就来自与小波函数和尺度函数,而通过scale和平移来得到的小波函数族和尺度函数族表示了不同小波(尺度)函数的分辨率,下面来用公式回顾一下:

小波函数定义

尺度函数分辨率沿拓

事实上,尺度函数族中的尺度 j 决定着不同的时间分辨率而实际上(证明请看参考资料),高时间分辨率的尺度函数必然可以代表低时间分辨率的尺度函数,如上图的三角尺度函数可以表示为:

多分辨分析(MRA)方程

尺度函数的MRA方程

有了上面的铺垫,这里就比较简单了,因为我们知道,低分辨率信号可以由高分辨率信号线性表达,所以我们可以看出,高分辨率信号所张成的空间必然包含低分辨率张成的空间:

小波函数的MRA方程

讲小波函数的MRA方程之前,我们不妨来回顾一下IDWT的定义:自然而然,我们可以知道小波函数的MRA方程的递归意义是更为重要的,所以有:所以多级的大家也会求了吧...

可以简单地看出,信号经过小波函数系数(尺度函数系数)之后还需要经过一个抽取的过程,这个的话自己看看小波函数和尺度函数的定义式就可以了

离散小波变换的重构算法

这里是相似的,而且由于懒的原因我没有做重构,所以也直接放图:可以简单地看出,信号经过小波函数系数(尺度函数系数)之后还需要经过一个内插的过程,这个的话自己看看小波函数和尺度函数的定义式就可以了.

需要注意的是,可以先抽取再滤波,但是不能先滤波后内插,见上图,(常识)

小波变换(DWT)的FPGA实现

众所周知,这次我们要实现的算法框图是这个:

多相结构模型

本来我是直接按照算法流程实现了DWT,然后讲抽取和滤波对调了位置(为了提高系统的性能)

后来从网上仅有的资料中查看到别人做了多相分解,后面我想了想,如果不用多相结构的话,相当于原信号的先经过了一次抽取,也是极大地浪费了信号. 又有:所以我们将信号和滤波器系数都进行奇偶分解,分别进行滤波,得到整体FPGA框图:接下来我们简单地理一下过程

  1. 以db4小波为示例,其小波只需要改改滤波器和matalb就可以了
  2. 仅实现一级分解,多级分解只要自己认真看博客就知道怎么做了

信号奇偶分解:

这个模块比较简单,但是想设计好需要一点小心思,思路就是做一个二分频时钟,上升沿将数据写入偶数部分,下降沿将数据写入奇数部分,这里不给出代码

matlab获取滤波器系数

代码很简单,先生成,再量化:

wn='db4';[Ld,Hd,Lr,Hr] = wfilters(wn);k=0:length(Ld)-1; subplot(221);stem(k,Ld); title('低通分解滤波器Ld'); subplot(222);stem(k,Lr); title('低通重建滤波器Lr'); subplot(223);stem(k,Hd); title('高通分解滤波器Hd'); subplot(224);stem(k,Hd); title('高通重建滤波器Hr');qua_ld = round(Ld*2^8);qua_hd = round(Hd*2^8);qua_lr = round(Lr*2^8);qua_hr = round(Hr*2^8);disp(qua_ld);disp(qua_hd);disp(qua_lr);disp(qua_hr);

FPGA设计滤波器

这里的流程跟我上一篇博客,FPGA/Verilog 设计FIR滤波器 ^[2]^ 是相似的,这里不多说,给出一个滤波器的源码:

Module filter_hd_e( //clock and reset input CLK_50M,RST_N, //filter in out input signed [15:0] data_in_hd_e, output signed [19:0] hd_out_e);localpaRAM COEFF1,COEFF3,COEFF5,COEFF7; //过长省略wire signed [19:0] add_result;reg signed [15:0] data_shift[3:0];wire signed [23:0] mul_data[3:0]; add_final add_inst( .clock (CLK_50M), .data0x (mul_data[0][23:8]), .data1x (mul_data[1][23:8]), .data2x (mul_data[2][23:8]), .data3x (mul_data[3][23:8]), .result (add_result));always @ (posedge CLK_50M or negedge RST_N)begin if(!RST_N)begin data_shift[0] <= 0; data_shift[1] <= 0; data_shift[2] <= 0; data_shift[3] <= 0; end else begin data_shift[3] <= data_shift[2]; data_shift[2] <= data_shift[1]; data_shift[1] <= data_shift[0]; data_shift[0] <= data_in_hd_e; end endmult mult_inst_1 ( data_shift[0] *COEFF1 //下同mult mult_inst_2 (mult mult_inst_3 (mult mult_inst_4 ( //过长省略assign hd_out_e = add_result;endModule

大家对应这框图可能会说我怎么没有把滤波器系数给翻转,这个问题的话,大家可以看看那个获取系数的函数描述,本来就帮我们翻转了.

加法器就算了,过于简单

matlab产生激励

这个在上一篇博客中也有提及,但是这次我们不是直接产生mif文件,而是选择在仿真的时候读入数据,所以代码就是:

depth = 1024;width = 16;x = 0 : 2*pi/(depth-1) :2*pi;y = sin(x)+sin(8*x);y = (y/2) * 32768;%将信号放大32768y(360:400) = 32767; //为了小波变换的戏剧性效果设置b = signed2unsigned(y,width);fid = fopen('sinx.txt','wt'); %将信号写入一个.txt文件中for num=0 : (depth-1) fprintf(fid,'%x\\n',round(b(num+1)));endfclose(fid);

仿真结果

用tb读入数据:

integer i; //数组坐标reg signed [15:0] stimulus[1:data_num]; //数组形式存储读出的数据initial begin RST_N = 1'b1; #60 RST_N = 1'b0; #60 RST_N = 1'b1;  $readmemh("sinx.txt", stimulus); //将txt文件中的数据存储在数组中 i = 0; repeat(data_num) begin //重复读取数组中的数据 i = i + 1; data_in = stimulus[i]; #PERIOD; //每个时钟读取一次 end $stop;end

那么又到了紧张刺激的,看波形环节: matlab计算:fpga计算:

猜您喜欢


在电气作业中,绝缘工具是保障安全的重要设备。除了常见的绝缘手套和绝缘鞋,市场上还有许多其绝缘工具值得关注。绝缘工具包括绝缘钳、绝缘螺丝刀和绝缘刀具等。这些工具的...
2024-03-26 00:00:00
在选择照明驱动时,了解其参数非常重要。输出功率是一个关键指标,通常以瓦特(W)表示,直接影响照明设备的亮度和能效。输入电压范围也是重要参数,确保驱动与电源兼容,...
2008-01-20 00:00:00
微波炉作为现代厨房中不可少的电器,给我们的生活带来了极大的便利。微波炉的正常运行离不开其内部各个组件的配合,二极管作为重要的电子元件,发挥着关键作用。本文将介绍...
2025-04-10 07:01:10
高温压力传感器广泛应用于工业、航空航天等领域,用来监测航空发动机、重型燃气轮机、燃煤燃气锅炉等动力设备燃烧室内的压力,耐高温和高可靠性是对其最基本的要求。 常...
2024-01-23 18:10:00
电流检测电阻作为关键元件,应用于电源管理、电机控制和电池监测等领域。TYOHM(幸亚)作为知名的电阻品牌,凭借其高品质的产品性能和丰富的规格选择,赢得了市场的认...
2021-12-23 13:44:44
在精密制造与测量领域,光谱共焦传感器以其高精度、非接触式测量的特性,成为了众多行业的优选解决方案。普密斯光谱探头SFS-D8040,作为一款集先进技术与广泛适用...
2024-08-19 15:19:00
在购物时,商品的规格和尺寸往往是消费者关注的重点,尤其是在选择未分类商品时。未分类商品通常指的是那些没有明确分类或标签的商品,因此了解其规格和尺寸显得尤为重要。...
2008-02-17 00:00:00
VHDL是一种应用广泛的硬件描述语言,设计者可以通过它编写代码,通过模拟器仿真验证其功能,完成逻辑综合与逻辑优化,最后通过下载到相应的可编程逻辑器件(如FPGA...
2018-01-15 16:24:00
电能管理系统(Energy Management System,简称EMS)是一种集成软硬件系统,用于监测、控制和优化电能使用的设备和方案。它的主要功能是实时监...
2023-07-21 15:45:00
基于FPGA的快速傅立叶变换摘要:在对FFT(快速傅立叶变换)算法进行研究的基础上,描述了用FPGA实现FFT的方法,并对其中的整体结构、蝶形单元及性能等进行...
2023-02-22 09:38:00