用matlab2016b采集声音并绘制时域和频域波形的代码
时间: 2024-02-25 18:55:18 浏览: 72
以下是一个基于MATLAB 2016b的声音采集并绘制时域和频域波形的代码示例:
```matlab
% 获取音频设备信息
deviceInfo = audiodevinfo;
% 选择音频设备
deviceReader = audioDeviceReader('Device', deviceInfo.input(1).Name);
% 设置录制参数
deviceReader.SampleRate = 8000; % 采样率为8000Hz
deviceReader.NumChannels = 1; % 单声道
deviceReader.OutputDataType = 'double'; % 输出数据类型为double
% 录制语音信号
audioData = zeros(8000*5, 1); % 5秒钟的语音信号
for i = 1:5
audioData((i-1)*8000+1:i*8000) = deviceReader();
end
% 绘制时域波形
time = (0:length(audioData)-1)/deviceReader.SampleRate;
figure;
plot(time, audioData);
title('时域波形');
xlabel('时间 (秒)');
ylabel('幅值');
% 绘制频域波形
nfft = 1024; % FFT点数
freq = linspace(0, deviceReader.SampleRate/2, nfft/2+1);
y = fft(audioData, nfft);
mag = abs(y(1:nfft/2+1));
figure;
plot(freq, mag);
title('频域波形');
xlabel('频率 (Hz)');
ylabel('幅值');
```
这个示例代码首先使用audiodevinfo函数获取计算机上可用的音频设备信息,然后使用audioDeviceReader函数选择要用于录制的音频设备。接下来,设置录制参数,如采样率和通道数等。然后,使用for循环录制5秒钟的语音信号,并将其存储在audioData数组中。最后,使用plot函数绘制时域波形和频域波形。
需要注意的是,在绘制频域波形时,需要进行FFT变换,并计算幅值。同时,要指定FFT的点数,以获得所需的频率分辨率。
阅读全文