用手机录一段话或一首歌,导入matlab画出时域波形,频谱和时频谱
时间: 2024-10-16 09:22:11 浏览: 29
用Matlab画出信号的时域波形及频谱观察它们的关系 .ppt
在Matlab中,你可以通过以下步骤将手机录制的声音文件处理成时域波形、频谱图以及时频谱图:
1. **录音并保存到文件**:
- 使用Matlab的内置函数`audiorecorder`或者第三方工具如`audiowrite`先录制音频,并将其保存为`.wav`或其他支持的音频格式。
```matlab
recObj = audiorecorder;
disp('开始录音...');
recordblocking(recObj, 5); % 录制5秒的音频
disp('录音结束.');
filename = 'myRecording.wav'; % 自定义文件名
audiowrite(filename, getaudiodata(recObj), 'pcm16');
```
2. **读取和预处理音频数据**:
- 使用`audioread`函数读取音频文件,得到时间序列和采样率。
```matlab
[signal, Fs] = audioread(filename);
```
3. **绘制时域波形**:
- 使用`plot`函数绘制信号的时间序列波形。
```matlab
t = (0:length(signal)-1)'/Fs; % 时间轴
plot(t, signal);
xlabel('Time (s)');
ylabel('Amplitude');
title('Time Domain Waveform');
```
4. **计算频谱**:
- 使用`fft`函数计算快速傅立叶变换,然后用`abs`求绝对值绘制频率响应。
```matlab
N = length(signal);
Y = fft(signal)/N; % 分配给每个频率点的功率
f = (0:N-1)*(Fs/N); % 频率轴
Pxx = abs(Y).^2; % 对称化频谱
plot(f, Pxx);
xlabel('Frequency (Hz)');
ylabel('Power/Frequency');
title('Spectrum');
```
5. **绘制时频谱图**:
- 可以使用`spectrogram`函数创建短时傅立叶变换(STFT),展示声音随时间变化的频率成分。
```matlab
windowSize = round(0.1*Fs); % 窗口大小
overlap = windowSize/2; % 重叠比例
[S, f, t] = spectrogram(signal, hann(windowSize), overlap, windowSize, Fs);
imagesc(t, f, log10(abs(S))); % 以对数尺度显示
axis xy;
xlabel('Time (s)');
ylabel('Frequency (Hz)');
title('Short-Time Fourier Transform');
```
阅读全文