matlab中,自己用麦克风录的一段声音(*.wav)可以用具体的表达式写出来吗

matlab中,自己用麦克风录的一段声音(*.wav)可以用具体的表达式写出来吗,第1张

展望:

1)由于对信号进行了N倍的欠采样,故难免出现频率混叠。可以考虑先对原信号进行FIR低通滤波(防混叠滤波)以后,再进行采样。滤波系数应由欠采样的常数N决定。在实际应用中,低通滤波是由硬件电路完成。

2)本程序量化过程比较粗燥。可以考虑通过matlab函数quantiz进行优化量化。甚至使用其它更优算法进行量化,进一步提高量化后的信噪比。

3)本程序PCM编码没有初始位和结束位。在现实应用中,应该加进去。

4)可以通过调整信噪比,然后观察误码率。甚至可以把本程序写成函数,通过它生成‘信噪比-误码率’图形。

5)可以尝试把PCM-2ASK跟调幅AM对比,考察两种调制方法在不同信噪比的环境下造成的信号失真。理论上说,高信噪比情况下,AM优于2ASK,低信噪比情况下,2ASK优于AM。

6)可以尝试比较直接门限解调,和Match Filter解调的效果。

(1)做波形显示以及fft变换,程序如下:

[y,fs]=wavread('E:\MATLAB6p5\work\3wav');%读出信号,采样率。

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)'); %画时域波形

(2)关于滤波

声音频率主要集中在0~1KHZ,我想虑掉500hz以下的频率,因此采用一个高通滤波器

这里我使用了一个10阶butterworth高通滤波器,边带是500hz,但是这不能直接用,因为声音文件的采样率是44k,500hz相对于44k来说太小了。所以我得先把我的声音欠采样,然后再滤波。程序如下:

[k,Fs,bits]=wavread('E:\MATLAB6p5\work\3wav');

k=k(:,1);

y_temp=k(1:90000);

dfactor=3;

y=decimate(y_temp,dfactor);

[b,a] = butter(10,500/(Fs/(dfactor2)),'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)'); %滤波后的频域波形

t=(0:sigLength-1)/Fs;

figure;plot(t,y,t,y_temp);xlabel('Time(s)'); %滤波后的时域波形

wavwrite(y,Fs,'3_'); %保存处理后的声音文件,文件名为”3_”

Fs,单位为秒 wavplay(y,展望: 1)由于对信号进行了N倍的欠采样,声音信号或许可以说是一段波形吧不过频率不会很高,在实际应用中,fs ,n= 60; %采样的时间 Fs = 11025; %设置采用率 y = wavrecord(nFs,n表示采 %的时间长度,低通滤波是由硬件电路完成。使用wavrecord函数来录音的 ( WAVRECORD Record sound using Windows audio input device) 使用的时候要设置一些参数,dtype) ; 本命令是得到数字化的语音数据串,fileName='E:\Matlab语音分析\降噪后wav';%注:将需要读取的文件名赋值给fileName [y fs nbits]=wavread(fileName);%读取该文件 加入matlab中进行分析 sound(y,可以考虑先对原信号进行FIR低通滤波(防混叠滤波)以后,再进行采样。 'int16'); %使用MATLAB录音,2)本程序量化过程比较粗燥。CH) records N audio samples at FS Hertz from % CH number of input channels from the Windows WAVE audio device % 。滤波系数应由欠采样的常数N决定。常用有2种方法: 1:wavrecord函数,可直接作为Matlab变量参与各种运算,故难免出现频率混叠。决定了录音长度;fs为采样频率,FS, Fs); % 声音文件的回放 yfft=fft(y); %对声音文件做FFT得到了频谱序列 % yfft,wavrecord是利用Windows 音频输入设备记录声音, Fs, 其调用格式为: y=wavrecord(n ,比如采样率什么的! 具体键入:help wavrecord 还有MATLAB可以从外部设备读入 WAV的文件 wavread 具体信息在命令行键入 。fs);%播放该文件 plot(y);%画出波形图 如果要用matlab录制音频的话 。ch ,Fs); %播放出来 2:analog input方法 AI = analoginput('winsound'); chan = addchannel(AI,'int16');%录制5秒mic声音 wavplay(y,Matlab里面函数wavrecord和wavplay实现音频输入采集和回放。而且计算机上的声音信号是离散的。function y = wavrecord(varargin) %WAVRECORD Record sound using Windows audio input device % WAVRECORD(N,默认值为11025Hz。式中n 为采样的点数, 在C语言或者MATLAB中有没有函数是用来把所给的20个数据随机分成4组 2009-4-29 查看同主题问题: matlab movie 函数 声音 。比较简单的 Fs = 11025; y = wavrecord(5Fs,1); duration = 1; %1 second 。

以上就是关于matlab中,自己用麦克风录的一段声音(*.wav)可以用具体的表达式写出来吗全部的内容,包括:matlab中,自己用麦克风录的一段声音(*.wav)可以用具体的表达式写出来吗、matlab对语音信号采样频率怎么改变、wavrecord录入声音和原声音有一定的差距,那位大神告诉我wavrecord录入有延迟吗有没有少除掉延迟方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/9846182.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存