MATLAB音频信号处理——水印
44.声音处理函数-->常用声音函数
lin2mu 将线性音频信号转换为mu法则
mu2lin 将mu法则转换为线性音频信号
sound 把向量转换为声音
soundsc 测量数据并作为声音播放
46.声音处理函数-->WAV声音文件
waveread 读声音文件
wavewrite 写声音文件
1.用MATLAB怎样打开音频文件
wavread ( f s t r ) 在文件f s t r中返回采样数据。help wavread可获得更多信息。
wavwrite (sv,f,fstr) 以采样频率f将采样声音向量sv写入文件fstr中。
y=wavread ( '*.wav' ); plot(y); %该音频文件的时域图 H=dft(y); plot(abs(H));%频谱图
2. 用matlab读wav文件?
waveFile='C:\c.wav';
[y,fs,nbits]=wavread(waveFile);
y中的数据为什么是小数?wav原文件中的数据时小数还是整数?
这个也是一定的,是不是小数是WAV文件的编码的规则决定的!
Y是小数是因为wavread已经做了归一化的处理了
3. 在MATLAB如何生成一个WAV文件
在MATLAB中
用以下代码可以发出一个拨号声,
n = 1 : 999
d5(n) = sin(0.5906n) + sin(1.0245n)
sound(d5, 8192)
但如果我想把一个声音输出为了一个WAVE文件的话,应该怎么做,请高手指点
for n = 1 : 999
d5(n) = sin(0.5906*n) + sin(1.0245*n);
end;
sound(d5, 8192)
d6=d5/2; %avoid to be clipped
wavwrite(d6,8192,16,'d5.wav');
4. matlab 做音频文件(WAV格式)的频谱图程序 以及做时域波形图的程序
%你好,该程序读mywav.wav文件,然后显示频谱以及波形。注意,mywav.wav文件不要太长,否则运算会很慢。
[y,Fs,bits]=wavread('mywav.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;
figure;plot(f,Pyy(1:halflength+1));xlabel('Frequency(Hz)');
t=(0:sigLength-1)/Fs;
figure;plot(t,y);xlabel('Time(s)');
5. 分析一个.wav文件的频谱
分析一个.wav文件的频谱
分析的是ZR33.wav
程序:
[y,Fs,bits]=wavread('ZR33.wav');
y=y(:,1);
sigLength=length(y);
Y = fft(y,sigLength);
Pyy = Y.* conj(Y) / sigLength;
halflength=floor(sigLength/2);
f=Fs*(0:halflength)/sigLength;
figure;plot(f,Pyy(1:halflength+1));xlabel('Frequency(Hz)');
t=(0:sigLength-1)/Fs;
figure;plot(t,y);xlabel('Time(s)');
6. 如何用matlab讲多声道的wav文件分成几个单声道的
%把你的wave文件放到matlab文件夹里面,假设你的文件是mywave.wav
[y,Fs,bits] = wavread('mywav');%读入文件
y_left=y(:,1);%读左声道
y_right=y(:,2);%读右声道
wavplay(y_left,Fs);%播放左声道
wavplay(y_right,Fs);%播放右声道
wavwrite(y_left,'LeftChannel');%把左声道写成文件
wavwrite(y_right,'RightChannel');%把右声道写成文件
如何用matlab讲多声道的wav文件分成几个单声道的?
悬赏分:20 - 提问时间2007-10-4 16:21
如何用matlab讲多声道的wav文件分成几个单声道的?
反过来可能吗?
急,在线等!!
请回答的尽量详细些,谢谢
7. 在matlab中怎样实现对声音的导入,分析与处理???
我要用matlab分析蟋蟀的声音,同时做出其声音几个参数(频率,声音间隔,周期)的图像,在matlab中能实现吗?
怎样实现的??
还有,我用mp3录下了蟋蟀的叫声,但其中有些杂音,能去掉吗?重要的是我该怎样导入声音文件?
在matlab中可以改变声音的一些参数进行声音的回放吗?
烦请高手指点!!!不胜感激!!!
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;
figure;plot(f,Pyy(1:halflength+1));xlabel('Frequency(Hz)');
t=(0:sigLength-1)/Fs;
figure;plot(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;
figure;plot(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*

您当前的位置: