2010-01-05 17:41:00 zhandoushi1982 阅读数 2152
  • 多角度带你编写更规范的黑盒测试用例

    讲解方式 通过类比生活中的例子,轻松理解测试用例的设计方法。课程内容条理清晰,目标明确,由浅入深,环环相扣。重点部分进行额外梳理和总结,更易理解和吸收。 课程亮点 1,测试用例的要素讲解,让测试用例的编写更加规范 2、多种测试用例方法的学习,让用例设计更加全面。测试用例的设计方法:等价类、边界值、判定表、因果图、状态迁移图、场景法、正交实验法、错误推测法 3,多角度的案例实践,以理解各种方法的应用 课程内容 1、测试用例的定义和组成要素 2、测试用例的设计方法:等价类、边界值、判定表、因果图、状态迁移图、场景法、正交实验法、错误推测法 3:每种设计方法对应的案例讲解 适用人群 1、对软件测试感兴趣的在校生及应届生。 2、希望转行软件测试的在职人员。 3、希望巩固软件测试设计方法的测试同行。 4、对软件测试感兴趣的其他听众。

    589 人正在学习 去看看 传智

      梳状滤波器是由许多按一定频率间隔相同排列的通带和阻带,只让某些特定频率范围的信号通过,由于其特性曲线象梳子一样,故称为梳状滤波器。梳状滤波器被用于分离色度信号的两个正交分量U色差信号与V色差信号,一般由延时、加法器、减法器、带通滤波器组成。对于静止图像,梳状滤波在帧间进行,即三维梳状滤波或3D梳状滤波器。对活动图像,梳状滤波在帧内进行,即二维梳状滤波或2D梳状滤波器。

2017-10-27 20:55:49 u012176730 阅读数 1161
  • 多角度带你编写更规范的黑盒测试用例

    讲解方式 通过类比生活中的例子,轻松理解测试用例的设计方法。课程内容条理清晰,目标明确,由浅入深,环环相扣。重点部分进行额外梳理和总结,更易理解和吸收。 课程亮点 1,测试用例的要素讲解,让测试用例的编写更加规范 2、多种测试用例方法的学习,让用例设计更加全面。测试用例的设计方法:等价类、边界值、判定表、因果图、状态迁移图、场景法、正交实验法、错误推测法 3,多角度的案例实践,以理解各种方法的应用 课程内容 1、测试用例的定义和组成要素 2、测试用例的设计方法:等价类、边界值、判定表、因果图、状态迁移图、场景法、正交实验法、错误推测法 3:每种设计方法对应的案例讲解 适用人群 1、对软件测试感兴趣的在校生及应届生。 2、希望转行软件测试的在职人员。 3、希望巩固软件测试设计方法的测试同行。 4、对软件测试感兴趣的其他听众。

    589 人正在学习 去看看 传智

基于CIC滤波器的正交检波

 

Abstract:

本文主要介绍一种基于CIC滤波器的正交检波结构,前部分主要介绍CIC滤波器的实现,并结合MATLAB进行图文分析;后半部分简单介绍正交检波的一些个人理解。

Keywords:

CIC滤波器、抽取、混叠、FFT、欠采样

 

CIC滤波器初步介绍

Xilinx的FPGA的DSP IP中有一个模块就是CIC滤波器,这个模块可以不用乘法器资源(硬件资源消耗少)来实现低通滤波、内插、抽取:在作为低通滤波器使用时,因为没有用乘法器,所以FPGA内部的delay就可以降到最低,以实现更大的数据吞吐率。同时基于CIC滤波器可以较好地实现数据抽取,已达到降采样率的目的(相同的滤波器特性情况下,降低采样率可以进一步的减少FIR滤波器的阶数,也就能够进一步的减少FPGA的资源使用)。结合这两个特点,CIC滤波器很适合放置在高采样率的ADC的后面,1实现初步滤波,2利用抽取降低采样率,使得后级更加陡峭的滤波器更加容易应用。下面是CIC滤波器的Z域传函:

