2016-11-29 1 views
-1

J'essaie de supprimer le bruit d'un fichier wav. Mais je continue d'obtenir l'erreur suivante après avoir exécuté le script. Le fichier wav que j'utilise est https://drive.google.com/file/d/0BzIyOj_KUKufTTNWMFlRMW9fT2c/view?usp=sharingNoise Cancel dans Matlab

J'utilise le code de Remove noise from wav file, MATLAB.

>> run sample3 
Index exceeds matrix dimensions. 

Error in sample3 (line 17) 
stem(1:N, f(:,2)); 

Error in run (line 96) 
evalin('caller', [script ';']); 

Voici le code:

%% Read in the file 
clearvars; 
close all; 
[f,fs] = audioread('noise.wav'); 

%% Play original file 
pOrig = audioplayer(f,fs); 
pOrig.play; 

%% Plot both audio channels 
N = size(f,1); % Determine total number of samples in audio file 
figure; 
subplot(2,1,1); 
stem(1:N, f(:,1)); 
title('Left Channel'); 
subplot(2,1,2); 
stem(1:N, f(:,2)); 
title('Right Channel'); 

%% Plot the spectrum 
df = fs/N; 
w = (-(N/2):(N/2)-1)*df; 
y = fft(f(:,1), N)/N; % For normalizing, but not needed for our analysis 
y2 = fftshift(y); 
figure; 
plot(w,abs(y2)); 

[B,A] = butter(n, [beginFreq, endFreq], 'bandpass'); 

%% Design a bandpass filter that filters out between 700 to 12000 Hz 
n = 7; 
beginFreq = 700/(fs/2); 
endFreq = 12000/(fs/2); 
[B,A] = butter(n, [beginFreq, endFreq], 'bandpass'); 

%% Filter the signal 
fOut = filter(b, a, f); 

%% Construct audioplayer object and play 
p = audioplayer(fOut, fs); 
p.play; 

Répondre

0

Le code suppose que le signal est stéréo (deux canaux appelés également). Votre fichier audio est probablement mono (à en juger par la façon dont il sonne ... a.k.a. un canal), donc toute référence dans le code qui utilise le bon canal doit être supprimée. En d'autres termes, la seule partie du code qui est affectée est l'affichage du canal droit dans le domaine temporel. Le reste du code devrait fonctionner car il accède au canal gauche en stéréo, qui est par coïncidence la première colonne du fichier son et la seule colonne dans un fichier mono.

Remplacer ce code:

N = size(f,1); % Determine total number of samples in audio file 
figure; 
subplot(2,1,1); 
stem(1:N, f(:,1)); 
title('Left Channel'); 
subplot(2,1,2); 
stem(1:N, f(:,2)); 
title('Right Channel'); 

avec:

N = size(f,1); % Determine total number of samples in audio file 
figure; 
stem(1:N, f(:,1)); 
title('Mono Channel'); 

À l'avenir, essayer de lire plus attentivement les erreurs Matlab. Ils sont très verbeux et descriptif sur ce qu'est le problème dans votre code. Dans ce cas, il se plaint que vous essayez d'accéder à une colonne dans le fichier son f qui n'existe pas.


Note: Je suis l'auteur original de la réponse que vous avez lié.