1. 程式人生 > 其它 >【聲源定位】基於matlab不同信噪比下麥克風接收訊號【含Matlab原始碼 546期】

【聲源定位】基於matlab不同信噪比下麥克風接收訊號【含Matlab原始碼 546期】

一、簡介

基於matlab不同信噪比下的麥克風接收訊號

二、原始碼

clear all;
close all;
clc
%****************************************************%
[s,fs]=wavread('C9_1_y.wav');   
s=s/max(abs(s));
sound_length = 6400;
%裝載房間衝激響應
load h.mat;            
%麥克風1的訊號
s1=conv(s,h1);
s1=s1(1:sound_length);
%麥克風2的訊號
s2=conv(s,h2);
s2=s2(1:sound_length);
%****************************************************%
%新增白噪聲
%SNR=20dB
s1_20db = awgn(s1,20,'measured','db');
s2_20db = awgn(s2,20,'measured','db');
%SNR=10dB
s1_10db = awgn(s1,10,'measured','db');
s2_10db = awgn(s2,10,'measured','db');
%SNR=0dB
s1_0db = awgn(s1,0,'measured','db');
s2_0db = awgn(s2,0,'measured','db');
%SNR=-5dB
s1_m5db = awgn(s1,-5,'measured','db');
s2_m5db = awgn(s2,-5,'measured','db');
figure(1);
%顯示原始輸入語音訊號波形
subplot(5,2,1),plot(s1,'k'),title('麥克風1(原始)'),xlabel('取樣點'),ylabel('幅度');
subplot(5,2,2),plot(s2,'k'),title('麥克風2 (原始)'),xlabel('取樣點'),ylabel('幅度');
subplot(5,2,3),plot(s1_20db,'k'),title('麥克風1(SNR=20dB)'),xlabel('取樣點'),ylabel('幅度');
subplot(5,2,4),plot(s2_20db,'k'),title('麥克風2(SNR=20dB)'),xlabel('取樣點'),ylabel('幅度');
subplot(5,2,5),plot(s1_10db,'k'),title('麥克風1(SNR=10dB)'),xlabel('取樣點'),ylabel('幅度');
subplot(5,2,6),plot(s2_10db,'k'),title('麥克風2(SNR=10dB)'),xlabel('取樣點'),ylabel('幅度');
subplot(5,2,7),plot(s1_0db,'k'),title('麥克風1(SNR=0dB)'),xlabel('取樣點'),ylabel('幅度');
function [h]=rir(fs, mic, n, r, rm, src);
%     房間脈衝響應
%     fs    取樣頻率
%     mic 麥克風座標(行向量)  
%     n     虛擬聲源個數 (2*n+1)^3 
%     r 	牆壁反射係數(-1<R<1)
%     rm   房間尺寸(行向量)
%     src   聲源座標(行向量)
%
%     h     房間脈衝響應

nn=[-n:1:n];                                          
rms=nn+0.5-0.5*(-1).^nn;                    
srcs=(-1).^(nn);                                    
xi=[srcs*src(1)+rms*rm(1)-mic(1)];      % 式(9-2)
yj=[srcs*src(2)+rms*rm(2)-mic(2)];      % 式(9-3)
zk=[srcs*src(3)+rms*rm(3)-mic(3)];      %式(9-4)

三、執行結果

四、備註

版本:2014a

完整程式碼或代寫加1564658423