Figure1

下面是CIC的实现方式:

Figure2

左边是积分部分,共N级,时钟域为降采前(假设R为2)的时钟,如果前级连接一个10MHz的ADC,那么Integrator部分的计算时钟就是10MHz。右边部分是Comb部分,共N级,每一级有M个延时单元,时钟域是降采后的时钟,接上面的例子,就是5MHz。

CIC滤波器仿真

下面给出基于MATLAB的源代码:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function yn = CIC_Simulat(R,M,N,xn )

yn = zeros(1,fix(length(xn)/R));

IntegratorBuffer = zeros(1,N);

IntegratorIn = 0;

IntegratorOut = 0;

CombBuffer = zeros(N,M);

CombIn = 0;

CombOut = 0;

for i_Sample = 1 : length(xn)

    IntegratorIn =xn(i_Sample);

    %without delay, get IntegratorOutput at first

    %then update the IntegratorBuffer

    fori_Integrator = 1 : N

       IntegratorOut = IntegratorIn + IntegratorBuffer(i_Integrator);

       IntegratorBuffer(i_Integrator) = IntegratorOut;

       IntegratorIn = IntegratorOut;

    end

    %case downsampling, input data to comb from every R IntegratorOutput

    ifrem(i_Sample,R) == 0

        CombIn=  IntegratorOut; % CombIn is Nth Comb's input sigal

        fori_Comb = 1 : N

            CombOut= CombIn - CombBuffer(i_Comb,end); % CombOut is Nth Comb'soutput sigal

            %thenupdate the Nth Comb's CombBuffer

           CombBuffer(i_Comb,2:end) = CombBuffer(i_Comb,1:end-1);

           CombBuffer(i_Comb,1) = CombIn;

            CombIn= CombOut;% reset CombIn as next N+1th Comb's input

        end %end for

        %at last we get output

       yn(fix(i_Sample/R)) = R * CombOut/((R*M)^(N));     

    end%end if

end%end for

 

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

基于上面的脚本,来简单的做个实验:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 该脚本主要用来展示,LNFFT的影响

% L越长,也就是实际用来做FFT的采样数据点数越多,那么加窗效应就会减弱,主瓣的宽度就会越小,功率泄露就会减弱(这里特指矩形窗)

% N越长,就是在实际L的基础上,添加的0采样点的个数越多,就会提高频谱的分辨率,也就是最小能够分辨的频率

fftN = 1024; % fft number

sF = 100; %sample frequence

sL = 256; %sample Length

 

 

xF1 = 1; %x(n) frequence 1

xF2 = 37; %x(n) frequence 2

xA1 = 1;

xA2 = 1;

xn = xA1 * sin(2*xF1*pi*(0:(1/sF):((sL-1)/sF)))+...

     xA2 *sin(2*xF2*pi*(0:(1/sF):((sL-1)/sF)));%Sample freq = sF, length = sL

xF = fft(xn,fftN);

figure

subplot(2,4,1);

plot((((-fftN/2):(fftN/2-1))/fftN)*sF,abs(fftshift(xF))); 

xlabel('Normalized frequency') ;

ylabel('Amplitude') ;

title('Input Signal(FFT)');

subplot(2,4,5);

plot((((-fftN/2):(fftN/2-1))/fftN)*sF,abs(fftshift(xF)));

xlabel('Normalized frequency') ;

ylabel('Amplitude') ;

title('Input Signal(FFT)');

 

 

%-----------------------Average-----------------------------%

h1L = 10; %h(n) Length

h1n = ones(1,h1L); %get h1(n)

subplot(2,4,2);

plot(h1n,'Ro');

xlabel('Time') ;

ylabel('Amplitude') ;

title('Impulse Response of Average');

 

 

h1F = fft(h1n,fftN)/h1L;

subplot(2,4,3);

plot((((-fftN/2):(fftN/2-1))/fftN)*sF,abs(fftshift(h1F)));

