美文网首页程序员
回声信号的产生与消除

回声信号的产生与消除

作者: 南瓜不说话__ | 来源:发表于2018-12-23 14:33 被阅读23次

第十组讨论报告 回声信号

设计人员【张峻凯、董晓民、严子轩@电子科技大学自动化工程学院】

问题描述:

语音信号频率分量分离的设计与仿真
回声信号可建模为 y[n]=x[n]+αx[n-N],其中 x[n]是未被污损的语音信号, N为回声延迟值, α<1为回声衰减系数。
(1)采用matlab中的audiorecorder命令录制一段3秒的语音信号,并将录制的语音信号转换为音频数据,显示其时域和频域特征;
(2)根据回声的模型,选择合适的延迟值和衰减系数,合成回声信号,显示其时域和频域特征,并进行播放
(3)利用相关性,判断回声的参数值
designed by Liu Ke @school of automation of UESTC

解决方案
(1)
首先使用 matlab中的audiorecorder命令录制3秒的语音信号,

ysound = audiorecorder; 
%recorder = audiorecorder 创建 8000 Hz、8 位、1 通道的 audiorecorder 对象。

disp('开始录制');

recordblocking(ysound,3); %录音3秒钟

disp('结束录制');

将录制的语音信号转化为音频数据,并显示频域时域特征


ysound_1 = getaudiodata(ysound); %获取录音数据

plot(ysound_1); %做录音数据的时域图形

title('原始语音信号时域');

xlabel('采样点 n');

ylabel('幅度 n');

y1 = fft(ysound_1); %做ysound_1的FFT

%y1 = fftshift(y1); 频率分量将会移到坐标中心

subplot(2,2,2);

plot(abs(y1)); %使用abs函数画出原始语音信号的频谱图

title('原始语音信号的频谱幅度');

xlabel('采样点 n');

ylabel('幅度 n');

subplot(2,2,3);

plot(angle(y1)); %使用angle函数画出原始语音信号的频谱相位

title('原始语音信号的频谱相位');

xlabel('采样点 n');

ylabel('幅度 n');

grid on;
输入信号的时频图像

(2)

由题意可知回声模型如下所示

y[n]=x[n]+αx[n-N]
因为后面会用到噪声信号,因此我们首先将源信号增益并时移得到噪声hsound之后将两个函数叠加得到y[n]。
选取α为0.5,N为2000,由于采样率为8000Hz,2000对应着延迟0.25s
噪声信号可以通过filter函数取得,filter函数使用z变换的有理相关函数,
对y[n]=αx[n-N] 两侧进行z变换之后可以将其有利传递函数得出,使用zeros函数生成全为零的空矩阵,并且由于filter函数的特性,

a = 1;
b = [zeros(1,1999),0.5]; %定义两个频率响应的有理传递函数系数向量
hsound = filter(b,a,ysound_1); %得到回声信号

流程图如下:


大概的流程

回声信号的时频特性如下:

回声信号时频特性

代码如下:

%第二部分开始,增益设置为0.5,时移变为0.25s,由于音频信号是默认的8000Hz的,所以时移0.125s即是2000
a = 1;
b = [zeros(1,1999),0.5]; %定义两个频率响应的有理传递函数系数向量
hsound = filter(b,a,ysound_1); %得到回声信号
zsound = hsound + ysound_1;
figure('name','2','color','r');
subplot(2,2,1);
plot(zsound); %做回声的时域图形
title('回声信号时域');
xlabel('采样点 n');
ylabel('幅度 n');
y2 = fft(zsound); %做ysound_1的FFT
%y1 = fftshift(y1); 频率分量将会移到坐标中心
subplot(2,2,2);
plot(abs(y2)); %画出原始语音信号的频谱图
title('回声语音信号的频谱幅度');
xlabel('采样点 n');
ylabel('幅度 n');
subplot(2,2,3);
plot(angle(y2)); %画出原始语音信号的频谱相位
title('回声语音信号的频谱相位');
xlabel('采样点 n');
ylabel('幅度 n');
grid on;

