西电信号大作业(歌曲人声消除)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信号与系统课程实践报告
1内容与要求
通过信号分析的方法设计一个软件或者一个仿真程序,程序的主要功能是完成对歌曲中演唱者语音的消除。试分析软件的基本设计思路、基本原理,并通过MA TLAB程序设计语言完成设计。更进一步地,从理论和实用的角度改善软件性能的方法和措施。
2 思路与方案
歌曲的伴奏左右声道相同,人声不同。所以通过左右声道不同处理信号,然后通过频率分析做带阻滤波滤除主要人声信号。
3 成果及展示
代码:
clear;clc;
[X,fs]=audioread('D:\文本文档\林.wav');
ts=1/fs;
N=length(X)-1;
t=0:1/fs:N/fs;
Nfft=N;
df=fs/Nfft;
fk=(-Nfft/2:Nfft/2-1)*df;
a1=1;a2=-1;b1=1;b2=-1;%分离左声道和右声道
SoundLeft=X(:,1);
SoundRight=X(:,2);%对左声道和右声道进行快速傅里叶变换
SoundLeft_f=ts*fftshift(fft(SoundLeft,N));
SoundRight_f=ts*fftshift(fft(SoundRight,N));%显示左右声道幅度变化
figure(1)
subplot(411)
plot(t,SoundLeft);
subplot(412)
plot(t,SoundRight);%显示左右声道频率变化
subplot(413)
f_range=[-5000,5000,0,0.1];
plot(fk,SoundLeft_f);
axis(f_range);
subplot(414)
plot(fk,SoundRight_f);
axis(f_range);
NewLeft=a1*SoundLeft+a2*SoundRight;
NewRight=b1*SoundLeft+b2*SoundRight;
Sound(:,1)=NewLeft;
Sound(:,2)=NewRight;
Sound_Left_f=ts*fftshift(fft(NewLeft,N));
Sound_Right_f=ts*fftshift(fft(NewRight,N));
figure(2)
subplot(411)
plot(t,NewLeft);
subplot(412)
plot(t,NewRight);
f_range=[-5000,5000,0,0.1];
subplot(413)
plot(fk,Sound_Left_f);
axis(f_range);
subplot(414)
plot(fk,Sound_Right_f);
axis(f_range);
BP=fir1(300,[800,2200]/(fs/2));%根据左右声道差异进行滤波【800,2200】Hz CutDown=filter(BP,1,Sound);
Sound_Final=Sound-0.6*abs(CutDown);
Sound_Final_f=ts*fftshift(fft(Sound_Final,N));
figure(3)
subplot(211)
plot(t,Sound_Final);
subplot(212)
f_range=[-5000,5000,0,0.1];
plot(fk,Sound_Final_f);
axis(f_range);
audiowrite('D:\文本文档\林_去人声.wav',Sound_Final,fs);
1歌曲原始左右声道的幅度和频率曲线
2相减得到的信号幅度和频率曲线
3进行消除人声处理后信号的幅度和频率曲线
4 总结与感想
在本次实践中,熟悉了matlab的操作,了解了很多命令。实现歌曲的人声消除,了解到音频信号的组成,熟悉了常用的歌曲消音技术原理,并且通过设计实验完成了对已知原理的验证,实现了较好的歌曲消音效果,掌握了对信号进行分离、滤波等处理手段。
5参考资料