xlabel('Normalized frequency') ;

ylabel('Amplitude') ;

title('Magnitude Response Of Moving Average N=10 (FFT)');

 

y1n = conv(xn,h1n)/h1L;%get y1n

y1F = fft(y1n,fftN); 

subplot(2,4,4);

plot((((-fftN/2):(fftN/2-1))/fftN)*sF,abs(fftshift(y1F)));

xlabel('Normalized frequency') ;

ylabel('Amplitude') ;

title('Output Signal Of Moving Average Filter (FFT)');

%------------------------------------------------------------%

 

 

 

%-----------------------CIC-----------------------------%

% Implementing Cascaded Integrator Comb filter with the

% integrator section following the comb stage

% RMN来控制CIC滤波器的行为,其中

% 实际上RMN都会影响到带宽,最先确定的一般是R,就可以通过设置MN来实现CIC滤波器的幅度响应

% R来控制Downsampling,也即是下采的比例,一般固定不变(会影响衰减的幅度和旁瓣的宽度)

% M来控制带宽,(会影响衰减的幅度和旁瓣的宽度)

% N来控制CIC滤波器的阶数,主要用来控制衰减的的幅度

R = 1;

M = 10;

N = 1;

%理论CIC的冲激响应,冲激响应FFT,信号输出FFT

 

%理论CIC的冲激响应

z=tf('z');

h3Theory = ((1-z^(-M*R))/(1-z^(-1)))^N;

h3nTheory = impulse(h3Theory)/((R*M)^(N));

%h3nTheory = step(h3Theory);

%实际CIC的冲激响应

DeltaXn = [1 zeros(1,length(h3nTheory)-1)];

%DeltaXn = ones(1,length(h3nTheory));

h3nReal = CIC_Simulat(R,M,N,DeltaXn);

 

 

subplot(2,4,6);

hold on;

plot(h3nTheory,'G*');

plot([R:R:R*length(h3nReal)],h3nReal,'R.');

xlabel('Time') ;

ylabel('Amplitude') ;

title('Impulse Response of CIC');

hold off;

 

%理论CIC的冲激响应的FFT

h3TheoryF = fft(h3nTheory,fftN);

%实际CIC的冲激响应的FFT

h3RealF = fft(h3nReal,fftN);

subplot(2,4,7);

hold on;

plot((((-fftN/2):(fftN/2-1))/fftN)*sF,abs(fftshift(h3TheoryF)),'G-');

plot((((-fftN/2):(fftN/2-1))/fftN)*(sF/R),abs(fftshift(h3RealF)),'R-');

xlabel('Normalized frequency') ;

ylabel('Amplitude') ;

title(' Magnitude Response Of CIC (FFT)');

hold off;

 

 

y3n=CIC_Simulat(R,M,N,xn);

y3F = fft(y3n,fftN); 

subplot(2,4,8);

plot((((-fftN/2):(fftN/2-1))/fftN)*(sF/R),abs(fftshift(y3F)));

xlabel('Normalized frequency') ;

ylabel('Amplitude') ;

title('Output Signal Of CIC Filter (FFT)');

%------------------------------------------------------------%

 

上面的代码主要是做了一个对比实验,因为当R=1,N=1,M=10时,CIC滤波器就是实现了移动平均滤波器。将CIC滤波器以及移动平均滤波器的冲激响应和冲激响应的FFT进行对比,结果如下图所示:

Figure 3 移动平均滤波器:输入信号的频谱、冲激响应、冲激响应幅频曲线、滤波后的输出信号的频谱

Figure 4 CIC滤波器(R=1、M=10、N=1):输入信号的频谱、冲激响应、冲激响应幅频曲线、滤波后的输出信号的频谱

经过对比,两者确实具备相同的冲激响应和幅频特性,结果输出信号自然是一样。

现将R=2,M=10,N=2,,得到下图:

