如何在MATLAB里给语音信号加噪声
现在遇到一个棘手的问题,急待解决,谢谢大家指点![ 本帖最后由 eight 于 2008-3-12 15:37 编辑 ] 原帖由 yo_yolu 于 2008-3-12 15:21 发表 http://www.chinavib.com/forum/images/common/back.gif
现在遇到一个棘手的问题,急待解决,谢谢大家指点! 版面搜索吧,你要的东西完完整整就有,不要懒成这样 好的,谢谢!
我好好看看 可用degrade函数把噪声加到信号中去 原帖由 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自带的函数? 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维的,怎么变一下呀? 由wavread读入的数据往往是一列数据,而d是一行数据,所以在x2=x1+d中把一行数据与一列数据相加产生了错误。 能用什么语句给他变一下吗?转置好像也不行 原帖由 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 ...
只有你自己才知道怎样变,其他人如何知道?建议用一个小例子外加说明,参考这个:写文件时的格式问题 我附上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; 还是不太明白,degrade语句放在matlab语句的什么位置?怎么加这个语句呀?谢谢指点 你的程序可以这样写:
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。你不妨把加噪前后的信号画出来看看,就能明白了。 原帖由 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]