0
点赞
收藏
分享

微信扫一扫

课设 数字音效处理器

爱情锦囊 2022-01-27 阅读 47

1.设计目的
动手制作一个有趣的音效处理系统,看看能不能完成声音的逐渐放大和逐渐衰减、看看能不能让自己的声音发生一些改变(变得尖声尖气或粗声粗气)、看看改变声音播放速度有什么方法等。通过本次课程设计,加深对滤波器设计这一理论的理解。
2.设计要求
1.熟练掌握DFT谱分析方法;
2.熟练掌握IIR和FIR滤波器的设计方法;
3.熟练掌握信号通过线性系统的分析方法;
4.熟悉掌握MATLAB数字信号处理工具的使用;
5.了解乐声处理的相关知识。
3.设计内容
3.1 语音信号的采集
利用Windows下的录音机或其他录音软件录制一段自己的话音,或者一段音乐,时间在5s 内,存为*.WAV 文件。然后在 Matlab 软件平台下,利用函数 wavread或 audioread 对语音信号进行采样,记住采样频率和采样点数。

[x,Fs]=audioread('E:\数字信号处理课程设计\titlttwo.wav'); 
% sound(x,Fs);
N=length(x);
n=(0:N-1);
X=fft(x); %傅里叶变换
f=n/N*Fs; %把点数转换成频率
figure(1);
subplot(2,1,1);
plot(n,x); %画出原声音信号
subplot(2,1,2);
plot(f,abs(X)); %画出原声音信号的幅度谱

3.2 设计数字滤波器
根据语音信号的频谱特点确定滤波器的设计指标;分别用低通、高通、带通、带阻滤波器对语音信号进行处理,可以选用 IIR 或 FIR,回放输出信号,画出时域波形和频谱,分析滤波前后的变化。在 MATLAB 中,函数 sound 可以对声音进行回放。其调用格式:sound(x,fs,bits)。
数字滤波器的参考设计参数:
低通滤波器的性能指标:fb=1000 Hz,fs=1200 Hz,As=100 dB,Ap=1 dB
高通滤波器的性能指标:fs=4800 Hz,fb=5000 Hz,As=100 dB,Ap=1 dB
带通滤波器性能指标:fb1=1200 Hz,fb2=3000 Hz,fs1=1000 Hz,fs2=3200 Hz,As=100 dB,Ap=1 dB。
本次我们选择了IIR滤波器(巴特沃斯滤波器、椭圆滤波器)和FIR滤波器(凯塞窗等)来对语音信号进行滤波,比较滤波后语音信号的清晰度和声调,选择合适的滤波器进行滤波。
3.2.1 低通滤波器
①IIR数字滤波器
设计巴特沃斯低通滤波器
function Hd1 = ditongFs = 8000;  % Sampling FrequencyFpass = 1000;        % Passband FrequencyFstop = 1200;        % Stopband FrequencyApass = 1;           % Passband Ripple (dB)Astop = 100;         % Stopband Attenuation (dB)match = 'stopband';  % Band to match exactly% Construct an FDESIGN object and call its BUTTER method.h  = fdesign.lowpass(Fpass, Fstop, Apass, Astop, Fs);Hd1 = design(h, 'butter', 'MatchExactly', match);
设计椭圆低通滤波器

fp1=1000;fs1=1200; %低通滤波器通带截止频率1000Hz和阻带截止频率1200Hz
wp1=2*fp1/fs; ws1=2*fs1/fs;%%计算滤波器边界频率(关于pi归一化)
rp=1;as=100;
[N1,wp1]=ellipord(wp1,ws1,rp,as); %计算滤波器的阶数和通带边界频率
[B,A]=ellip(N1,rp,as,wp1); %计算滤波器滤波器系统函数系数向量B和向量A
y1=filter(B,A,x); %对语音信号进行滤波
% 低通滤波器绘图部分%
figure(2);
freqz(B,A);

在这里插入图片描述
②FIR数字滤波器
设计凯塞窗低通滤波器
在这里插入图片描述
3.2.2 高通滤波器
①IIR数字滤波器
设计巴特沃斯高通滤波器

设计椭圆高通滤波器

fp2=2400;fs2=2500; %高通滤波器通带截止频率2400Hz和阻带截止频率2500Hz
wp2=2*fp2/fs; ws2=2*fs2/fs;%计算滤波器边界频率(关于pi归一化)
rp=1;as=100;
[N2,wp2]=ellipord(wp2,ws2,rp,as);
[B2,A2]=ellip(N2,rp,as,wp2,'high'); %计算高通滤波器系统函数系数
y2=filter(B2,A2,x); 
% 高通滤波器绘图部分%
figure(4);
freqz(B2,A2);

在这里插入图片描述
②FIR数字滤波器
凯塞窗设计高通滤波器

3.2.3 带通滤波器
①IIR数字滤波器
设计巴特沃斯带通滤波器

设计椭圆带通滤波器

