当前位置:   article > 正文

FPGA信号处理--多相滤波器(二)

多相滤波

多相滤波器(二)



前言

本文从一篇MATLAB来分析。


一、多相滤波器的设计

这篇文章实在稻壳阅读器上找到的,楼主已经完成了多相滤波器的verilog仿真设计后,希望找一段MATLAB看看,而发现的论文,名字叫做《多相滤波器的设计》,但里面没有论文作者等信息。

1.MATLAB原代码

clc;clear all;
n=0:999;
x=sin(pi*n/4);
figure;plot(x);
title('输入信号');
wn=0.5;
N=1000;
xx=reshape(x,4,250);
x1=xx(1,1:250);
x2=xx(2,1:250);
x3=xx(3,1:250);
x4=xx(4,1:250);
figure;subplot(4,1,1);plot(x1);
subplot(4,1,2);plot(x2);
subplot(4,1,3);plot(x3);
subplot(4,1,4);plot(x4);
title('四路输入信号');
hn=fir1(N-1,wn);
h=hn(n+1);
hh=reshape(h,4,250);
h1=xx(1,1:250);
h2=xx(2,1:250);
h3=xx(3,1:250);
h4=xx(4,1:250);
H1=fft(h1,250);
H2=fft(h2,250);
H3=fft(h3,250);
H4=fft(h4,250);
H=fft(h);
figure;plot(H);
title('滤波器的频域波形');
figure;subplot(4,1,1);plot(H1);
subplot(4,1,2);plot(H2);
subplot(4,1,3);plot(H3);
subplot(4,1,4);plot(H4);
title('子滤波器的频域波形');
y1=conv(x1,h1);
y2=conv(x2,h2);
y3=conv(x3,h3);
y4=conv(x4,h4);
y=y1+y2+y3+y4;
Y=fft(y);
figure;subplot(3,1,1);plot(y);
subplot(3,1,2);plot(Y);
subplot(3,1,3);plot(abs(Y));
title('输出信号的时域、 频域波形');
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

其实有点心虚,楼主早已把大部分数字信号处理知识都还给了老师,在这份代码中,发现了一点问题,也不知道是楼主真的发现了问题,还是别人本来就是对的,自己错误理解,但也进行了以下修改,并添加了少量注释。

2.MATLAB修改后代码

clc;clear all;close all;
n=0:999;
x=sin(pi*n/4);
figure;plot(x);
title('输入信号');
wn=0.5;
N=1000;
xx=reshape(x,4,250);%将x构建成新的数组,4250列
x1=xx(1,1:250);%从xx的第1行第1列开始取250个数
x2=xx(2,1:250);%从xx的第2行第1列开始取250个数
x3=xx(3,1:250);%从xx的第3行第1列开始取250个数
x4=xx(4,1:250);%从xx的第4行第1列开始取250个数
figure;subplot(4,1,1);plot(x1);
subplot(4,1,2);plot(x2);
subplot(4,1,3);plot(x3);
subplot(4,1,4);plot(x4);
title('四路输入信号');
hn=fir1(N-1,wn);
h=hn(n+1);
hh=reshape(h,4,250);
h1=hh(1,1:250);
h2=hh(2,1:250);
h3=hh(3,1:250);
h4=hh(4,1:250);
H1=fft(h1,250);
H2=fft(h2,250);
H3=fft(h3,250);
H4=fft(h4,250);
H=fft(h);
figure;plot(H);
title('滤波器的频域波形');
figure;subplot(4,1,1);plot(H1);
subplot(4,1,2);plot(H2);
subplot(4,1,3);plot(H3);
subplot(4,1,4);plot(H4);
title('子滤波器的频域波形');
y1=conv(x1,h1);%卷积将时域运算转换到了频域,任何
y2=conv(x2,h2);%一个线性系统的输出都可以将输入与
y3=conv(x3,h3);%系统函数做卷积获得,这里将输入与
y4=conv(x4,h4);%滤波器函数相卷积,实现了信号滤波
y=y1+y2+y3+y4;
Y=fft(y);
figure;subplot(3,1,1);plot(y);
subplot(3,1,2);plot(Y);
subplot(3,1,3);plot(abs(Y));
title('输出信号的时域、 频域波形');
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

从这段代码中,我们为能够很清楚的知道知道以下几个知识点:
1、原始数据如何进行多相分解的;
2、原始滤波器系数是如何被分成多个子滤波器系数的;
3、多相滤波完成后,数据是如何处理的。
我们要知道一点,多相分解的过程,其实类似于抽取的过程,N相的多相分解相当于抽取了N倍,速率降低了N倍,多相滤波后的数据相比原始数据速率,也降低了N倍。


总结

上篇文章中,涉及到的后半部分,其实是对滤波器对称性分析,后面会有一篇文章,来着重讲解(翻译)下滤波器对称性,资源的节约。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/821456
推荐阅读
相关标签
  

闽ICP备14008679号