matlab(1)编写程序,读入 ks.wav,并进行播放,观察数据格式。假设音频通过一个 离散时间系统,其单位样值响应为 h(n)。h(n) 已保存于 hn.mat。求零状态响 应y(n),并保存为 y.wav。 1 播放 y.wav,感觉声音的变化。 2 记录零状态响应左声道的 y(20000),y(20001)。 (2) 假设音频在传输中受到加性干扰。干扰为 4500Hz,4550Hz, 4600Hz,,...4950Hz 等 10 个间隔 50Hz 的余弦波(注意所列的频率是连续信号的 频率)。这 10 个余弦波的振幅是随机的(但对于每一个频率,假设左右声道的 干扰的振幅相同),以均值 0,方差 0.01 的高斯随机数获得 10 个余弦波的振幅。 10个余弦波的初始相位是[0,2π) 间的均匀分布随机数(左右声道的初始相位可 以不同)。 1 编写程序,读入 myvoice.wav,加上干扰,保存音频至 noisy.wav。 播放干扰前和干扰后的音频,有什么变化? 2 使用 analyze 函数绘制干扰前和干扰后声音的功率谱,记录并进行 分析。
时间: 2024-02-09 21:09:16 浏览: 125
好的,我来回答您提出的问题。
1. 读入ks.wav并进行播放,观察数据格式:
您可以使用MATLAB的`audioread`函数读取`ks.wav`文件,使用`sound`函数播放音频,并使用`whos`函数查看数据格式。例如:
```
[y, Fs] = audioread('ks.wav');
sound(y, Fs);
whos y
```
其中,`y`是音频信号,`Fs`是采样率。`whos`函数可以查看`y`的数据类型和数据大小。
2. 求零状态响应y(n)并保存为y.wav,播放y.wav,记录零状态响应左声道的y(20000)和y(20001):
您可以使用MATLAB的`filter`函数计算零状态响应,然后使用`audiowrite`函数保存为`y.wav`文件。例如:
```
load('hn.mat', 'hn');
y = filter(hn, 1, y);
audiowrite('y.wav', y, Fs);
```
然后,您可以使用`audioread`函数读取`y.wav`文件,使用`sound`函数播放音频,并使用`y`数组的索引获取左声道的y(20000)和y(20001)。例如:
```
[y, Fs] = audioread('y.wav');
sound(y, Fs);
y_left = y(20000:20001, 1);
```
3. 添加干扰并保存为noisy.wav,播放干扰前后的音频,记录功率谱:
您可以使用MATLAB的`audioread`函数读取`myvoice.wav`文件,然后使用`randn`函数生成高斯随机数,使用`cos`函数生成余弦波干扰,使用`audiowrite`函数保存为`noisy.wav`文件。例如:
```
[y, Fs] = audioread('myvoice.wav');
t = (0:length(y)-1) / Fs;
f_interference = 4500:50:4950;
A_interference = sqrt(0.01) * randn(length(f_interference), 2);
phi_interference = 2 * pi * rand(length(f_interference), 2);
interference = sum(A_interference .* cos(2 * pi * f_interference' * t + phi_interference), 1)';
y_noisy = y + interference;
audiowrite('noisy.wav', y_noisy, Fs);
```
然后,您可以使用`audioread`函数读取`noisy.wav`文件,使用`sound`函数播放干扰前后的音频,并使用MATLAB的`pwelch`函数绘制干扰前后的功率谱。例如:
```
[y, Fs] = audioread('myvoice.wav');
[y_noisy, Fs_noisy] = audioread('noisy.wav');
sound(y, Fs);
pause(length(y) / Fs);
sound(y_noisy, Fs_noisy);
pause(length(y_noisy) / Fs_noisy);
[Pyy, f] = pwelch(y, [], [], [], Fs);
[Pyy_noisy, f_noisy] = pwelch(y_noisy, [], [], [], Fs_noisy);
plot(f, 10*log10(Pyy), f_noisy, 10*log10(Pyy_noisy));
xlabel('Frequency (Hz)');
ylabel('Power/frequency (dB/Hz)');
legend('Original', 'Noisy');
```
通过比较干扰前后的音频和功率谱,可以发现添加干扰后,音频的质量变得更差,功率谱也出现了明显的噪声。
阅读全文