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('输出信号的时域、 频域波形');

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

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、多相滤波完成后,数据是如何处理的。
我们要知道一点,多相分解的过程,其实类似于抽取的过程,N相的多相分解相当于抽取了N倍,速率降低了N倍,多相滤波后的数据相比原始数据速率,也降低了N倍。


总结

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

  • 5
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值