1. clear
    2. clc
    3. N=512;%分段的长度,也就是做fft的长度
    4. 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)
    5. Frequence0 = 150; %单位:Hz
    6. Frequence1 = 200; %单位:Hz
    7. Frequence2 = 2e3; %单位:Hz
    8. SampleFre = 8e3; %单位:Hz
    9. SampleLen = SampleFre; %采样点数
    10. %-------------------产生三路信号
    11. t = 0:1/SampleLen:1/SampleFre*(SampleLen-1);
    12. SignalData0 = sin(2*pi*Frequence0*t);
    13. SignalData0 = SignalData0(1:4096);
    14. SignalData1 = sin(2*pi*Frequence1*t);
    15. SignalData1 = SignalData1(1:4096);
    16. SignalData2 = sin(2*pi*Frequence2*t);
    17. SignalData2 = SignalData2(1:4096);
    18. x = SignalData0+SignalData1+SignalData2;
    19. Lenx=length(x);
    20. M=length(h);
    21. M1=M-1; %重叠部分的长度
    22. L=N-M1; %不重叠部分的长度
    23. h=fft(h,N);
    24. K=floor((Lenx+M1-1)/L)+1; %分的段数
    25. p=(K)*L-Lenx; %最后一段结尾补零数
    26. x1=[zeros(1,M1),x,zeros(1,p)]; %总的大矩阵
    27. Y=zeros(K,N); %保存结果矩阵初始化
    28. for k=0:K-1
    29. xk=fft(x1(k*L+1:k*L+N));
    30. Y(k+1,:)=(ifft(xk.*h));
    31. end
    32. Z=reshape(Y(:,M:N)',1,[]); %将保存结果矩阵转成一个行向量
    33. figure;plot(t(1:350),Z(1:350))
    34. ylim([-1.5, 1.5]);
    35. xlim([-0.001, 0.05]);
    36. title('高通滤波之后的波形')
    37. sound(x,SampleFre);

    image.png