DSP

重叠保留法、重叠相加法的MATLAB代码

2019-07-13 20:49发布

%重叠保留法
clc;close all;clear all;
xk=[1 2 3 4 5];%子序列
h=[1 2 1];%短序列
N=5;M=3;%长度
for k=1:6
x((k-1)N+1:kN)=xk;%长序列
end
Hk=fft(h,N+M-1);%短序列的DFT
y=zeros(1,M+N*6-1);%规定线性卷积序列的总长度
overlap=zeros(1,M-1);
y(1:N+M-1)=ifft(fft([overlap x(1:N)],N+M-1).*Hk);
y(1:N)=y(M:N+M-1);%舍弃前M-1点
for k=2:6
overlap=x((k-1)*N-M+2:(k-1)*N);%向前重复取的数据
yk=ifft(fft([overlap x((k-1)N+1:kN)],N+M-1).*Hk);
y((k-1)N+1:kN)=yk(M:N+M-1);%舍弃前M-1点
end
k=k+1;
overlap=x((k-1)*N-M+2:(k-1)*N);
yk=ifft(fft([overlap zeros(1,N)],N+M-1).*Hk);
y((k-1)N+1:kN)=yk(M:N+M-1);%舍弃前M-1点
figure;
stem(0:length(y)-1,y,‘bp’,‘linewidth’,1);
xlabel(‘n’,‘fontsize’,15);ylabel(‘y(n)’,‘fontsize’,15); %重叠相加法
clc;close all;clear all;
xk=[1 2 3 4 5];%子序列
h=[1 2 1];%短序列
N=5;M=3;%长度
for k=1:6
x((k-1)N+1:kN)=xk;%长序列
end
Hk=fft(h,N+M-1);
y=zeros(1,M+N*6-1);%规定线性卷积序列的总长度
y(1:N+M-1)=ifft(fft(x(1:N),N+M-1).*Hk);%求前(N+M-1)点的线性卷积
for k=2:6
yk=ifft(fft(x((k-1)N+1:kN),N+M-1).*Hk);
y((k-1)*N+1:(k-1)*N+M-1)=yk(1:M-1)+y((k-1)*N+1:(k-1)*N+M-1);%重叠相加
y((k-1)N+M:kN+M-1)=yk(M:N+M-1);
end
figure;
stem(0:length(y)-1,y,‘bp’,‘linewidth’,1);
xlabel(‘n’,‘fontsize’,15);ylabel(‘y(n)’,‘fontsize’,15);