fp3=[1200,3000];fs3=[1000,3200];  %带通滤波器
wp3=2*fp3/fs; ws3=2*fs3/fs;
rp=1;as=100;
[N3,wp3]=ellipord(wp3,ws3,rp,as); %计算椭圆带通模拟滤波器的阶数和通带边界频率
[B3,A3]=ellip(N3,rp,as,wp3); %计算带通滤波器模拟滤波器系统函数系数
y3=filter(B3,A3,x); %滤波器软件实现
% 带通滤波器绘图部分%
figure(6);
freqz(B3,A3);

在这里插入图片描述
②FIR数字滤波器
凯塞窗设计带通滤波器

3.3 实现慢录快放和快录慢放功能
语音变速不变调是指保持音调和语义不变,语速变快或变慢。也就是说,基频值几乎不变,对应于音调不变;整个时间过程被压缩或者扩展,声门周期的数目减小或者增加,即声道运动速率发生改变,语速也随之变化。从语音产生模型上看,即激励和系统保持与原始发音情况几乎相同的状态,但持续时间相比原来或长或短。
快慢放的原理就是在单位长的时间内播放比原声包含更多或更少的信息的语音序列。以2倍速率快放为例,就是将原来2倍单位时间内的语音序列在单位时间内播放完,这里的原理用的是在播放时增大采样间隔,那么在单位时间内采集到的点实际包含了从2长度序列采集到的信号(实际上这里就是一个语音序列的有损压缩),虽然这样做有信息丢失,但只要满足奈奎斯特采样定律,语音信号就不会出现失真,所以在一定条件下是可行的。
在播放语音序列时,更改采样频率即可。但是在作图必须对语音信号一步步处理。
以快放为例,快放时,如果快放倍数为2,那么原本10s长的信号,可以在5s内播放完,并且语音的音调会变高。

%快录慢放
w1=0.5;
% sound(x,w1*Fs);
%慢录快放
w2=2;
% sound(x,w2*Fs);

3.4 提高部分
3.4.1 倒放
B = flip(A) 返回的数组 B 具有与 A 相同的大小,但元素顺序已反转。B 中重新排序的维度取决于 A 的形状:
如果 A 为向量,flip(A) 将沿向量的长度方向反转元素顺序。
如果 A 为矩阵,flip(A) 将反转每列元素的顺序。
如果 A 为 N 维数组,flip(A) 将按 A 的大小值不等于 1 的首个维度上进行运算。

%音频倒放
[x,Fs]=audioread('E:\数字信号处理课程设计\titlttwo.wav'); 
x1=flip(x);
sound(x1,Fs); 

3.4.2 混音
声音在一个封闭的空间中到达听众时,包含几个部分:直达声、早期的反射和混响。早期的反射由几个空间上邻近的直达声的基本延迟和衰减组成,而混响则由密集的回声组成。上述多重回声滤波器不能提供自然声音混响。由其幅频特性可知,其幅度响应对于所有频率不是常数,收听效果不能令人满意。其次每秒回声数量太少会引起合成声的颤动,需要每秒约 1000 个回音才能生成没有颤动的反射声。

%%%%%%%%同一个信号混响
figure(6)
[y,Fs]=audioread('E:\数字信号处理课程设计\titlttwo.wav');
y=y(:,1);                               
%无限回声混响器
a=0.5;%a取小于等于1
R=5000;                   %滤波器阶数设置,其值越高,回声越明显
Bz=[zeros(0,R-1),1];
Az=[1,zeros(1,R-1),-a];
y4=filter(Bz,Az,y);
subplot(3,1,1);
plot(f,y4);
%多重回声混响器
N=5;
R=5000;
Bz1=[1,zeros(1,R-1),-0.5^N];
Az1=[1,zeros(1,R-1),-0.5];
y5=filter(Bz1,Az1,y);
subplot(3,1,2);
plot(f,y5);
%全通结构混响器
R=5000;
Bz2=[0,zeros(1,R-1),1];
Az2=[1,zeros(1,R-1),a];
y6=filter(Bz2,Az2,y);
subplot(3,1,3);
plot(f,y6);
%sound(y4);
%sound(y5);
%sound(y6);
%%%%%%%%两个不同声音信号混响
figure(7)
[x2,Fs]=audioread('E:\数字信号处理课程设计\di.wav'); 
m=max(size(x,1),size(x2,1));%确定最大行数
n=max(size(x,2),size(x2,2));%确定最大列数
xx1=zeros(m,n);
xx2=zeros(m,n);
xx1(1:size(x,1),1:size(x,2))=x; %扩展x
xx2(1:size(x2,1),1:size(x2,2))=x2; %扩展x2
c=1*xx1+50*xx2;
plot(f,c);
% sound(c);

3.4.3 回音
回声是原声延迟衰减后与原声叠加。声音信号在matlab中以矩阵的形式存储。

%%%%%%%%回音
z1=[zeros(10000,1);x];%声音延时
x1=[x;zeros(10000,1)];%使原声音长度与延时后相等
z=x1*0.8+z1;
figure(5);
plot(z);
% sound(z,Fs);

