Matlab混响器——无限个回声混响器

文章目录

  • 一、设计步骤
  • 二、完整代码
  • 最后


一、设计步骤

无限个回声滤波器的系统函数:

H(z)=1+a×z(-R), |a|<1

设计步骤:
(1)选择录制一段语音信号作为分析对象。
(2)对选择的语音进行频谱分析。
(3)在时域用数字信号处理方法对信号加入无限回声混响,再分析其频谱。
(4)并与原始信号进行对比。

二、完整代码

plot函数代码如下:
clear
clc
[x,fs]=audioread('2.wav');
x=x(:,1);
t=(0:length(x)-1)/fs;%变换得到播放时间
h=waitbar(0,'正在播放原始语音,请勿关闭!'); 
sound(x,fs);
pause(max(t))
waitbar(1,h,'播放结束');
delete(h); 
xf=abs(fftshift(fft(x)));
figure(1)
subplot(211)
plot(t,x)
title('原始语音信号')
subplot(212)
plot(xf);
title('原始语音信号频谱')
z1=[zeros(10000,1);x];           %对信号进行延时10000个采样点
Z1=abs(fftshift(fft(z1)));
x1=[x;zeros(10000,1)];                 %使语音信号与延时后信号同等长度
y1=x1+z1;                             %信号的混响
a=0.05;                               %a取小于等于1
Bz=[0,0,0,0,0,0,0,0,0,0,1];            %分子的系数
Az=[1,0,0,0,0,0,0,0,0,0,-a];           %分母的系数
yy1=filter(Bz,Az,y1);                  %滤波器进行滤波
YY1=abs(fftshift(fft(yy1)));           %经无限回声滤波器后的信号做FFT变换
t1=(0:length(yy1)-1)/fs;%变换得到播放时间
h=waitbar(0,'正在播放混响语音,请勿关闭!'); 
sound(yy1,fs);
pause(max(t1))
waitbar(1,h,'播放结束');
delete( h);
figure(2); 
subplot(2,1,1);plot(yy1); title('无限个回声滤波器时域图');       %无限回声滤波器时域波形
subplot(2,1,2);plot(YY1); title('无限个回声滤波器频谱图 ');    %无限回声滤波器频谱图

最后

如果你想要进一步了解更多的相关知识,可以关注下面公众号联系~会不定期发布相关设计内容包括但不限于如下内容:信号处理、通信仿真、算法设计、matlab appdesigner,gui设计、simulink仿真…希望能帮到你!
Matlab混响器——无限个回声混响器_第1张图片

你可能感兴趣的:(信号处理,matlab,信号处理)