clear
clc
N=512;%分段的长度,也就是做fft的长度
h=[-0.00491000678664519,-0.0110940581309966,0.00410194747948791,0.0123959008767979,0.0260846944086577,0.0280068857178369,0.0117031929574722,-0.0282213909190478,-0.0862193226866780,-0.148431590883831,-0.196291852743501,0.785720061596288,-0.196291852743501,-0.148431590883831,-0.0862193226866780,-0.0282213909190478,0.0117031929574722,0.0280068857178369,0.0260846944086577,0.0123959008767979,0.00410194747948791,-0.0110940581309966,-0.00491000678664519];%系统冲击响应h(n)
Frequence0 = 150; %单位:Hz
Frequence1 = 200; %单位:Hz
Frequence2 = 2e3; %单位:Hz
SampleFre = 8e3; %单位:Hz
SampleLen = SampleFre; %采样点数
%-------------------产生三路信号
t = 0:1/SampleLen:1/SampleFre*(SampleLen-1);
SignalData0 = sin(2*pi*Frequence0*t);
SignalData0 = SignalData0(1:4096);
SignalData1 = sin(2*pi*Frequence1*t);
SignalData1 = SignalData1(1:4096);
SignalData2 = sin(2*pi*Frequence2*t);
SignalData2 = SignalData2(1:4096);
x = SignalData0+SignalData1+SignalData2;
Lenx=length(x);
M=length(h);
M1=M-1; %重叠部分的长度
L=N-M1; %不重叠部分的长度
h=fft(h,N);
K=floor((Lenx+M1-1)/L)+1; %分的段数
p=(K)*L-Lenx; %最后一段结尾补零数
x1=[zeros(1,M1),x,zeros(1,p)]; %总的大矩阵
Y=zeros(K,N); %保存结果矩阵初始化
for k=0:K-1
xk=fft(x1(k*L+1:k*L+N));
Y(k+1,:)=(ifft(xk.*h));
end
Z=reshape(Y(:,M:N)',1,[]); %将保存结果矩阵转成一个行向量
figure;plot(t(1:350),Z(1:350))
ylim([-1.5, 1.5]);
xlim([-0.001, 0.05]);
title('高通滤波之后的波形')
sound(x,SampleFre);