Figure 5 CIC滤波器(R=2、M=10、N=2):输入信号的频谱、冲激响应、冲激响应幅频曲线、滤波后的输出信号的频谱

特别需要注意的是上图左2,红色点和绿色点没有重合,同时绿色点数量也是红色点的2倍。这是因为R=2,这里有一个降采样率(抽取)的过程,那自然冲激响应的有效点数也是原来的一半,幅度却是两倍(红线是CIC抽取的响应,绿点是没有降采的响应)。再看右2图,因为抽取的原因,红线的频率范围只有绿线的1半,但是频率重合部分的幅频响应是一致的。所以说同样的传函形式:

 

 

 

可以用降采(抽取)的算法实现(红线),也可以不降采(绿线)来实现,最终幅频响应是一样的。

再回过头对比figure1和figure3,可以明显的看到,高阶CIC高频部分衰减还是可以接受的。但是CIC抽取滤波器存在两个问题:

1.     抽取时会发生频谱折叠(或说频谱复制),有可能会发生混叠;

做如下修改:

xF2 = 42.5; %x(n) frequence 2

R =2;

M =10;

N =1;

 

此时两个滤波器的实际输出如下:

Figure7

可以看到,原来的频率应该是1Hz和42.5Hz,但是CIC滤波器后变成了1Hz和7.5Hz,这是因为在降采后发生了频率复制(折叠),那原来在42.5Hz的频率向左移动50Hz(降采后的采样率)-7.5Hz,同理-42.5Hz移动到了7.5Hz。这就是混频,一般发生在欠采样(抽取后采样率不够大)的情况下!

2.     带通部分平整度不够;

Figure8 CIC通带部分展开后,却是不够平整

前者可以通过适当选取采样频率进行规避,后者可以在CIC滤波器后面接一个补偿器,将通带部分的幅频响应变得更加平整,如下图所示:

Figure9 经过补偿的CIC滤波器,见Xilinx的技术手册-pg140

小结:

上面主要介绍了CIC滤波器的特点,接下来介绍下应用。

正交检波介绍:

Figure10 图片来自《用于低场磁共振成像的直接射频采样数字接收机》

具体的理论可以看信号与系统等书籍,这里先给出MATLAB的仿真代码:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

R = 2;

M = 10;

N = 1;

 

sN = 5120;             %sample number per fft

fftN = 10240;        %fft number

sF1M = 1e6;            %sample qrequence

sF5M = 5e6;            %sample qrequence

fc = 1.11e6;         

                       %R=2,N=1,M=10测试环境

                       %混频1 载波中频 1.4625e6(fc-fs<0.5fs) :左上图两根蓝线就是用5M去采样获得的FFT,红线就是用1M去采样获得的FFT

                       %右边的红线0.4625就是右边的蓝线1.4625频移1Mfs)得到,左边的红线-0.4625是由左边的蓝线-1.4625频移1M得到

                       %实际上在左边的红线的左边,还有一根很被隐藏了的红线-0.5375,以及右边有一根红线0.5375。因为不落在±0.5之内

                       %但是在用NCO进行频谱搬移后,会发现这根线-0.5375的线移动到±0.075处,也就是移动到了实际有效带宽范围,如左下图所示

                       %这个时候看右下图的检波信号,会发现有大量的高频谐波在上面,正是这个原因!1.5>fc>1.375会有这个问题

                       

                       %混频2

                       %载波中频为1.251.375之间时,虽然上述干扰谱线在经过NCO移频后已经在±0.5之外了,但是如果R大于等于2,就会有进一步频谱幅值

                       %但是一般这时的干扰谱线已经经过充分的滤波,所以即使混叠了,影响也不大!

                       

                       %实际上都需要结合中频带宽,中频中心频率,采样频率,降采样率共同来看是否有混叠

 

 

fa = [0.0022e6 0.0032e6 0.0042e6 0.0052e6];

fp = 0.0013e6;

fnco =rem(fc,sF1M);

 

t1M=0:1/sF1M:(sN-1)/sF1M;

