生成一段人声音的PCM信号并保存为wav文件的matlab代码
时间: 2024-01-24 18:04:14 浏览: 104
以下是生成人声音的PCM信号并保存为wav文件的Matlab代码:
```matlab
% 设置参数
fs = 44100; % 采样率
dur = 5; % 时长
f0 = 220; % 基频(男高音A)
A = 1; % 振幅
nT = dur * fs; % 采样点数
% 生成基频为f0的正弦波
t = (0:nT-1) / fs; % 时间序列
x0 = A * sin(2 * pi * f0 * t);
% 生成一个随机序列作为噪声
noise = randn(nT, 1);
% 用一个低通滤波器过滤噪声,以模拟人声信号
fc = 5000; % 截止频率
[b, a] = butter(6, fc/(fs/2)); % 6阶巴特沃斯滤波器
x = filter(b, a, noise);
% 归一化到[-1, 1]范围
x = x / max(abs(x));
% 将PCM信号保存为wav文件
filename = 'voice.wav';
audiowrite(filename, x, fs);
```
这段代码将生成5秒钟时长、基频为220Hz(男高音A)的人声信号并保存为名为“voice.wav”的wav文件。你可以修改代码中的基频和时长等参数来生成不同的声音。
相关问题
生成双声道PCM信号并保存为wav文件的matlab代码
以下是生成双声道PCM信号并保存为wav文件的Matlab代码:
```matlab
% 生成双声道PCM信号
fs = 44100; % 采样率
f1 = 440; % 左声道信号频率
f2 = 880; % 右声道信号频率
t = 0:1/fs:2; % 时间向量
x1 = sin(2*pi*f1*t); % 左声道信号
x2 = sin(2*pi*f2*t); % 右声道信号
y = [x1; x2]; % 双声道信号
% 保存为wav文件
filename = 'stereo_pcm.wav'; % 文件名
audiowrite(filename, y, fs); % 保存
```
在上面的代码中,我们首先定义了采样率、左声道信号频率、右声道信号频率和时间向量。然后,我们使用sin函数生成了左声道和右声道的信号,并将它们放在一个双声道矩阵中。最后,我们使用audiowrite函数将双声道PCM信号保存为wav文件。
生成立体声PCM信号并保存为wav文件的matlab代码
以下是生成立体声PCM信号并保存为wav文件的Matlab代码:
```matlab
% 生成立体声PCM信号
fs = 44100; % 采样率
f1 = 440; % 左声道信号频率
f2 = 880; % 右声道信号频率
t = 0:1/fs:2; % 时间向量
x1 = sin(2*pi*f1*t); % 左声道信号
x2 = sin(2*pi*f2*t); % 右声道信号
y = [x1+x2; x1-x2]; % 立体声信号
% 保存为wav文件
filename = 'stereo_pcm.wav'; % 文件名
audiowrite(filename, y, fs); % 保存
```
在上面的代码中,我们首先定义了采样率、左声道信号频率、右声道信号频率和时间向量。然后,我们使用sin函数生成了左声道和右声道的信号,并将它们放在一个立体声矩阵中。立体声信号的左声道信号是左右声道信号的和,右声道信号是左右声道信号的差。最后,我们使用audiowrite函数将立体声PCM信号保存为wav文件。
阅读全文