提供一个包含某人说话语音片段的声音文件( buzz.wav,下载地址 http://pan.baidu.com/s/1dDtcTwt),但该语音信号被一个包含有几个谐波分量的蜂鸣信 2 号干扰了。 (1) 用 Matlab 的 wavread 命令读取该声音文件。注意,该命令可以同时得到 声音文件的采样率和采样位宽,请查阅 Matlab 的帮助文件。 (2) 用快速傅立叶变换(FFT)计算并画出声音信号的频谱,列写出蜂鸣信号 的谐波频率。 (3) 思考如何将这些蜂鸣音去除?将去除了蜂鸣音的语音片段播放出来,仔细 聆听并写下语音片段中人物所说的话。注意:由于只能播放实信号,因此 记得提取信号的实部。
时间: 2024-04-03 13:35:17 浏览: 166
好的,以下是针对您提出的问题的回答:
1. 使用Matlab的wavread命令读取声音文件:
```matlab
[y,fs]=wavread('buzz.wav');
```
其中,y是声音信号的采样值,fs是采样率。
2. 使用快速傅里叶变换(FFT)计算并绘制声音信号的频谱,列出蜂鸣信号的谐波频率:
```matlab
N=length(y);
Y=fft(y);
Pyy=Y.*conj(Y)/N;
f=fs/N*(0:N/2-1);
plot(f,Pyy(1:N/2));
xlabel('Frequency (Hz)');
ylabel('Power');
```
运行上述代码后,可以得到声音信号的频谱图,其中可以看到蜂鸣信号的谐波频率为370Hz、740Hz、1110Hz、1480Hz等。
3. 去除蜂鸣音的方法可以使用数字滤波器。假设我们知道蜂鸣信号的频率范围,可以设计一个带阻滤波器来去除蜂鸣信号。以下是一个简单的带阻滤波器的设计代码:
```matlab
f1=350;
f2=1550;
Wn=[f1 f2]/(fs/2);
[b,a]=butter(10,Wn,'stop');
y_filtered=filter(b,a,y);
```
其中,butter函数是Matlab提供的用于设计数字滤波器的函数。在该代码中,我们选择了10阶巴特沃斯带阻滤波器,频率范围为350Hz到1550Hz,然后使用filter函数将语音信号y通过滤波器,得到了去除蜂鸣信号的语音信号y_filtered。最后,可以播放y_filtered的实部得到去除蜂鸣信号的语音片段。
阅读全文