实验目的与意义
- 学习相关运算,了解互相关与卷积运算的异同点,学会计算信号的互相关和自相关。
- 学习声波的回声与混响,了解其发生的原理,掌握用matlab对音频增加混响效果的方法。
- 学习声波在室内传播的系统模型,学会对系统参数的测量与估计。
实验过程
- 导入音频变量advice并截取单声道。 [advice, fs] = audioread('exp.wav');
advice = advice(:,1);
- 对音频增加混响效果。
- 使用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);
- 添加背景音乐 [bgm] = audioread('exp_BGM.wav');
advice = [echoed_advice, bgm(1:length(echoed_advice),1).*0.3];
sound(advice, fs);