yo_yolu 发表于 2008-3-12 15:21

如何在MATLAB里给语音信号加噪声

现在遇到一个棘手的问题,急待解决,谢谢大家指点!

[ 本帖最后由 eight 于 2008-3-12 15:37 编辑 ]

eight 发表于 2008-3-12 15:38

原帖由 yo_yolu 于 2008-3-12 15:21 发表 http://www.chinavib.com/forum/images/common/back.gif
现在遇到一个棘手的问题,急待解决,谢谢大家指点! 版面搜索吧,你要的东西完完整整就有,不要懒成这样

yo_yolu 发表于 2008-3-12 15:48

好的,谢谢!
我好好看看

songzy41 发表于 2008-3-12 18:10

可用degrade函数把噪声加到信号中去

eight 发表于 2008-3-12 18:38

原帖由 songzy41 于 2008-3-12 18:10 发表 http://www.chinavib.com/forum/images/common/back.gif
可用degrade函数把噪声加到信号中去 >> help degrade
degrade.m not found.
Use the Help browser Search tab to search the documentation, or
type "help help" for help command options, such as help for methods.

我的matlab版本是2007a,没有这个函数。是否不是matlab自带的函数?

yo_yolu 发表于 2008-3-12 22:39

fs=22050;
x1=wavread('d:\2.wav');
f=fs*(0:511)/1024;
t=0:1/22050:(size(x1)-1)/22050;
Au=0.03;
d=';
x2=x1+d;
sound(x2,22050);
y2=fft(x2,1024);
figure(1);
plot(t,x2);
title('加噪后的信号');
xlabel('time n');
ylabel('fuzhi n');
figure(2)
subplot(2,1,1);
plot(f,abs(y1(1:512)));
xlabel('Hz');
ylabel('fuzhi');
subplot(2,1,2);
plot(f,abs(y2(1:512)));
title('加噪后的信号频谱');
xlabel('Hz');
ylabel('fuzhi');
我试了试,这个程序还是不能用,还是出现的错误:
??? Error using ==> plus
Matrix dimensions must agree.

Error in ==> Untitled25 at 7
x2=x1+d;
这里x1是2维的,而d是1维的,怎么变一下呀?

songzy41 发表于 2008-3-13 07:57

由wavread读入的数据往往是一列数据,而d是一行数据,所以在x2=x1+d中把一行数据与一列数据相加产生了错误。

yo_yolu 发表于 2008-3-13 09:03

能用什么语句给他变一下吗?转置好像也不行

eight 发表于 2008-3-13 09:23

原帖由 yo_yolu 于 2008-3-12 22:39 发表 http://www.chinavib.com/forum/images/common/back.gif
fs=22050;
x1=wavread('d:\2.wav');
f=fs*(0:511)/1024;
t=0:1/22050:(size(x1)-1)/22050;
Au=0.03;
d=';
x2=x1+d;
sound(x2,22050);
y2=fft(x2,1024);
figure(1);
plot(t,x2);
tit ...
只有你自己才知道怎样变,其他人如何知道?建议用一个小例子外加说明,参考这个:写文件时的格式问题

songzy41 发表于 2008-3-13 09:32

我附上degrade函数:
% = degrade(X,SNR,NOISE)
% adds SNR dB NOISE to the speech signal X and returns the noisy signal in Y
% By default SNR=10dB and NOISE is AWGN.
function = degrade(X,SNR,NOISE)
if isstr(X)==1, X=read(X); end
if nargin < 3, NOISE=randn(size(X)); end
if nargin < 2, SNR=10; end
if length(NOISE) < length(X),
   disp('Length of speech signal X should be greater than noise NOISE');
   break
end
signal_power = 1/length(X)*sum(X.*X);
noise_variance = signal_power / ( 10^(SNR/10) );
Y=X+sqrt(noise_variance)/std(NOISE)*NOISE(1:length(X));
Y=32000/max(abs(Y))*Y;

yo_yolu 发表于 2008-3-13 10:05

还是不太明白,degrade语句放在matlab语句的什么位置?怎么加这个语句呀?谢谢指点

songzy41 发表于 2008-3-14 13:02

你的程序可以这样写:
fs=22050;
x1=wavread('d:\2.wav');
f=fs*(0:511)/1024;
t=0:1/22050:(size(x1)-1)/22050;
x2=degrade(x1,20);
x2中信噪比是20dB。你不妨把加噪前后的信号画出来看看,就能明白了。

cgd1225 发表于 2009-10-12 16:43

原帖由 songzy41 于 2008-3-13 09:32 发表 http://www.chinavib.com/forum/images/common/back.gif
我附上degrade函数:
% = degrade(X,SNR,NOISE)
% adds SNR dB NOISE to the speech signal X and returns the noisy signal in Y
% By default SNR=10dB and NOISE is AWGN.
function = degrade(X,SNR,N ...

请问下这段代码最后两行表示的是什么意思。我实现了下。可以加噪,但原理还是有点迷糊。
谢谢。
页: [1]
查看完整版本: 如何在MATLAB里给语音信号加噪声