回声消除系统设计

设计详细说明:

设计系统在0.2s,0.4s产生回声

image-20220411231220251
  • Matlab代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    clear,clc,close all;  

    % 记录数据
    fs=8000; % 声音采样频率
    duration=3; % 记录时间
    %记录输入声音
    myrecording = audiorecorder;
    fprintf('Speaking for %d seconds. \\n',duration);
    disp('Start speaking.')
    recordblocking(myrecording, duration);
    disp('End of Recording.');
    %获得输入信息
    x = getaudiodata(myrecording);
    %存储录音信息
    audiowrite('luyin.wav',x,fs);

    %定义冲激响应函数
    h=zeros(1,5000);
    h(1)=4/5;h(0.2\*fs)=0.6;h(0.4\*fs)=0.4;
    % 卷积计算
    y=conv(x,h);
    k=audioplayer(y,fs);
    play(k); % 播放回音
    %存储回音
    audiowrite('huiyin.wav',y,fs);
    %绘图
    subplot(311)
    plot (x) ;%绘制原始音
    title('原始音');
    subplot(312)
    plot (y);%绘制回音
    title('回音');
    %恢复计算
    huifu=filter(1, h, y );%回音卷积1/h恢复初始
    subplot(313)
    plot(huifu);%绘制恢复音
    pause(5);
    sound(huifu)%播放恢复音
    audiowrite('huifu.wav',huifu,fs);%存储恢复音

    title(‘恢复音’)

    输出结果:

    很容易看出原始音与恢复音的波形相同