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完全相等。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库【SoCVista】Noble Identities在线全文阅读。
相关推荐: