在matlab中怎样实现对声音的导入,分析与处理???

在matlab中怎样实现对声音的导入,分析与处理???,第1张

1)用mp3录音,生成文件cricket.wav,把该文件放到matlab文件夹里面(就是你打开matlab后中间顶部的地址)。

2)使用如下程序,做波形显示以及fft变换。

[y,Fs,bits]=wavread('cricket.wav')%读出信号握旅,采样率和采样位数。

y=y(:,1)%我这里假设你的声音是双声道,我只取单声道作分析,如果你想分析另外一个声道,请改成y=y(:,2)

sigLength=length(y)

Y = fft(y,sigLength)

Pyy = Y.* conj(Y) / sigLength

halflength=floor(sigLength/2)

f=Fs*(0:halflength)/sigLength

figureplot(f,Pyy(1:halflength+1))xlabel('Frequency(Hz)')

t=(0:sigLength-1)/Fs

figureplot(t,y)xlabel('Time(s)')

3)频率看频谱就有了,声音间隔看声音波形,周期看声音波形。

4)关于去噪声

a)如果噪声是特定频率的周期噪声(periodic noise),比如说50hz,那么你可以用matlab的filter,作一个低通、高通、带通或者带阻滤波。

b)如果声音是高斯白噪声。那就用自适应滤波(adaptive filter,wiener filter)。这里涉及到对噪声的采样、计算特征值以及决定阶数的问题。

c)幸好我们可以“耍赖”——用cool editor。用它打开wav文件,用鼠标把一段噪声圈起来,采样,然后直接选升皮拿择去噪就可以了。各大网站有介绍。

例子:matlab去除50hz噪声。

我用电脑录了一段声音,里面有50hz的周期噪吵搭声(因为受交流电干扰)。而我自己的声音频率最低是90hz。我使用了一个10阶butterworth高通滤波器,边带是70hz(介于50跟90之间)。

问题是,这不能直接用。因为声音文件的采样率是22k,70相对于22k来说太小了。所以我得先把我的声音欠采样,然后再滤波,然后再插值。程序如下。

[k,Fs,bits]=wavread('mywav.wav')

k=k(:,1)

y_temp=k(1:90000)

dfactor=3

y=decimate(y_temp,dfactor)

[b,a] = butter(10,70/(Fs/(dfactor*2)),'high')

y=filter(b,a,y)

y=interp(y,dfactor)

sigLength=length(y)

Y = fft(y,sigLength)

Pyy = Y.* conj(Y) / sigLength

halflength=floor(sigLength/2)

f=Fs*(0:halflength)/sigLength

figureplot(f,Pyy(1:halflength+1))xlabel('Frequency(Hz)')

sigLength=length(y_temp)

Y = fft(y_temp,sigLength)

Pyy = Y.* conj(Y) / sigLength

halflength=floor(sigLength/2)

f=Fs*(0:halflength)/sigLength

figureplot(f,Pyy(1:halflength+1))xlabel('Frequency(Hz)')

t=(0:sigLength-1)/Fs

figureplot(t,y,t,y_temp)xlabel('Time(s)')

wavplay(y,Fs)

wavplay(y_temp,Fs)

5)回放:使用wavplay函数

wavplay(y,Fs);

这个要用到联合时频分析,STFT也行,WVD也行。噪声的话,要看你是什么样的类型噪空配声斗耐指,建议先用FFT分析,大概确定一下频率。不亩让知道你是要用软件滤波还是用硬件滤波。声音信号的频率都在低频段,处理起来比较容易。建议使用希尔伯特变换就可以,这是最简单的时频分析方法,也是最成熟的,在MATLAB里面使用非常的简单。

在matlab中无论是wgn还是awgn函数,实质都是由randn函数产生的噪声。即百,wgn函数中调用了randn函数,而awgn函数中调用了wgn函数。

根据awgn的实现代码可以知道“向已知信号液昌辩添度加某个信噪比(SNR)的高斯白噪声”,

内即:awgn(x,snr,’measured’,'linear’),命令的作用是对原信号x添加信容噪迅改比(比值)为SNR的噪声,在添加之前先估计信号x的闹缺强度。

直接对原始信号添加噪声:

y=x+rand(length(x),1)

y=x+randn(length(x),1))


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12533633.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-26
下一篇2025-08-26

发表评论

登录后才能评论

评论列表(0条)

    保存