t5M=0:1/sF5M:(sN-1)/sF5M;

 

 

an1M =cos(2*pi*fa(1)*t1M)+sin(2*pi*fa(2)*t1M)+cos(2*pi*fa(3)*t1M)+sin(2*pi*fa(4)*t1M);

an5M =cos(2*pi*fa(1)*t5M)+sin(2*pi*fa(2)*t5M)+cos(2*pi*fa(3)*t5M)+sin(2*pi*fa(4)*t5M);

 

 

 

pn1M = pi*cos(2*pi*fp*t1M);

pn5M = pi*cos(2*pi*fp*t5M);

 

xn1M = an1M .* sin(2*pi*fc*t1M + pn1M);

xn5M = an5M .* sin(2*pi*fc*t5M + pn5M);

x1MF = fft(xn1M,fftN)/sN;

x5MF = fft(xn5M,fftN)/sN;

 

ncoI1M = cos(2*pi*fnco*t1M);

ncoQ1M = sin(2*pi*fnco*t1M);

ncoI1MF = fft(ncoI1M,fftN)/sN;

ncoQ1MF = fft(ncoQ1M,fftN)/sN;

 

 

sIn1M = xn1M .* ncoI1M;

sQn1M = xn1M .* ncoQ1M;

sIn1MF = fft(sIn1M,fftN)/sN;

sQn1MF = fft(sQn1M,fftN)/sN;

 

sIcic1RM = CIC_Simulat(R,M,N,sIn1M);

sQcic1RM = CIC_Simulat(R,M,N,sQn1M);

sIcic1RMF = fft(sIcic1RM,fftN)/sN;

sQcic1RMF = fft(sQcic1RM,fftN)/sN;

 

 

sn = sIcic1RM + i * sQcic1RM;

sMag = abs(sn);

 

 

%理论CIC的冲激响应

z=tf('z');

h3Theory = ((1-z^(-M*R))/(1-z^(-1)))^N;

h3nTheory = impulse(h3Theory)/((R*M)^(N));

%实际CIC的冲激响应

DeltaXn = [1 zeros(1,length(h3nTheory)-1)];

%DeltaXn = ones(1,length(h3nTheory));

hnReal = CIC_Simulat(R,M,N,DeltaXn);

hRealF = fft(hnReal,fftN);

subplot(2,2,1);

 

 

 

hold on;

plot((((-fftN/2):(fftN/2-1))/fftN)*(sF1M),abs(fftshift(x1MF)),'R-');

plot((((-fftN/2):(fftN/2-1))/fftN)*(sF5M),abs(fftshift(x5MF)),'B--');

xlabel('Frequence') ;

ylabel('Amplitude') ;

title('Real(Blue) vs Sample(Read) Magnitude');

hold off;

 

subplot(2,2,2)

hold on;

plot((((-fftN/2):(fftN/2-1))/fftN)*(sF1M),abs(fftshift(x1MF)),'R--');

plot((((-fftN/2):(fftN/2-1))/fftN)*(sF1M),abs(fftshift(ncoI1MF)),'G--');

plot((((-fftN/2):(fftN/2-1))/fftN)*(sF1M),abs(fftshift(sIn1MF)),'B--');

plot((((-fftN/2):(fftN/2-1))/fftN)*(sF1M/R),abs(fftshift(sIcic1RMF)),'k-');

plot((((-fftN/2):(fftN/2-1))/fftN)*(sF1M/R),abs(fftshift(hRealF)),'y-');

xlabel('Frequence') ;

ylabel('Amplitude') ;

title('Sample(Red) vs NCOI(Green) vs SI(Blue) vsSICIC(Black)Magnitude');

hold off;

 

subplot(2,2,3)

hold on;

plot((((-fftN/2):(fftN/2-1))/fftN)*(sF1M),abs(fftshift(x1MF)),'R--');

plot((((-fftN/2):(fftN/2-1))/fftN)*(sF1M), abs(fftshift(ncoQ1MF)),'G--');

