基于MATLAB回波信号产生与消除
摘 要
MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。 MATLAB语言具备高效、可及推理能力强等特点,在数值计算方法、图形功能、用户界面设计编程手段和工具等方面有着重要的应用,随着MATLAB应用领域不断扩大,使其成为一种影响大、流行广的科学计算语言。
本次设计主要把原有WAV格式的声音文件通过MATLAB软件转换成声音文件。同时利用MATLAB产生原信号的延时衰减的回波信号附加到原信号形成回波信号。使用xcorr函数对延时和衰减进行估计。并对反射物的距离进行估计。
关键词:MATLAB;数字信号处理;回波 ;频谱分析;滤波器;xcorr函数
正 文
1 设计目的和要求
1.1 已知技术参数和设计要求
本毕业设计要求用MATLAB语言编程实现回波信号的产生与消除。
1.2 具体要求
(1)利用声音信号x产生带有回声的声音文件y。
(2)从带有回声的文件y中消除回声。
(3)从y中估计反射物的距离。
2.设计原理
采集语音:采集一段语音,绘制其时域波形,对此音频信号用FFT作谱分析。
加入回声:对采集的语音进行处理,加入一段回声,并绘制其时域波形,对其进行FFT频谱分析,绘制频谱图。
从带有回声的声音信号中恢复原信号:设计合适的滤波器,对带有回声的声音信号进行滤波,恢复原信号。绘制所设计滤波器的幅频和相频特性,及滤波后的信号的时域波形和频谱图。
从带有回声的声音信号中估计反射物的距离:采用相关分析法从带有回声的声音信号中估计反射物的距离。
3.设计内容
(1)语音采集
读取本地音频文件LoopyMusic.wav
(2)原始信号的时域波形,FFT频谱分析
[x,fs,bits] = wavread('LoopyMusic');
x=x(:,1);
x=x(1:16000);
figure(1);
subplot(3,1,1);
plot(x); grid on;
xlabel('时间'); ylabel('幅值'); title('原始信号时域波形');
subplot(3,1,2);
wx=fft(x);
plot(abs(wx)); grid on;
xlabel('频率'); ylabel('幅值'); title('幅频特性');
subplot(3,1,3);
plot(angle(wx)); grid on;
xlabel('频率'); ylabel('相位') ;title('相频特性');
(3)加入回声
N=36000;
y=[x;zeros(N,1)]+0.5*[zeros(N,1);x];
wavwrite(y,'加回声后的信号');
figure(2);
subplot(3,1,1);
plot(y); grid on;
xlabel('时间'); ylabel('幅值'); title('加回声后信号时域波形');
subplot(3,1,2);
wy=fft(y);
plot(abs(wy)); grid on;
xlabel('频率'); ylabel('幅值'); title('幅频特性');
subplot(3,1,3);
plot(angle(wy)); grid on;
xlabel('频率'); ylabel('相位') ;title('相频特性');
(4) 加回声后信号的时域波形,FFT频谱分析
r=xcorr(y);
figure(3);
plot(r);
grid on;
title('y的自相关函数');
[u,v]=max(r);
r1=r;
r1(v-5000:v+5000,1)=0;
[u1,v1]=max(r1);
N=v-v1;
title(N);
N
for k=1:2
t(k)=(-1)^k*y(36000*(k-1)+1,1);
end
roots(t)
(5) 从带有回声的声音信号中恢复原信号且估计反射物的距离
a=[1,zeros(1,35999),0.5];
b=[1];
x1=filter(b,a,y);
wavwrite(x1,'恢复后的信号')
figure(4);
subplot(3,1,1);
plot(x1); grid on;
xlabel('时间'); ylabel('幅值'); title('恢复后的信号时域波形');
subplot(3,1,2);
wx1=fft(x1);
plot(abs(wx1)); grid on;
xlabel('频率'); ylabel('幅值'); title('幅频特性');
subplot(3,1,3);
plot(angle(