Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
初级会员
注册日期: 2008-12-04
年龄: 38
帖子: 4
声望力: 0 ![]() |
![]()
我写了下面一段代码:实现读取'toilet.wav'(matlab附带的声音文件),然后给其加个noise1噪音,然后再设计一个滤波器进行滤波,把noise1滤除,可是实验的结果不是很理想,滤波后的声音出现了较大的失真。我不知道是自己程序写的有问题(尤其是欠采样那块儿及滤波器)还是过程参数选择的原因或者是方法错了,希望高人指教指教~~不甚感激。。。:lol:
%程序开始 clear close all; [Y,FS,NBITS]=WAVREAD('toilet.wav'); %读取声音信号 %sound(Y); %发音 SigLength=length(Y); %计算信号长度 t1=(0:SigLength-1)/FS; subplot(3,3,1);plot(t1,Y); xlabel('t1:时间');ylabel('Y(原音)'); F=fft(Y,SigLength); %进行fft变换 Pyy=Y.*conj(Y)/SigLength; HalfLength=floor(SigLength/2); f=FS*(0:HalfLength)/SigLength; subplot(3,3,2);plot(f,Pyy(1:HalfLength+1));xlabel('频率(Hz)'); noise1=sin(2*pi*10*t1); noise2=sin(2*pi*10000*t1); %暂时没用 noise1=noise1'; noise2=noise2'; Mixed=Y+noise1; %sound(Mixed); %发出混合音 subplot(3,3,3);plot(t1,Mixed); xlabel('t1:时间');ylabel('Mixed(混合音)'); F=fft(Mixed,SigLength); %进行fft变换 Pyy=Mixed.*conj(Mixed)/SigLength; HalfLength=floor(SigLength/2); f=FS*(0:HalfLength)/SigLength; subplot(3,3,4);plot(f,Pyy(1:HalfLength+1));xlabel('频率(Hz)'); %对声音进行欠采样 Mixed_temp=Mixed(1:39662); dfactor=3; Mixed_dec=decimate(Mixed_temp,dfactor); SigLength1=length(Mixed_dec); %计算信号长度 t2=(0:SigLength1-1)/FS; %sound(Mixed_dec); subplot(3,3,5);plot(t2,Mixed_dec); xlabel('t2:时间');ylabel('Mixed_dec:(欠采样后的声音信号)'); %设计滤波器并滤波 N=8; Fs=10000; Wn=[40 1500]/(Fs/(dfactor*2)); [b,a]=butter(N,Wn); Mixed_fil=filter(b,a,Mixed_dec); Mixed_ok=interp(Mixed_fil,dfactor); sound(Mixed_ok); SigLength2=length(Mixed_ok); %计算信号长度 t3=(0:SigLength2-1)/Fs; subplot(3,3,6); plot(t3,Mixed_ok); xlabel('t3:时间');ylabel('Mixed_ok:(滤波后的声音信号)'); grid;axis([0,4,-1,1]) SigLength3=length(Mixed_ok); Y1= fft(Mixed_ok,SigLength3); Pyy1= Y1.* conj(Y1) / SigLength3; HalfLength1=floor(SigLength3/2); f1=FS*(0:HalfLength1)/SigLength3; subplot(3,3,7); plot(f1,Pyy1(1:HalfLength1+1));xlabel('频率(Hz)'); %滤波后的频域波形 %程序结束 |
![]() |
![]() |
![]() |
#2 |
初级会员
注册日期: 2008-12-04
年龄: 38
帖子: 4
声望力: 0 ![]() |
![]()
没有人会么?:cry:
|
![]() |
![]() |
![]() |
#3 |
普通会员
注册日期: 2008-04-05
年龄: 83
帖子: 37
声望力: 18 ![]() |
![]()
把声音附上,可帮你看看。
|
![]() |
![]() |
![]() |
#4 |
初级会员
注册日期: 2008-12-04
年龄: 38
帖子: 4
声望力: 0 ![]() |
![]()
见附件:lol:
|
![]() |
![]() |
![]() |
#5 |
初级会员
注册日期: 2008-10-14
年龄: 36
帖子: 2
声望力: 0 ![]() |
![]()
fft变换那个地方是F.*conj(F)吧
|
![]() |
![]() |
![]() |
|
|
![]() |
||||
主题 | 主题作者 | 版面 | 回复 | 最后发表 |
[分享]偏微分方程的数值解法的程序 | wa2003 | MATLAB论坛 | 15 | 2013-01-18 12:59 |
问一个关于二维函数画图的问题,请高手们指教 | lijia | MATLAB论坛 | 1 | 2009-03-17 15:37 |
[分享]给大家传一个图像空间变换和直方图变换的数学推导 | johnny8088 | MATLAB论坛 | 0 | 2009-01-31 03:26 |
[求助]请问谁会用matlab模拟一个泊松过程? | jarod520 | MATLAB论坛 | 0 | 2008-12-10 18:53 |