Mortimer 发表于 2014-3-9 17:01:53

FPGA中怎么实现希尔伯特Hilbert变换?

FPGA中怎么实现希尔伯特Hilbert变换?

yuhang 发表于 2014-3-9 17:30:51

那就好好钻研 数字信号处理吧

at90s 发表于 2014-3-9 19:28:54

宽带信号还是窄带信号?窄带信号的话用复数混频器混到零频,然后滤掉镜像就好了。宽带信号的话需要经过一个Hilbert滤波器得到虚部信号,源信号作为实部组合成复数就OK了。Hilbert滤波器可以用FIR结构来近似,怎么获取FIR系数通常的数字信号处理书籍都有说的。

Mortimer 发表于 2014-3-9 20:18:08

at90s 发表于 2014-3-9 19:28
宽带信号还是窄带信号?窄带信号的话用复数混频器混到零频,然后滤掉镜像就好了。宽带信号的话需要经过一个 ...

带宽大约10MHz吧,用xilinx的FIR IP核可以吗?

haley 发表于 2014-3-9 20:41:05

本帖最后由 haley 于 2014-3-9 20:42 编辑

希尔伯特变换是通过FIR滤波器实现的,抽头系数可以通过matlab计算。我给你做了一个仿真。

at90s 发表于 2014-3-9 20:46:36

用Xilinx的FIR核当然可以。

我不知道你的应用场景,也就不清楚哪个方案是合适的。在实际工作中(无线通信),我碰到的基本都是窄带方案,虽然LTE信号的带宽达到20MHz.

Mortimer 发表于 2014-3-10 14:53:26

haley 发表于 2014-3-9 20:41
希尔伯特变换是通过FIR滤波器实现的,抽头系数可以通过matlab计算。我给你做了一个仿真。 ...

十分感谢!

NJ8888 发表于 2014-3-12 10:55:44

确实靠滤波器系数,FPGA实现方式与FIR一样,系数不同,输出信号峰点对应原始信号的的斜率极值

Mortimer 发表于 2014-3-21 09:26:45

haley 发表于 2014-3-9 20:41
希尔伯特变换是通过FIR滤波器实现的,抽头系数可以通过matlab计算。我给你做了一个仿真。 ...

请问你是怎么用matlab实现这种原理图式的仿真的?

NJ8888 发表于 2014-3-21 10:30:41

传你一个小巧数字滤波器设计工具,有希尔伯特上传失败,你上网找找      Numerix-DSP.Digital.Filter.Plus.v2.2.rar

Mortimer 发表于 2014-3-21 10:43:44

NJ8888 发表于 2014-3-21 10:30
传你一个小巧数字滤波器设计工具,有希尔伯特上传失败,你上网找找      Numerix-DSP.Digital.Filter.Plus.v2 ...

恩恩,谢谢啦

NJ8888 发表于 2014-3-21 22:05:57

本帖最后由 NJ8888 于 2014-3-21 22:07 编辑

根据我目前理解,I信号是经过延时的原始信号(因为希尔伯特计算导致输出滞后,要补偿,比如你是32阶的希尔伯特,那I就要把原始信号滞后32个时钟),Q信号就是希尔伯特输出

philoman 发表于 2014-3-22 11:14:49

可以的,看Xilinx IP核FIR_Compiler的数据手册,ds795;

haley 发表于 2014-3-26 13:49:16

Mortimer 发表于 2014-3-21 09:26
请问你是怎么用matlab实现这种原理图式的仿真的?

用的是matlab中的simulink呀,我把上面的仿真文件放在附件中了。另外要说的是,FIR滤波器是56阶的,通过FIR的是Q信号,直接延迟28的是I信号,是FIR阶数的一半。

haley 发表于 2014-3-26 13:56:12

