西电信号大作业(歌曲人声消除)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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参考资料

相关文档
最新文档