(3) 利用相关性,判断回声的参数值

(注:本小组对于这道题求解分两个部分)

第一部分,求其延迟值:

利用函数的自相关特性,做出回声信号的自相关函数

回声信号的自相关函数

从自相关函数图像可以看到,在采样点的中心有一最大的赋值,其含义就是当延时量为0时,信号相关程度最高;而在这一峰值的两侧有两个次大的赋值,其含义就是在该信号的相关程度次高;而在别的点处其相关程度相对于两个峰值都可以忽略,因此算出这两个峰值所对应的采样点之差,就是回声信号中,原始信号与回声信号对应的采样点之差。

通过matlab实现:

%回声自相关:
 y=zsound;
Cy=xcorr(y);
figure(11);
plot(cy);
title('回声信号的自相关');
xlabel('采样点');
ylabel('相关程度');%**对回声信号进行自相关**
  
%计算延时

[h1_y,h1]=max(cy);%把最大值极其位置取出
cy2=cy;
cy2(h1-1500:h1+1500,1)=0; %令最大值的邻域为0
[h2_y,h2]=max(cy2);%取出次大值
N_delay=abs(h1-h2);%算出差距
disp(sprintf('延时等于= %8.5f',N_delay/8000));%显示延时

第二部分 计算衰减值:

通过自相关函数的性质知:函数的自相关在自变量等于0的时候其相关程度最大,且其值为函数的能量,所以我们组用自相关函数计算能量的方法分别求出原声音和回声信号的能量,再将其做比,得到衰减值的平方。

原信号的自相关函数

yx=xcorr(ysound_1,'biased');
yx=yx(length(ysound_1):1:end);
figure('name','4');
subplot(111);
plot(0:1:60, yx(1:61));
xlabel('n');
ylabel('y_x(n)');
title('y_x(n)');%将原信号自相关函数进行表示
原信号的自相关函数

回声信号的自相关函数:

qx=xcorr(zsound,'biased');
qx=qx(length(zsound):1:end);
figure('name','4');
subplot(111);
plot(0:1:60, qx(1:61));
xlabel('n');
ylabel('q_x(n)');
title('q_x(n)');%将回声噪声自相关函数进行表示
回声噪声信号的自相关函数

将其在0时刻的值做比,得到衰减系数的平方:

e = yx(1,1);
f = rx(1,1);
c = e/f;
disp(sprintf('阿尔法平方等于= %8.5f',c));
最后的输出
附代码:
 ysound = audiorecorder;
 %recorder = audiorecorder 创建 8000 Hz、8 位、1 通道的 audiorecorder 对象。

disp('开始录制');

recordblocking(ysound,3); %录音3秒钟

disp('结束录制');

%play(ysound); %播放录音

figure('name','1','color','c'); %创建一个新的视图1选个够骚的配色

subplot(2,2,1);

ysound_1 = getaudiodata(ysound); %获取录音数据

plot(ysound_1); %做录音数据的时域图形

title('原始语音信号时域');

xlabel('采样点 n');

ylabel('幅度 n');

y1 = fft(ysound_1); %做ysound_1的FFT

%y1 = fftshift(y1); 频率分量将会移到坐标中心

subplot(2,2,2);

plot(abs(y1)); %画出原始语音信号的频谱图

title('原始语音信号的频谱幅度');

xlabel('采样点 n');

ylabel('幅度 n');

subplot(2,2,3);

plot(angle(y1)); %画出原始语音信号的频谱相位

title('原始语音信号的频谱相位');

xlabel('采样点 n');

ylabel('幅度 n');

grid on;

% %第二部分开始,增益设置为0.5,时移变为0.25s,由于音频信号是默认的8000Hz的,所以时移0.25s即是2000

a = 1;

b = [zeros(1,1999),0.5]; %定义两个频率响应的有理传递函数系数向量

hsound = filter(b,a,ysound_1); %得到回声信号

zsound = hsound + ysound_1;

figure('name','2','color','r');

subplot(2,2,1);

plot(zsound); %做回声的时域图形

