展望:
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录入有延迟吗有没有少除掉延迟方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)