华工信工实验参考——《DSP拓展实验:音乐信号处理》

实验题目:音乐信号处理

一、实验目的

1、 了解回声的产生和梳妆滤波器;

  1.  混音效果的原理和均衡器的设计;

二、实验要求

(1)设计函数实现一段语音或音乐的回声产生;

(2)设计均衡器,使得得不同频率的混合音频信号,通过一个均衡器后,增强或削减某些频率区域,以便修正低频和高频信号之间的关系;

三、实验1:设计函数实现一段语音或音乐的回声产生

3.1 实现回声产生的分析

        回声的产生在时域上实际上就是让信号周期性出现,并且带有衰减。[1]我们设输入信号为x[n],输出信号为y[n],则我们可以用差分方程来进行数学建模:(word公式复制过来乱码,我就直接截图了)

      我们可以发现这是IIR中的梳状滤波器。

      梳状滤波器它是由许多按一定频率间隔相同排列的通带和阻带,只让某些特定频率范围的信号通过。通过查阅文献我们可知梳状滤波器常用于衰减谐波尖峰间的频率分量,滤除周期信号的噪声。同时它的时域特性证明它可模拟回响。[2]

%CODE
Bz=1;            %分子的系数
Az=[1,0,0,0,0,0,0,0,0,0,-0.5];           %分母的系数
delta=[1,zeros(1,255)];
yy2=filter(Bz,Az,delta);%滤波器进行滤波
t=(0:length(yy2)-1);
figure(3)
plot(t,yy2);
figure(4);
freqz(yy2);

 

图1 梳状滤波器幅频相频特性

我们输入【1,2,3,2,1】的离散序列,观察滤波后的输出,代码如下:

%CODE
x=[1,2,3,2,1 zeros(1,251)];
figure(1);
n=[0:1:255];
stem(n,x)
yy1=filter(Bz,Az,x);%滤波器进行滤波
figure(2);
stem(n,yy1)

 

图2 梳状滤波器测试的输入信号

 

图3 梳状滤波后的输出信号 

通过实验测试我们发现IIR梳状滤波器确实有模拟回响的功能。

      在音乐信号处理中,我们会在混响时用到人工生成回声,在实际应用中一般不需要用到像梳状滤波器产生的无穷长的拖尾。因此我们可以根据实际需要将建模的差分方程进行调整,将无穷项的求和转换为有限项,得到H(z)

      此时滤波器为FIR滤波器。因此我们接下来将用两种IIR梳状滤波器和FIR滤波器分别实现回声生成。

.2 FIR滤波器实现回声生成

3.2.1 参数设置

      我们用FIR滤波器H1(z)来实现回声生成,我们产生一次回声,因此

y[n]=x[n]+ax[n-N]

我们将回声设置为有一半的幅度衰减,并且有一个时延,则

y[n]=x[n]+0.5*x[n-1]

则滤波器参数设置如下

H1(z)=1+0.5*z-1(是-1次幂)

            我们根据设置的参数用matlab实现,代码如下:

3.2.2 源代码

 

%CODE
clc
clear
[x,fs]=audioread('1,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+0.5*z1;                             %信号的混响
Y1=abs(fftshift(fft(y1)));           
t1=(0:length(y1)-1)/fs;%变换得到播放时间
h=waitbar(0,'正在播放混响语音,请勿关闭!'); 
sound(y1,fs);
pause(max(t1))
waitbar(1,h,'播放结束');
delete( h);
figure(2); 
subplot(2,1,1);plot(y1); title('有限个回声滤波器时域图');       %有限回声滤波器时域波形
subplot(2,1,2);plot(Y1); title('有限个回声滤波器频谱图 ');    %有限回声滤波器频谱图

3.2.3 结果与分析

实验结果的音频在报告中无法有效展示,在此分别给出输入信号、输出信号的时域与频域的图示。这里输入信号为语音“1,2”。

图4 输入信号时域与频域图示 

图5 输出信号时域与频域图示

      我们可以很清晰地看到,经过该FIR滤波器后,在原有信号后加上了清晰的重复,并且有一半的衰减,实验结果符合实验预期。

 3.3.2 源代码

 

%CODE
clear; 
clc;
[x,fs]=audioread('1,2.wav');
x1=x(:,1);
t=(0:length(x)-1)/fs;%变换得到播放时间
figure(1)
plot(t,x1);
h=waitbar(0,'正在播放原始语音,请勿关闭!'); 
sound(x1,fs);
pause(max(t))
waitbar(1,h,'播放结束');
delete(h); 
xf=abs(fftshift(fft(x1)));
figure(2)
subplot(211)
plot(t,x1)
title('原始语音信号')
subplot(212)
plot(xf);
title('原始语音信号频谱')
Bz=1;            %分子的系数
Az=[1,zeros(1,6499),-0.8];           %分母的系数
yy1=filter(Bz,Az,x1);                  %滤波器进行滤波
figure(3);
freqz(yy1);
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(4); 
subplot(2,1,1);plot(yy1); title('无限个回声滤波器时域图');       %无限回声滤波器时域波形
subplot(2,1,2);plot(YY1); title('无限个回声滤波器频谱图 ');    %无限回声滤波器频谱图

3.3.3 结果与分析

      我们输入仍用录制的“1,2”,如下图

图6 输入信号时域与频域图示

经过IIR梳状滤波器后得到的输出的时域与频域图示如下图

图7 IIR梳状滤波器输出时域与频域图示

      我们可以清晰地从滤波器输出的图像中看到,时域有了明显的多次回响且不断衰减,频率基本不变,频谱图的幅度变大(因为同样的分量叠加),符合实验预期。

 四、实验2:设计一个均衡器

        这一部分我是参考的别人的,我就不放上来了。

        有需要全部源文件的可以邮箱1902946954@qq.com。

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值