信号与系统课程实践报告
1 内容与要求
通过信号分析的方法设计一个软件或者一个仿真程序,程序的主要功能是完成对歌曲中演唱者语音的消除。
试分析软件的基本设计思路、基本原理,并通过MA TLAB 程序设计语言完成设计。
更进一步地,从理论和实用的角度改善软件性能的方法和措施。
2 思路与方案
歌曲的伴奏左右声道相同,人声不同。
所以通过左右声道不同处理信号,然后通过频率分析做带阻滤波滤除主要人声信号。
3 成果及展示代码:clear;clc;
文本文档林.wav');
ts=1/fs;
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);
文本文档林
去人声.wav',Sound Final,fs);
1 歌曲原始左右声道的幅度和频率曲线
2 相减得到的信号幅度和频率曲线
3 进行消除人声处理后信号的幅度和频率曲线
4 总结与感想
在本次实践中,熟悉了matlab 的操作,了解了很多命令。
实现歌曲的人声消除,了解到音频信号的组成,熟悉了常用的歌曲消音技术原理,并且通过设计实验完成了对已知原理的验证,实现了较好的歌曲消音效果,掌握了对信号进行分离、滤波等处理手段。
5 参考资料。