两个有限长的序列,当一个序列的长度远大于另外一个序列的时候,如果仍采用常规的处理方法,效率会很低,所以引入了重叠相加法和重叠保留法。下面我们就利用MATLAB来实现这两种方法。
在下面的代码中,我使用了一个新的函数:tic和toc
其中tic是标记起始位置,toc是返回从tic到toc运行的时间,这个函数在对程序的运行时间的测量中很有用处。
下面进入代码阶段
重叠相加法:
MATLAB代码如下:
%重叠相加法
clear
clc
%N为DFT的长度,Length为输入序列的长度,L为分块的长度,M为hn的长度
N=16;
Length=2000;
L=10;
M=7;
%FIR滤波器的冲激响应设为hn
hn=[4 5 2 6 3 8 1];
Hk=fft(hn,N);
%输入序列设置为xn
n=0:Length-1;
xn=sin(n*0.5)+0.8*cos(0.3*n);
%下面的Length/L是特意设置成整数的,这样可以免去再补零的麻烦
%设置变量s为循环的次数
%设置变量s1用来表示数据块的始末位置
s1=L+1;
%由于第一次不需要进行相加操作,所以将第一次操作单独拿出来</