matlab用wavread和wavwrite完成(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 16:09:35 浏览: 71
好的,下面是一些关于matlab的wavread和wavwrite的基本使用方法:
1. 读取wav文件并播放:
```matlab
% 读取wav文件
[x, Fs] = wavread('ks.wav');
% 播放音频
sound(x, Fs);
```
2. 保存音频为wav文件:
```matlab
% 写入wav文件
wavwrite(y, Fs, 'y.wav');
```
3. 计算零状态响应:
```matlab
% 读取h(n)
load('hn.mat', 'h');
% 计算零状态响应
y = conv(x, h);
```
4. 播放零状态响应并记录左声道的y(20000)和y(20001):
```matlab
% 播放零状态响应
sound(y, Fs);
% 记录y(20000)和y(20001)
y_left = y(20000:20001, 1);
```
5. 加入干扰并保存为noisy.wav:
```matlab
% 读入myvoice.wav
[x, Fs] = wavread('myvoice.wav');
% 生成10个干扰信号
f = 4500:50:4950; % 干扰频率
A = sqrt(0.01)*randn(10, 1); % 干扰信号振幅,均值为0,方差为0.01
phi = 2*pi*rand(10, 1); % 干扰信号初始相位,均匀分布在[0, 2π)间
% 生成干扰信号
t = 0:1/Fs:(length(x)-1)/Fs;
d = zeros(length(x), 2);
for i = 1:length(f)
d(:, 1) = d(:, 1) + A(i)*cos(2*pi*f(i)*t + phi(i));
d(:, 2) = d(:, 1);
end
% 加入干扰信号
y = x + d;
% 保存为noisy.wav
wavwrite(y, Fs, 'noisy.wav');
```
6. 播放干扰前和干扰后的音频以及绘制功率谱:
```matlab
% 播放干扰前的音频
sound(x, Fs);
% 播放干扰后的音频
sound(y, Fs);
% 绘制干扰前的音频功率谱
[Px, f] = analyze(x, Fs);
figure;
plot(f, Px);
xlabel('Frequency (Hz)');
ylabel('Power');
% 绘制干扰后的音频功率谱
[Py, f] = analyze(y, Fs);
figure;
plot(f, Py);
xlabel('Frequency (Hz)');
ylabel('Power');
```
通过这些基本的操作,您可以完成您提出的问题。
阅读全文