3.4.4 变声
在进行性别变声时,主要考虑基音周期、基频和共振峰频率的变化。

%女生变男声
[xmen,Fs]=audioread('E:\数字信号处理课程设计\titlttwo.wav'); 
Xmen=fft(xmen);
L=length(Xmen);
temp=Xmen;
N=100;
out=vertcat(0.1*temp(1:3*N),1.2*temp(1:L),0.1*temp(1:100*N));
Ymen=1*real(ifft(out));
% sound(Ymen);
Nmen=length(Ymen);
nmen=(0:Nmen-1);
T=1/Fs;
f=nmen/Nmen*Fs; %把点数转换成频率
subplot(2,2,1);
plot(nmen,Ymen); %画出变男声后声音信号
subplot(2,2,2);
plot(f,abs(fft(Ymen)));

%%%%%%女生变童声
[xchild,Fs]=audioread('E:\数字信号处理课程设计\titlttwo.wav'); 
Xchild=fft(xchild);
L=length(Xchild);
temp=Xchild;
N=400;
out=vertcat(0.3*temp(1:N),2.5*temp(1:L),0.3*temp(1:N));
Ychild=1*real(ifft(out));
%sound(Ychild);

3.5 GUI界面设计
在MATLAB中GUI是一中包含多种对象的图形窗口,并为GUI开发提供一个方便高效的集成开发环境GUIDE。GUIDE主要是一个界面设计工具集MATLAB将所有GUI支持度控件都集成在这个环境中,并提供界面外观、属性和行为响应方式的设置方法。GUIDE将设计好的GUI保存在一个FIG文件中,同时生成M文件框架。
通过GUI导航栏中的按钮、弹出式菜单等进行数字音效处理器的页面设计。
界面如图:
在这里插入图片描述
编制好各控件之后,我们就可以来为这些控件编写程序,鼠标放在所要编写的按键上并右击,单击callback。就会跳转到该按键的回调函数处,在此函数下进行编写。
运行后生成M文件和如图所示的数字音效处理器。
在这里插入图片描述
点击读取语音信号,选择wav文件进行读取并显示波形图。
在这里插入图片描述
点击播放按钮可以播放已经读取的语音信号,点击频谱分析显示读取的语音信号的频谱图。
在这里插入图片描述
滤波器设计部分通过下拉式菜单可以选择滤波器的类型和性质。
在这里插入图片描述
选择完后根据设计参数在下面可编辑文本框进行填写,可以填写不同的参数观察生成的滤波器的幅度谱和相位谱,选择合适的滤波器对语音信号滤波。
以椭圆高通滤波器为例:
选择fs=2400 Hz,fb=2500 Hz, As=100 dB,Ap=1 dB。
在这里插入图片描述

可以观察到生成的滤波器的幅度谱和相位谱,刚开始此图上的横轴坐标有些问题,不是归一化频率。我尝试用axis函数对横坐标进行约束,但图形有问题。在老师指出此问题后,我回去查阅资料,发现要对横坐标进行规定,规定横坐标为w/pi后就得到了归一化频率。
其他功能通过按钮进行实现:
按下按钮可以观察到处理后的语音信号的波形和频谱,对此进行分析。
可以在按下按钮的同时进行播放,也可通过下拉菜单选择性的播放和多次播放。
在这里插入图片描述
4.结果分析
4.1 语音信号频谱分析
在这里插入图片描述

采集的语言信号大约为5s,频率集中在100-1000HZ。
4.2 用滤波器对信号进行滤波
%%巴特沃斯低通滤波
Hd1=ditong;
yfilter1=filter(Hd1,x);
figure(2);
subplot(2,2,1);
plot(n,x); %画出原声音信号
title(‘原信号’);
subplot(2,2,3);
plot(f,abs(X)); %画出原声音信号的幅度谱
subplot(2,2,2);
plot(yfilter1);
title(‘巴特沃斯低通滤波后信号’);
Y1=abs(fft(yfilter1));
subplot(2,2,4);
plot(f,Y1);
在这里插入图片描述
…其他略

4.3 慢录快放和快录慢放
在这里插入图片描述
4.4 提高部分
%%倒放
在这里插入图片描述
倒放后基本听不清原语音说的什么,音调也有些许改变。
%%混音
在这里插入图片描述
如果是同一个语音信号进行混音,可以听到无数个语音信号不同时的在播放。如果是不同的语音信号进行混音,可以听到两个语音信号叠加在一起同时播放。
%%回音
在这里插入图片描述
第一个图形是语音信号延时一段时间后的波形,第二个是在原语音信号补零后的,把它们叠加在一起就可以听到语音信号有回音效果了。听到的回音比较清晰。
%%变声
在这里插入图片描述
女声变男声后声音变得比较低沉,因为基频和共振峰频率改变了。
5.总结

举报

相关推荐

0 条评论