【SoCVista】Noble Identities

更新时间:2024-06-25 00:02:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Noble Identity

Noble Identity 是多采样率系统中最为常用的,用于将抽取器(或插值器)移动到合适的位置。如下图,以抽取器和FIR滤波器为例,证明一下Nobel变换的等价性,至于其他的情况可以类似得证。

假设FIR滤波器H(z)为

H(z)?b0?b1z?1?...?bN?1z?(N?1)

则H(z^M)为

H(zM)?b0?b1z?M?...?bN?1z?(N?1)M

1) 先滤波再抽取

对x(n)用H(z^M)滤波后得到的中间值t(n)为

t(n)?b0x(n)?b1x(n?M)?...?bN?1x(n?(N?1)M)

再对t(n)进行M阶减采样,得

y1(n)?t(nM)?b0x(nM)?b1x(nM?M)?...?bN?1x(nM?(N?1)M)

2) 先抽取再滤波

对x(n)先进行M阶抽取得w(n)为

w(n)?x(nM)

再对w(n)用H(z)滤波

y2(n)?b0w(n)?b1w(n?1)?...?bN?1w(n?(N?1))?b0x(nM)?b1x((n?1)M)?...?bN?1x((n?(N?1))M) ?b0x(nM)?b1x(nM?M)?...?bN?1x(nM?(N?1)M)----------------------------------------------------

比较y_1和y_2两个输出序列,完全一样,问题得证。

%H(z)=1+2z^(-1)+3z^(-2)+4z^(-3) clear all clc

t=1:0.2:10; x=2*sin(t)./t;

%---------------------先滤波后抽取 b1=[1 0 2 0 3 0 4]; a1=[1 0 0 0 0 0 0]; y1=filter(b1,a1,x); y1=y1(2:2:end);

%---------------------先抽取再滤波 b2=[1 2 3 4]; a2=[1 0 0 0]; x=x(2:2:end);

y2=filter(b2,a2,x);

%---------------------比较两个输出 subplot(2,1,1);

stem(y1);title('y1'); subplot(2,1,2);

stem(y2);title('y2');

抽取器的多相实现:

x(n)H(z)w(n) My(n)

图一、系统框图

上图是一个典型抗混叠抽取的系统。输入x(n)数据量很多,而抽取后的输出y(n)却要少得多,如果直接采用上图的结构,H(z)所需的计算量将是非常大的。

图二、直接实现

这是直接实现,所需乘法次数是 x(n)输入频率的N倍,加法次数是x(n)输入频率的N-1倍。

图三、多相实现

这是低功耗的多相实现形式,与直接形式的区别是,将抽取器移动到每一个乘法器之前。

证明:假设H(z)为FIR形式,

H(z)?b0?b1z?1?...?bN?1z?(N?1)

首先看看直接形式中,x(n)经过H(z)滤波后的结果w(n),如下

w(n)?b0x(n)?b1x(n?1)?...?bN?1x(n?(N?1))

对w(n)进行M阶抽取得到y1(n)为

y1(n)?w(nM)

也就是

y1(n)?b0x(nM)?b1x(nM?1)?...?bN?1x(nM?(N?1))

y1(n)就是直接实现所得到的结果。下面再证明,其实y1(n)可以用多相结构实现,问题就解决了。

仔细观察y1(n)的表达式,与b0相乘的只能是x(nM),x(nM)是什么?x(nM)就是x(n)的M阶抽取啊,也就是

x(n)

同样的道理,与b1相乘的只能是x(nM-1),而x(nM-1)正好是x(n-1)的M阶抽取,也可以说成x(n)延迟一个单元后的M阶抽取

x(n) Mx(nM) MDx(nM) M延时N-1个单元后进行M阶抽取,如下图

x(n)x(nM-1)

其他单元也是这个道理,看最后一项,与bN-1相乘的只能是x(nM-(N-1)),也就是x(n)

MDx(nM) M...x(nM-1)D M这就是多相结构的来源了。。

Matlab 验证

x(nM-(N-1))

clear all clc

%原始24阶fir

b =[0.8147 0.9058 0.1270 0.9134 0.6324 0.0975 0.2785 0.5469 0.9575 0.9649 0.1576 0.9706 0.9572 0.4854 0.8003 0.1419 0.4218 0.9157 0.7922 0.9595 0.6557 0.0357 0.8491 0.9340];

%输入随机信号,3000点 x = rand(1,3000); %延时x为24路

%取Q个点来观察,Q<3000/6=500 Q=30;

xd = zeros(24,Q); for k=1:24

t = x(k:6:end);

xd(25-k,:) = t(1:Q);% 取450个点来观察即可 end

w = repmat(b',1,Q).*xd; y2 = sum(w);

%原始滤波再抽取的结果

y1 = filter(b,[1,zeros(1,23)],x); y1 = y1(24:6:end); y1 = y1(1:Q);

subplot(2,1,1);stem(y1);title('y1'); subplot(2,1,2);stem(y2);title('y2');

disp(max(abs(y1-y2)))

结果:y1为直接实现;y2为多相实现

比较两个序列误差为 3.5527e-015,,,其实可以认为y1和y2完全相等。

本文来源:https://www.bwwdw.com/article/kcx3.html

Top