title('回声信号时域');

xlabel('采样点 n');

ylabel('幅度 n');

y2 = fft(zsound); %做zsound的FFT

%y1 = fftshift(y1); 频率分量将会移到坐标中心

subplot(2,2,2);

plot(abs(y2)); %画出回声语音信号的频谱图

title('回声语音信号的频谱幅度');

xlabel('采样点 n');

ylabel('幅度 n');

subplot(2,2,3);

plot(angle(y2)); %画出回声语音信号的频谱相位

title('回声语音信号的频谱相位');

xlabel('采样点 n');

ylabel('幅度 n');

grid on;

rx=xcorr(hsound,'biased');

rx=rx(length(hsound):1:end);

figure('name','3');

subplot(111);

plot(0:1:60, rx(1:61));

xlabel('n');

ylabel('r_x(n)');

title('r_x(n)');

yx=xcorr(ysound_1,'biased');

yx=yx(length(ysound_1):1:end);

figure('name','4');

subplot(111);

plot(0:1:60, yx(1:61));

xlabel('n');

ylabel('y_x(n)');

title('y_x(n)');

qx=xcorr(zsound,'biased');

qx=qx(length(zsound):1:end);

figure('name','4');

subplot(111);

plot(0:1:60, qx(1:61));

xlabel('n');

ylabel('q_x(n)');

title('q_x(n)');

e = yx(1,1);

f = rx(1,1);

c = e/f;

disp(sprintf('阿尔法平方等于= %8.5f',c));

y=zsound;

cy=xcorr(y);

figure(11);

plot(cy);

title('回声信号的自相关');

xlabel('采样点');

ylabel('相关程度');

[h1_y,h1]=max(cy);

cy2=cy;

cy2(h1-1500:h1+1500,1)=0;

[h2_y,h2]=max(cy2);

N_delay=abs(h1-h2);

disp(sprintf('延时等于= %8.5f',N_delay/8000));

sound (zsound); %以默认采样率进行播放

相关文章

  • 回声信号的产生与消除

    第十组讨论报告 回声信号 设计人员【张峻凯、董晓民、严子轩@电子科技大学自动化工程学院】 问题描述: 语音信号频率...

  • Android AEC 无效的解决方案

    Android 端回声消除模块在某些机型上面需要使用 16kHz 的采样率输入,否则将会产生回声问题,为此设计此特...

  • 回声原因

    回声消除技术,采用回波抵消方法,也就是通过自适应方法估计回波信号的大小,然后在接收信号中减去此估计值以抵消回波,回...

  • 非线性声学回声如何破解?华为云硬核技术为你解决

    摘要:本文将从非线性声学回声消除产生的原因、研究现状、技术难点出发,详细介绍华为云音视频团队推出的双耦合的声学回声...

  • 回声消除概述

    在一般的VOIP软件或视频会议系统中,假设我们只有A和B两个人在通话, 首先,A的声音传给B,B然后用喇叭放出来,...

  • Speex回声消除

    1. 概述 Speex AEC是开源的回声消除代码。 回声消除框架图如下 AEC一般的方法使用自适应FIR滤波器设...

  • 偏见的产生与消除

    什么是偏见?偏见是如何产生的呢?我们又要如何消除偏见? 定义 是人们以不正确或不充分的信息为依据,形成的对其他人或...

  • 视频会议的回声发现与消除

    回声是中最常见的声音问题之一。在的调试过程中,回声的发现与消除,是需要系统维护人员重点解决的一个课题。 一、 回声...

  • Speex 双声道回声消除中frame_size的含义

    Speex中的回声消除默认是按单声道处理的。那么Speex支持直接对双声道的数据进行回声消除吗?答案是肯定的,10...

  • WebRTC回声消除技术

    1 WebRTC简介 WebRTC是谷歌公司2011年发布的一项技术。WebRTC技术主要用于在支持HTML5的浏...

网友评论

    本文标题:回声信号的产生与消除

    本文链接:https://www.haomeiwen.com/subject/jrhnkqtx.html