当前位置 - 무료 법률 상담 플랫폼 - 법률 지식 - MATLAB 에코 신호 생성 및 제거

MATLAB 에코 신호 생성 및 제거

QQ 음성채팅을 할 때 헤드폰을 쓰지 않으면 스피커를 사용해요. 그런 다음 마이크는 두 가지 신호를 수신합니다. 첫 번째는 사람의 목소리이고 두 번째는 스피커에서 나오는 소리(에코)입니다. 이 프로그램은 반향을 제거하기 위해 단어를 사용합니다.

먼저 장기 FIR 필터를 에코로 만듭니다. (방 임펄스 응답 생성)

M = 4001;

fs = 8000

[B, A] = cheby2(4, 20, [0.1 0.7 ]);

Hd = dfilt.df2t([zeros(1,6) B],A);

hFVT = fvtool(Hd);

set(hFVT, '색상', [1 1 1])

H = filter(Hd, log(0.99*rand(1, M) 0.01).*sign(randn(1 , M)).*exp(-0.002*(1:M)));

H = H/norm(H)*4; 룸 임펄스 응답

plot(0 : 1/fs: 0.5, H);

xlabel('시간 [초]')

ylabel('진폭')

title( ' Room Impulse Response');

set(gcf, 'Color', [1 1 1])

그런 다음 MATLAB과 함께 제공되는 사람의 목소리를 읽고 재생합니다(필요하지 않음 긴장함) , 이것은 영어 듣기가 아닙니다)

근접 음성 로드

n = 1: length(v);

t = n/fs;

plot(t, v);

axis([0 33.5 -1 1]);

xlabel('시간 [초]');

ylabel('진폭');

title('근단 음성 신호');

set(gcf, '색상', [1 1 1])

p8 = audioplayer(v,fs);

playblocking(p8);

원단 음성 신호

이제 에코를 재생합니다. 소리는 스피커에서 방출되어 방 안을 돌아다니며 최종적으로 마이크에 포착됩니다.

이 소리는 위에서 설계한 FIR 필터를 통해 생성됩니다.

load Farspeech

x = x(1:length(x));

dhat = filter( H, 1, x);

plot(t, dhat);

axis([0 33.5 -1 1])

xlabel ('시간 [초]');

ylabel('진폭');

title('원거리 반향 음성 신호')

set (gcf, 'Color', [1 1 1])

p8 = audioplayer(dhat, fs);

playblocking(p8);

Voice와 함께 추가됨 echo, 마이크가 수신한 실제 소리는 다음과 같습니다.

d = dhat v 0.001*randn(length(v), 1);

plot(t, d) ;

axis([0 33.5 -1 1])

xlabel('시간 [초]')

ylabel('진폭'); >

title('마이크 신호');

set(gcf, 'Color', [1 1 1])

p8 = audioplayer(d, fs ); /p>

playblocking(p8);

주파수 영역 적응 필터를 사용하여 에코 제거

mu = 0.025

W0 = zeros(1, 2048);

del = 0.01;

lam = 0.98;

x = x(1:length(W0)*floor(길이 (x)/ length(W0)));

d = d(1:length(W0)*floor(length(d)/length(W0)));

주파수 구성- 도메인 적응형 필터

hFDAF =adapfilt.fdaf(2048, mu, 1, del, lam)

[y, e] = filter(hFDAF, x, d);

n = 1: 길이(e);

t = n/fs;

pos = get(gcf,'위치')

set(gcf, '위치', [pos(1), pos(2)-100, pos(3), (pos(4) 85)])

서브플롯(3, 1 , 1);

plot(t, v(n), 'g')

축([0 33.5 -1 1]); ylabel('진폭');

title('근단 음성 신호');

subplot(3, 1, 2);

plot( t, d(n), 'b');

axis([0 33.5 -1 1]);

ylabel('진폭');

p>

title('마이크 신호');

subpl

ot(3, 1, 3);

plot(t, e(n), 'r')

축([0 33.5 -1 1]); p> p>

xlabel('시간 [초]');

ylabel('진폭');

title('음향 반향 제거기의 출력');< /p >

set(gcf, '색상', [1 1 1])

p8 = audioplayer(e/max(abs(e)), fs);

playblocking (p8);

스툴, 스툴, 스툴 끝

반향을 생성하는 방법은 다양하며, 각각의 바운스를 시뮬레이션하는 미러링 방법도 있습니다. 육면체 방의 벽에 소리가납니다. 호주에 있는 대학교 친구의 개인 홈페이지에 프로그램이 있으니 관심이 있으시면 찾아보시면 됩니다.