plot((((-fftN/2):(fftN/2-1))/fftN)*(sF1M),abs(fftshift(sQn1MF)),'B--');

plot((((-fftN/2):(fftN/2-1))/fftN)*(sF1M/R),abs(fftshift(sQcic1RMF)),'k-');

plot((((-fftN/2):(fftN/2-1))/fftN)*(sF1M/R),abs(fftshift(hRealF)),'y-');

xlabel('Frequence') ;

ylabel('Amplitude') ;

title('Sample(Red) vs NCOQ(Green) vs SQ(Blue) vsSQCIC(Black) Magnitude');

hold off;

 

subplot(2,2,4)

hold on;

plot(((0:(sN-1))/sF1M),xn1M,'R-');

plot(((0:(sN-1))/sF5M),xn5M,'G-');

plot(((0:((sN/R)-1))/(sF1M/R)),sMag,'k--');

xlabel('Sample Time') ;

ylabel('Amplitude') ;

title('Real(Green) vs Sample(Red) vs |S|(Black)Magnitude');

hold off;

 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

将载波(中频)fc设置为1.11e6,这个时候我们用两种采样率去采集这个波形,得到的图案是:

Figure11 红线是1M采样率采样后所做的FFT,蓝线是5M采样率的FFT

可以看到,用5MHz进行采样时能够获得正确的频谱,而用1MHz进行采样时,获得的就是经过复制后的频谱,其中原来蓝线1.11M处的跑到了0.11M(红线),而原来蓝线-1.11M的跑到了-0.11M。这是一个典型的欠采样,也就是用低采样率去采集中频信号,然后利用频谱的复制,得到可操作的频谱。

这时再用NCO生成一个余弦和正弦分别乘以ADC后的数据,可以得到如下SI和SQ频谱:

Figure12 SI:将ADC的数据(红)乘以余弦(绿)得到SI(蓝),同时经过CIC滤波器(幅频特性黄线)后变成SICIC(黑)

Figure13 将ADC的数据(红)乘以余弦(绿)得到SQ(蓝),同时经过CIC滤波器(幅频特性黄线)后变成SQCIC(黑)

通过上面两张图,可以看到ADC乘以NCO信号后,将红线分别挪到了蓝线处,其中一处蓝线在2.2M,另一处在0M(蓝线被黑线覆盖了)。然后经过CIC滤波器后进行滤波,将2.2M处的高次谐波滤掉,就得到了干净的SICIC或者SQCIC。

将SQCIC和SICIC的合并:

sn = sIcic1RM + i * sQcic1RM;

sMag = abs(sn);

最终得到了检波信号的时间域信息,如下图:

Figure 14 绿线是5M采样,红线是1M采样,黑色虚线是检波信号(代表包络,有延时)

Figure 15 放大后:绿线是5M采样,红线是1M采样,黑色虚线是检波信号(代表包络,有延时)

可以看到这种方式确实可以实现检波;

接下来分析一下特殊情况:

%R=2,N=1,M=10测试环境

混频1 载波中频 1.4625e6(fc-fs<0.5fs) :左上图两根蓝线就是用5M去采样获得的FFT,红线就是用1M去采样获得的FFT,右边的红线0.4625就是右边的蓝线1.4625频移1M(fs)得到,左边的红线-0.4625是由左边的蓝线-1.4625频移1M得到实际上在左边的红线的左边,还有一根很被隐藏了的红线-0.5375,以及右边有一根红线0.5375。因为不落在±0.5之内但是在用NCO进行频谱搬移后,会发现这根线-0.5375的线移动到±0.075处,也就是移动到了实际有效带宽范围,如左下图所示。这个时候看右下图的检波信号,会发现有大量的高频谐波在上面,正是这个原因!1.5>fc>1.375会有这个问题。

Figure16 这个图看不出异常

Figure17 问题来了

Figure 18 放大了,发现有谐波混叠进来了,而且恰好落在了旁瓣里,没有滤干净

 

