音声信号フィルタリング処理matlabソースコード

%%%%%%%%%%%サウンドファイルを読む%%%%%%%%%%%
すべて閉じる;
すべてクリア;
[Y、Fs、NBITS] = wavread( 'dsp01_noise.wav');

%%%%%%%%%%%サウンドを再生する%%%%%%%%%%%
sound(Y、Fs);
一時停止(4);

%%%%%%%%%%%ノイズの多い音声信号を時間領域の
サブプロット(321); plot(Y(1:30000));にプロットします。
title( '入力の時間領域プロット')
xlabel( 'サンプル番号')

%%%%%%%%%%%ノイズの多い音声信号を周波数領域でプロット
XF = fft(Y、Fs);
f = 0:1:Fs-1;
subplot(322); plot(f(1:Fs / 2)、abs(XF(1:Fs / 2)))
axis([0 3000 0 max(abs(XF))]);
title( '入力の周波数成分')
xlabel( 'Frequency "Hz"')

%%%%%%%%%%% fdatoolによって設計されたBPフィルター
loadBP_num;
Ybp = filter(Num、1、Y);
%sound(Ybp、Fs);
%pause(4);

%%%%%%%%%%% 1-Dメディアンフィルター設計
NM = 25;
Ynm = medfilt1(Ybp、NM);
音(2 * Ynm、Fs);
一時停止(4);

%%%%%%%%%%%フィルタリングされたサウンドファイルを保存します
wavwrite(Ynm、Fs、 'FilteredSig.wav');

%%%%%%%%%%%フィルタリングされた音声信号を時間領域
サブプロット(323); plot(Ynm(1:30000));にプロットします。
title( 'フィルター処理された信号の時間領域プロット')
xlabel( 'サンプル番号')

%%%%%%%%%%%フィルタリングされた音声信号を周波数領域でプロット
XF = fft(Ynm、Fs);
f = 0:1:Fs-1;
subplot(324); plot(f(1:Fs / 2)、abs(XF(1:Fs / 2)))
axis([0 3000 0 max(abs(XF))]);
title( 'フィルタリングされた信号の周波数成分')
xlabel( 'Frequency "Hz"')

%%%%%%%%%%%フィルタリングされたサウンドファイルをロードします
[x、Fs] = wavread( 'FilteredSig.wav');

%%%%%%%%%%% 4段階コムフィルター設計
c1 = 0.6;
c2 = 0.4;
c3 = 0.2;
c4 = 0.1;

%コムフィルターステージの遅延係数
R1 = 1000;
R2 = 1500;
R3 = 900;
R4 = 800;

%コムフィルター1
num1 = [0、zeros(1、R1-1)、1];
den1 = [1、zeros(1、R1-1)、-c1];
combfilt1 = filter(num1、den1、x);

%Combfilter 2
num2 = [0、zeros(1、R2-1)、1];
den2 = [1、zeros(1、R2-1)、-c2];
combfilt2 = filter(num2、den2、x);

%Combfilter 3
num3 = [0、zeros(1、R3-1)、1];
den3 = [1、zeros(1、R3-1)、-c3];
combfilt3 = filter(num3、den3、x);

%Combfilter 4
num4 = [0、zeros(1、R4-1)、1];
den4 = [1、zeros(1、R4-1)、-c4];
combfilt4 = filter(num4、den4、x);

combfilt = combfilt1 + combfilt2 + combfilt3 + combfilt4;

%%%%%%%%%%% 2段階のオールパスフィルターの設計
オールパスフィルターの順序を決定し
ますR5 = 900;
R6 = 900;

AN1 = 0.7; %オールパス分子定数ステージ1
AN2 = 0.6; %All PassNumerator定数ステージ2

レベル= 0.7;


AD1 = 450; %オールパスデヌミネーター定数ステージ1
AD2 = 390; %オールパスデヌミネーター定数ステージ2


オールパスステージ1 APnum = [AN1、zeros(1、R5-1)、1]; %All Pass
Numerator APden = [1、zeros(1、R5-1)、AN1]; %All Pass Denumator

AllPass1 = filter(APnum、APden、combfilt);
num = [AN2、zeros(1、R6-1)、1];
den = [1、zeros(1、R6-1)、AN2];


オールパスステージ2 AllPass2 = filter(num、den、AllPass1);

%エコーを元の信号に追加し、エコーのレベルを縮小します
REVERB = x + level * 3 * AllPass2; 
soundc(REVERB、Fs);

%%%%%%%%%%%リバーブ信号を時間領域
サブプロット(325); plot(REVERB(1:30000));にプロットします。
xlabel( '時変'); ylabel( '信号レベル');
title( 'フィルター処理された信号+リバーブ');

%%%%%%%%%%%ノイズの多い音声信号を周波数領域でプロット
XF = fft(REVERB、Fs);
f = 0:1:Fs-1;
subplot(326); plot(f(1:Fs / 2)、abs(XF(1:Fs / 2)))
axis([0 3000 0 max(abs(XF))]);
title( 'リバーブの周波数成分')
xlabel( 'Frequency "Hz"')
 

おすすめ

転載: blog.csdn.net/ccsss22/article/details/113823132