MATLAB实验——相关与混响

33

实验目的与意义

  1. 学习相关运算,了解互相关与卷积运算的异同点,学会计算信号的互相关和自相关。
  2. 学习声波的回声与混响,了解其发生的原理,掌握用matlab对音频增加混响效果的方法。
  3. 学习声波在室内传播的系统模型,学会对系统参数的测量与估计。

实验过程

  1. 导入音频变量advice并截取单声道。 [advice, fs] = audioread('exp.wav');
    advice = advice(:,1);
  2. 对音频增加混响效果。
  • 使用zeros函数生成一个1×fs大小的零矩阵echoed_pattern(可以看作一个离散形式的单位脉冲函数),并令其第一个元素为1。定义echoed_advice变量为advice和echoed_pattern的卷积结果。
  • 当echoed_pattern只有原点处有单位脉冲时,advice与它的卷积结果等于advice本身(即直射声波),画出echoed_pattern的函数图和直射声波的时域图。
  • 当在echoed_pattern上附加一个延迟0.1秒,幅值为0.7倍的延迟衰减分量时,advice与它的卷积结果等于混响声波,画出echoed_pattern的函数图和混响声波的时域图。 %直射声波
    echoed_pattern = zeros(1,fs);
    echoed_pattern(1) = 1;
    echoed_advice = conv(advice, echoed_pattern);
    sound(echoed_advice, fs);
    figure('Name','直射声波');
    subplot(211); stem((0:fs-1)/fs, echoed_pattern);
    subplot(212); plot((1:length(echoed_advice))/fs, echoed_advice); %混响声波
    echoed_pattern(0.1*fs+1) = 0.7;
    echoed_advice = conv(advice, echoed_pattern);
    sound(echoed_advice, fs);
    figure('Name','混响声波');
    subplot(211); stem((0:fs-1)/fs, echoed_pattern);
    subplot(212); plot((1:length(echoed_advice))/fs, echoed_advice);
  1. 添加背景音乐 [bgm] = audioread('exp_BGM.wav');
    advice = [echoed_advice, bgm(1:length(echoed_advice),1).*0.3];
    sound(advice, fs);