下图可以看到,检波信号里面确实混杂了很多高频谐波

Figure 19

2015-10-18 17:13:50 wwwssshhh2014 阅读数 2131
  • 多角度带你编写更规范的黑盒测试用例

    讲解方式 通过类比生活中的例子,轻松理解测试用例的设计方法。课程内容条理清晰,目标明确,由浅入深,环环相扣。重点部分进行额外梳理和总结,更易理解和吸收。 课程亮点 1,测试用例的要素讲解,让测试用例的编写更加规范 2、多种测试用例方法的学习,让用例设计更加全面。测试用例的设计方法:等价类、边界值、判定表、因果图、状态迁移图、场景法、正交实验法、错误推测法 3,多角度的案例实践,以理解各种方法的应用 课程内容 1、测试用例的定义和组成要素 2、测试用例的设计方法:等价类、边界值、判定表、因果图、状态迁移图、场景法、正交实验法、错误推测法 3:每种设计方法对应的案例讲解 适用人群 1、对软件测试感兴趣的在校生及应届生。 2、希望转行软件测试的在职人员。 3、希望巩固软件测试设计方法的测试同行。 4、对软件测试感兴趣的其他听众。

    589 人正在学习 去看看 传智
正交镜像滤波器组(QMF)是进行子带信号分解的一种相当普遍的方法。一般设计的QMF目标是压缩对单独一个子带的带宽需求,使得信息可以借助于多个物理上带限的信道流过滤波器组。两通道QMF系统的基本结构如图1所示,包括两个输人-输出路径,每个路径的带宽需求是原始带宽指标的一半。图1中顶部路径表现为低通滤波器,而底部路径为高通滤波器。沿顶部和底部路径传播的信号在抽取后可以用式(1)表示。可以看到信号x。[k](即X。[z])和x1[k](即X1[k])在滤波后被2倍抽取。进人抽取器的信号在z域中可分别表示为Ho(z)X(z)和H1(z)X(z)。用式(1)表示离开抽取器的信号,由M=2可知
2017-05-14 21:37:30 kaixinshier 阅读数 5172
  • 多角度带你编写更规范的黑盒测试用例

    讲解方式 通过类比生活中的例子,轻松理解测试用例的设计方法。课程内容条理清晰,目标明确,由浅入深,环环相扣。重点部分进行额外梳理和总结,更易理解和吸收。 课程亮点 1,测试用例的要素讲解,让测试用例的编写更加规范 2、多种测试用例方法的学习,让用例设计更加全面。测试用例的设计方法:等价类、边界值、判定表、因果图、状态迁移图、场景法、正交实验法、错误推测法 3,多角度的案例实践,以理解各种方法的应用 课程内容 1、测试用例的定义和组成要素 2、测试用例的设计方法:等价类、边界值、判定表、因果图、状态迁移图、场景法、正交实验法、错误推测法 3:每种设计方法对应的案例讲解 适用人群 1、对软件测试感兴趣的在校生及应届生。 2、希望转行软件测试的在职人员。 3、希望巩固软件测试设计方法的测试同行。 4、对软件测试感兴趣的其他听众。

    589 人正在学习 去看看 传智

本文简单介绍,在差分方程已知或滤波器框图给出的情况下,使用C语言实现滤波器的方法。

一. 对一个p阶FIR滤波器(无反馈):

差分方程:

这里写图片描述

滤波器框图:

这里写图片描述

float fir_filt(float x, const float *b, float *s, int p)
{
    y = b[0] * x;   //对输出y赋初值

    for(int i = 0; i <= p; i++)   //输出
        y += b[i+1] * s[i];

    for(int i = p; i > 0; i++)   //更新寄存器
        s[i] = s[i-1];

    s[0] = x;

    return y;
}

二. 对于一个IIR滤波器:

差分方程:

这里写图片描述

滤波器框图:

这里写图片描述

