Bandpass, lowpass and highpass filtering
    16 vues (au cours des 30 derniers jours)
  
       Afficher commentaires plus anciens
    
    Mercede Erfanian
 le 16 Déc 2020
  
    
    
    
    
    Commenté : Mercede Erfanian
 le 17 Déc 2020
            Hello,
I wrote the code below to plot .wav/.mp3 files in both time and frequnency domains then filter each selected sound and plot again (bandpass filtering). The first part of the code works fine. Then the filter designer GUI pops up and I export the filter in Hd and run the rest of the code. The output (.wav or .mp3 and the last plot) seem to be the issue. Can you please help? I can not pinpoint what I did wrong. 
%% Filtering
% clear all; clc;close all;
[signal,Fs] = audioread('Rooster_un3 copy.mp3');
%% Check channels and convert to mono
if size(signal,2)==2
y= mean(signal,2);
else
y=signal;
end
Nsamps = length(y);
t = (1/Fs)*(1:Nsamps);         
soundsc(signal,Fs)
%% Time_domain plotting
subplot(3,1,1)
plot(t, y)
xlim ([0,5])
xlabel('Time (s)')
ylabel('Amplitude')
title ('Signal in Time-domain')
%% Fast Fourier Transform
yFT = fft(y);
%% Prepare plot FT
y_fft = abs(yFT);            %Retain Magnitude
y_fft = y_fft(1:floor(Nsamps/2));      %Discard Half of Points
f = Fs*(0:Nsamps/2-1)/Nsamps;   %Prepare freq data for plot
%% Frequency_domain plotting
subplot (3,1,2)
plot(f, y_fft)
xlim([0 20000])
xlabel('Frequency [Hz]');
ylabel('Magnitude');
title ('Signal in Frequency-domain')
%% Filtering
% filterDesigner
%% Generating bandpass filter and plotting
FilteredSignal = filter (Hd,y_fft);
FilteredSignalTransform =ifft (FilteredSignal);
subplot (3,1,3)
plot (abs(FilteredSignalTransform(:,1)));
xlim([0 20000])
xlabel('Frequency [Hz]');
ylabel('Magnitude');
title ('Filtered Signal in frquency_domain');
sound (FilteredSignal,Fs)
audiowrite('Filtered.wav',FilteredSignal,Fs)
PLEASE note that to run this code completely you need to design a filter. 
Thank you,
1 commentaire
  Jan
      
      
 le 16 Déc 2020
				What does "The output seem to be the issue" exactly mean? What do you get and what do you expect instead?
Réponse acceptée
  Mercede Erfanian
 le 16 Déc 2020
        1 commentaire
  Suresh Maddina
    
 le 17 Déc 2020
				
      Modifié(e) : Suresh Maddina
    
 le 17 Déc 2020
  
			It seems there is a mistake in your code 
FilteredSignal = filter (Hd,y_fft);
Should be corrected as,
FilteredSignal = filter (Hd,y); % Apply filter to original noise signal and not the FFT output
It gives correct output for "handel.mat" audio file. Attached the outputs and the code setup. The output file length is same as input file length. Please take a look into this
Plus de réponses (1)
  Suresh Maddina
    
 le 16 Déc 2020
        
      Modifié(e) : Suresh Maddina
    
 le 16 Déc 2020
  
      Hi, it is my understanding that you are using filterDesigner to remove high frequency noise from the audio file.  However, you are unable to obtain correct output using the filter Hd obtained from the filterDesigner 
In your code it seems you are applying the filter Hd to the fft output (y_fft) instead of the original audio signal (y). 
 Applying the filter to audio signal y as shown below would produce the output that you are looking for:
%% Filtering 
% filterDesigner 
%% Generating bandpass filter and plotting 
FilteredSignal = filter (Hd,y); % in your code this was FilteredSignal=filter(Hd,y_fft)  which is incorrect
Some references you may look at:
Voir également
Catégories
				En savoir plus sur Digital and Analog Filters dans Help Center et File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!