clear all;clc; R = audiorecorder( 8000, 16 ,1); 。 record(R); pause(4); stop(R); %Low_frequency=audioread('f:\Low.wav'); Low_frequency = getaudiodata(R); figure(1) t=(0:length(Low_frequency)-1)/8000; plot(t,Low_frequency); xlabel('t/s'); ylabel('幅值'); title('原始语音信号'); number=Low_frequency(:,1); figure(2); Hd = Lowfilter; output=filter(Hd,Low_frequency); sound(output) plot(t,output); title('滤波后的波形'); xlabel('t/s'); ylabel('幅值'); Y = fft(Low_frequency); L=length(Low_frequency); P2 = abs(Y/L); P1 = P2(1:L/2+1); P1(2:end-1) = 2*P1(2:end-1); f = 8000*(0:(L/2))/L; figure(3) plot(f,P1) title('单边幅度谱') xlabel('f (Hz)') ylabel('|P1(f)|') hold on Y = fft(output); L1=length(output); P2 = abs(Y/L1); P3= P2(1:L1/2+1); P1(2:end-1) = 2*P1(2:end-1); f = 8000*(0:(L/2))/L1; figure(4) plot(f,P3) title('“单边幅度谱”') xlabel('f (Hz)') ylabel('|P3(f)|') hold on
时间: 2023-08-14 16:05:30 浏览: 329
clc4-中国图书馆分类法软件电子版第4版
5星 · 资源好评率100%
这段代码是用 MATLAB 编写的语音处理程序,主要功能是录制音频信号并进行滤波处理,然后绘制原始信号和滤波后的波形图以及单边幅度谱。下面是代码的具体解释:
- clear all;clc;:清除 MATLAB 工作区中的所有变量,并清空命令窗口。
- R = audiorecorder( 8000, 16 ,1); 。 record(R); pause(4); stop(R);:创建一个音频录制器对象 R,采样率为 8000 Hz,采样位数为 16 位,采集通道数为 1。然后通过 record 函数开始录制音频信号,持续时间为 4 秒钟,最后通过 stop 函数停止录制。
- Low_frequency = getaudiodata(R);:从音频录制器对象 R 中获取录制的音频信号,并赋值给变量 Low_frequency。
- figure(1) t=(0:length(Low_frequency)-1)/8000; plot(t,Low_frequency); xlabel('t/s'); ylabel('幅值'); title('原始语音信号');:在一个新的窗口中创建一个图形对象,并绘制原始语音信号的波形图。其中 t 是时间轴,Low_frequency 是幅值,xlabel、ylabel 和 title 函数分别用于设置横轴标签、纵轴标签和图形标题。
- number=Low_frequency(:,1);:将 Low_frequency 中的第一列数据赋值给变量 number。
- Hd = Lowfilter; output=filter(Hd,Low_frequency);:创建一个低通滤波器对象 Hd,并将 Low_frequency 信号通过 filter 函数进行滤波处理,滤波后的信号赋值给变量 output。
- sound(output):通过 MATLAB 内置函数 sound 播放滤波后的音频信号。
- plot(t,output); title('滤波后的波形'); xlabel('t/s'); ylabel('幅值');:在一个新的窗口中绘制滤波后的语音信号的波形图。
- Y = fft(Low_frequency); L=length(Low_frequency); P2 = abs(Y/L); P1 = P2(1:L/2+1); P1(2:end-1) = 2*P1(2:end-1); f = 8000*(0:(L/2))/L; figure(3) plot(f,P1) title('单边幅度谱') xlabel('f (Hz)') ylabel('|P1(f)|') hold on:对原始信号进行傅里叶变换,得到频域幅度谱,并绘制单边幅度谱图。其中 Y 是频域复数,P2 是频域幅值,P1 是单边幅度谱,f 是频率轴,hold on 函数用于在同一张图上绘制多个曲线。
- Y = fft(output); L1=length(output); P2 = abs(Y/L1); P3= P2(1:L1/2+1); P1(2:end-1) = 2*P1(2:end-1); f = 8000*(0:(L/2))/L1; figure(4) plot(f,P3) title('“单边幅度谱”') xlabel('f (Hz)') ylabel('|P3(f)|') hold on:对滤波后的信号进行傅里叶变换,得到频域幅度谱,并绘制单边幅度谱图。同样地,使用 hold on 函数在同一张图上绘制多个曲线。
阅读全文