NJ8888 发表于 2014-3-21 22:05
根据我目前理解,I信号是经过延时的原始信号(因为希尔伯特计算导致输出滞后,要补偿,比如你是32阶的希尔 ...

因为要保证是因果系统,所有的响应都是大于等于0的时间出现的,不能有负的时间。所以在FIR实现希尔伯特变换的时候把冲击响应(就是FIR的抽头系数)右移阶数的一半,所以I信号也是要延迟阶数的一半,不是32阶需要延迟32采样时间,而是16。

Mortimer 发表于 2014-3-26 14:40:33

haley 发表于 2014-3-26 13:56
因为要保证是因果系统,所有的响应都是大于等于0的时间出现的,不能有负的时间。所以在FIR实现希尔伯特变 ...

还有个问题想问一下你,我自己做的为什么希尔伯特滤波器的输出幅度会改变啊? 而且改变信号发生器的sample time后幅度就会改变,不知道是为什么?sample time 的值对整个输出有什么影响吗?


非常感谢你耐心的回答!

NJ8888 发表于 2014-3-26 15:04:10

你看滤波器带内是有波动的,所以不同频率幅度不同

haley 发表于 2014-3-26 15:16:50

Mortimer 发表于 2014-3-26 14:40
还有个问题想问一下你,我自己做的为什么希尔伯特滤波器的输出幅度会改变啊? 而且改变信号发生器的sampl ...

这个和数字域的归一化频率有关系,因为有采样定理限制,所以信号频率的最大值对应0.5*Fs,归一化频率以0.5*Fs为1。你可以看一下你生成的FIR滤波器的幅频响应,是0.05到0.95之间的幅度是比较平坦的。而你的采样频率是50k,1k/25k=0.04,只要降低你的采样率就可以了。同时你的滤波器的阶数比较小,频带内波动比较大,可以增加阶数。

Mortimer 发表于 2014-3-27 14:36:37

haley 发表于 2014-3-26 15:16
这个和数字域的归一化频率有关系,因为有采样定理限制,所以信号频率的最大值对应0.5*Fs,归一化频率以0. ...

恩恩,看来是我的理论功底不够扎实啊~~

非常感谢你耐心的回答了!

Mortimer 发表于 2014-3-27 16:08:47

NJ8888 发表于 2014-3-26 15:04
你看滤波器带内是有波动的,所以不同频率幅度不同

恩恩,跟这个有关系,谢谢啦

haley 发表于 2014-3-27 18:03:57

Mortimer 发表于 2014-3-27 14:36
恩恩,看来是我的理论功底不够扎实啊~~

非常感谢你耐心的回答了!

不客气,大家共同学习交流!

Mortimer 发表于 2014-3-31 10:27:12

haley 发表于 2014-3-26 15:16
这个和数字域的归一化频率有关系,因为有采样定理限制,所以信号频率的最大值对应0.5*Fs,归一化频率以0. ...

不好意思,我还有一个问题想请教一下你,我想在simulink中看信号的频谱,为什么会出现下图这样的问题?我该怎么解决?实在是拜托了

haley 发表于 2014-3-31 17:17:44

本帖最后由 haley 于 2014-3-31 17:19 编辑

Mortimer 发表于 2014-3-31 10:27
不好意思,我还有一个问题想请教一下你,我想在simulink中看信号的频谱,为什么会出现下图这样的问题?我 ...

我给你做了一个仿真,加上了解析信号的生成,可以看到在当前频率下,镜像频率的抑制比是多少。

Mortimer 发表于 2014-4-1 10:21:10

haley 发表于 2014-3-31 17:17
我给你做了一个仿真,加上了解析信号的生成,可以看到在当前频率下,镜像频率的抑制比是多少。 ...

非常感谢了!我能不能问一下你现在是工作了还是在上学?

haley 发表于 2014-4-1 13:12:42

Mortimer 发表于 2014-4-1 10:21
非常感谢了!我能不能问一下你现在是工作了还是在上学?

工作了呀,我matlab只会点皮毛,论坛里高手很多,你用xilinx的FPGA做这个,我也挺有兴趣的。

Mortimer 发表于 2014-4-1 15:12:45

haley 发表于 2014-4-1 13:12
工作了呀,我matlab只会点皮毛,论坛里高手很多,你用xilinx的FPGA做这个,我也挺有兴趣的。 ...

哦,我今年大四了,多多指教啊!

ctqvsly 发表于 2014-4-2 08:40:28

楼主可不可以用PLL?

haley 发表于 2014-4-2 09:29:35

ctqvsly 发表于 2014-4-2 08:40
楼主可不可以用PLL?

PLL只能对单一频率进行移相,对单一频率移相都是很好办的事情,如果信号中包含多个频率,PLL锁定哪一个频率呢?你说的更像是FPGA中的时钟信号的处理方法,但是不是信号处理的方法。

Mortimer 发表于 2014-4-2 09:32:45

Mortimer 发表于 2014-4-1 15:12
哦,我今年大四了,多多指教啊!

    你好,实在是不好意思,我还有一个问题想问一下你。我把现在的仿真传上来你可不可以帮我看一下,我昨天看了一天也不知道是哪里出了问题。

    我做希尔伯特的目的是为了实现多普勒频移,多普勒频移的理论推导后是只存在一个尖峰的(一个频率),但是我做出来却是两个尖峰,貌似是上下变频了。不知道为什么?

    这是最后一个问题了,因为我现在是初学者,好多问题找不出来,但是毕设老师一直在催,所以想找你帮忙~~实在是非常感谢了!

Mortimer 发表于 2014-4-2 09:36:54

haley 发表于 2014-4-1 13:12
工作了呀,我matlab只会点皮毛,论坛里高手很多,你用xilinx的FPGA做这个,我也挺有兴趣的。 ...

你好,实在是不好意思,我还有一个问题想问一下你。我把现在的仿真传上来你可不可以帮我看一下,我昨天看了一天也不知道是哪里出了问题。

    我做希尔伯特的目的是为了实现多普勒频移,多普勒频移的理论推导后是只存在一个尖峰的(一个频率),但是我做出来却是两个尖峰,貌似是上下变频了。不知道为什么?

    这是最后一个问题了,因为我现在是初学者,好多问题找不出来,但是毕设老师一直在催,所以想找你帮忙~~实在是非常感谢了!

haley 发表于 2014-4-2 10:57:38

Mortimer 发表于 2014-4-2 09:36
你好,实在是不好意思,我还有一个问题想问一下你。我把现在的仿真传上来你可不可以帮我看一下,我昨天看 ...

原来你是要做SSB混频的,我给你做的仿真在附件中,因为生成的信号是实信号不是解析信号,所以在FFT后会有一个对称的负频率,只要在FFT显示里面只显示0~Fs/2就好了。正常情况下上边带和下边带幅度差别是很大的,应该在50db以上。你的仿真结果确实有问题。

Mortimer 发表于 2014-4-2 11:13:07

haley 发表于 2014-4-2 10:57
原来你是要做SSB混频的,我给你做的仿真在附件中,因为生成的信号是实信号不是解析信号,所以在FFT后会有 ...

    我感觉理论上应该是不存在上变频或者下变频的啊,计算结果是只会在一个频点上的,不知道为什么上下变频都存在?

    还有一个问题就是你刚才给我的那个DSP I/Q发出的信号貌似不是正弦波,是三角波啊~~

haley 发表于 2014-4-2 11:31:19

本帖最后由 haley 于 2014-4-2 11:32 编辑

Mortimer 发表于 2014-4-2 11:13
我感觉理论上应该是不存在上变频或者下变频的啊,计算结果是只会在一个频点上的,不知道为什么上下变 ...

根据采样定律,采样频率大于信号频率的两倍,一个正弦周期采样两个点就可以了,你认为采样两个点可以画出一个你认为的完整正弦波吗?不要凭感觉办事,你看到正弦波画得很漂亮的波形的时候,采样频率已经远大于信号频率了。你在之前的仿真都是犯了这样的错误,采样频率远大于信号频率,导致归一化频率以后,超出了滤波器的带宽。

haley 发表于 2014-4-2 11:39:20

本帖最后由 haley 于 2014-4-2 11:43 编辑

Mortimer 发表于 2014-4-2 11:13
我感觉理论上应该是不存在上变频或者下变频的啊,计算结果是只会在一个频点上的,不知道为什么上下变 ...

实际中的希尔伯特变换和理想情况比是有误差的,如果你FIR滤波器是无限长,能够把希尔伯特变换的全波冲击响应都实现了就可以了。如果幅度和相位有误差,哪怕只是0.1度,都会导致边带抑制不是无穷大。

ctqvsly 发表于 2014-4-2 14:26:18

haley 发表于 2014-4-2 09:29
PLL只能对单一频率进行移相,对单一频率移相都是很好办的事情,如果信号中包含多个频率,PLL锁定哪一个频 ...

嗯,多频点只能用第三类线性相位FIR滤波器{:sweat:}

ctqvsly 发表于 2014-4-2 14:27:24

haley 发表于 2014-4-2 09:29
PLL只能对单一频率进行移相,对单一频率移相都是很好办的事情,如果信号中包含多个频率,PLL锁定哪一个频 ...

嗯,多频点只能用第三类线性相位FIR滤波器{:sweat:}

Mortimer 发表于 2014-4-2 14:32:49

haley 发表于 2014-4-2 11:39
实际中的希尔伯特变换和理想情况比是有误差的,如果你FIR滤波器是无限长,能够把希尔伯特变换的全波冲击 ...

哦哦,明白了,非常感谢!
页: [1]
查看完整版本: FPGA中怎么实现希尔伯特Hilbert变换?