float IIR_filt(float x, const float *c, float *s)
{
    float y = c[0] * x + s[0];   //对y赋初值(输出)

    s[0] = s[1] + c[1]*x - c[3] * y;    //更新

    s[1] = c[2] * x - c[4] * y;

    return y;
}   

三. MATLAB中,Filter函数的C语言实现

在MATLAB中,有这样一个函数dsp.ColoredNoise,从名字看出,该函数用来生成不同颜色的噪声,使用方法:

H = dsp.ColoredNoise returns a colored noise generator, H, with default settings. Calling step with the default property settings generates a pink noise signal.

系数取不同值,生成不同色噪:

An InverseFrequencyPower value of 1 generates a pink noise. This is the default value.
An InverseFrequencyPower value of 2 generates a Brownian process.
An InverseFrequencyPower value of 0 generates a white noise process with a flat PSD.
An InverseFrequencyPower value of -1 generates a blue noise process.
An InverseFrequencyPower value of -2 generates a violet (purple) noise process.

当value = 1,生成粉噪,根据粉噪生成的原理,将白噪声通过一个全极点滤波器,即可生成粉噪,这里我们讨论如何设计这个IIR全极点(All-poles)滤波器:

差分方程:

这里写图片描述

滤波器框图:

这里写图片描述

float all-pole(float *x, float *y, float *s, const float *a, int n, int p)
{
y = x - a[0] * s[0];   //对y赋初值

for(int i = 0; i < p; i++)   //输出
    y -= a[i+1] * s[i+1];

for(int i = p; i > 0; i--)   //更新
    s[i] = s[i-1];

s[0] = y;

return y;
}
2015-01-20 22:03:00 dayenglish 阅读数 848
  • 多角度带你编写更规范的黑盒测试用例

    讲解方式 通过类比生活中的例子,轻松理解测试用例的设计方法。课程内容条理清晰,目标明确,由浅入深,环环相扣。重点部分进行额外梳理和总结,更易理解和吸收。 课程亮点 1,测试用例的要素讲解,让测试用例的编写更加规范 2、多种测试用例方法的学习,让用例设计更加全面。测试用例的设计方法:等价类、边界值、判定表、因果图、状态迁移图、场景法、正交实验法、错误推测法 3,多角度的案例实践,以理解各种方法的应用 课程内容 1、测试用例的定义和组成要素 2、测试用例的设计方法:等价类、边界值、判定表、因果图、状态迁移图、场景法、正交实验法、错误推测法 3:每种设计方法对应的案例讲解 适用人群 1、对软件测试感兴趣的在校生及应届生。 2、希望转行软件测试的在职人员。 3、希望巩固软件测试设计方法的测试同行。 4、对软件测试感兴趣的其他听众。

    589 人正在学习 去看看 传智

如果一个滤波器组是正交滤波器组,则应该满足下列条件:

上面提到的三个条件中的第二个就是之前高频和低频滤波器组的要求,通过这一条件可以推导出另外两个公式。每一个H(z)都可以分为奇数部分和偶数部分,通过这种分解建立第二个条件和第一个条件的关联,也就证明得到第一个条件成立。根据上一篇博客中的矩阵系数可以得到,由于矩阵系数是一个正交矩阵,因此整个矩阵系数只有在与自己相交的时候得到的才不为0而等于1,因此只有当k等于0时,才等于1,也就是上面的第三个条件。

左边的这个引理实际上是根据对滤波器组的解得出的结果,当滤波器组正交时,则不会出现除0之外的欧数次的多项式系数。则令P(z)=|H(z)|2,则P(z)+P(-z)=2。同时,P(z)满足:

p0=1,其他的偶数系数则等于0;P(z)则是一个实数,对称,非负的半带滤波器。通过上面的公式解出滤波器组相关的系数。得到的则是一个满足分解和重构的滤波器组,也就可以利用这些滤波器组得到小波。

QMF滤波器组 理论

阅读数 127

没有更多推荐了,返回首页