Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
回复
 
主题工具 显示模式
旧 2008-12-05, 11:41   #1
xmuer
初级会员
 
注册日期: 2008-12-04
年龄: 38
帖子: 4
声望力: 0
xmuer 正向着好的方向发展
难过 Matlab声音合成和滤波的问题【附代码-自己写的】

我写了下面一段代码:实现读取'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)'); %滤波后的频域波形
%程序结束
上传的图像
文件类型: jpg 1.JPG (77.2 KB, 70 次查看)
xmuer 当前离线   回复时引用此帖
旧 2008-12-06, 10:44   #2
xmuer
初级会员
 
注册日期: 2008-12-04
年龄: 38
帖子: 4
声望力: 0
xmuer 正向着好的方向发展
默认 回复: Matlab声音合成和滤波的问题【附代码-自己写的】

没有人会么?:cry:
xmuer 当前离线   回复时引用此帖
旧 2008-12-09, 20:46   #3
songzy41
普通会员
 
注册日期: 2008-04-05
年龄: 83
帖子: 37
声望力: 18
songzy41 正向着好的方向发展
默认 回复: Matlab声音合成和滤波的问题【附代码-自己写的】

把声音附上,可帮你看看。
songzy41 当前离线   回复时引用此帖
旧 2008-12-10, 10:58   #4
xmuer
初级会员
 
注册日期: 2008-12-04
年龄: 38
帖子: 4
声望力: 0
xmuer 正向着好的方向发展
默认 回复: 声音附件

见附件:lol:
上传的附件
文件类型: rar toilet.rar (30.0 KB, 35 次查看)
xmuer 当前离线   回复时引用此帖
旧 2008-12-17, 08:58   #5
vivyzheng
初级会员
 
注册日期: 2008-10-14
年龄: 36
帖子: 2
声望力: 0
vivyzheng 正向着好的方向发展
默认 回复: Matlab声音合成和滤波的问题【附代码-自己写的】

fft变换那个地方是F.*conj(F)吧
vivyzheng 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码


相似的主题
主题 主题作者 版面 回复 最后发表
[分享]偏微分方程的数值解法的程序 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


所有时间均为北京时间。现在的时间是 06:45


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.