how do i seperate two different frequencies in one sound?

I have an voice record. It contains a man's speech and another dominant voice with different frequency.
How can i seperate them? Also, how can i delete jammer effect of dominant tone voice.

6 Comments

Use fft get the frequencies.....and then use filters to remove the frequencies.
Read about fft, butterworth.
Ok, i am going to check fft and butterworth. Thx KSSV.
This could be a ‘blind source separation’ problem. The rica and ReconstructionICA functions could be appropriate.
@KSSV and @Star Strider thanks for your helps guys.
I completed the project. I used Fourier Transform(fft) and Band-Pass Filter. I am sharing the codes and screenshots for community.
clear all;close all;clc; % Clear everything
[data, Fs] = audioread('sound1.wav'); % Define sound document
D= fft(data); % Fourier Transform of data of our sound
plot(real(D)); % Plot the real part of fourier transform.
I found human voice frequencies at the result of fourier transform. It is between 1500-7500Hz. So i want to take just this frequencies. Then i made an Band-Pass Filter.
Band-Pass Filter
clear all;close all;clc; % Clear everything
[data, Fs] = audioread('sound1.wav'); % Define sound document
N=128; % Order of filter
Fn = Fs/2; % Nyquist Freq
fc1 = 1500/Fn; % Cut_Off Freq 1 - 1500Hz
fc2 = 7500/Fn; % Cut_Off Freq 2 - 7500Hz
B = fir1(N, [fc1 fc2], 'bandpass'); % Band-Pass Filter
ses_filtered = filtfilt(B, 1, data); % Apply filter
sound(ses_filtered,Fs); % Play the filtered sound
audiowrite('sound_result.wav',ses_filtered,Fs); %record the new sound
So, the first subplot(2,1,1) shows my raw sound, which has noise in high frequency.
Second subplot(2,1,2) shows the result.

Sign in to comment.

 Accepted Answer

I completed the project. I used Fourier Transform(fft) and Band-Pass Filter. I am sharing the codes and screenshots for community.
clear all;close all;clc; % Clear everything
[data, Fs] = audioread('sound1.wav'); % Define sound document
D= fft(data); % Fourier Transform of data of our sound
plot(real(D)); % Plot the real part of fourier transform.
I found human voice frequencies at the result of fourier transform. It is between 1500-7500Hz. So i want to take just this frequencies. Then i made an Band-Pass Filter.
Band-Pass Filter
clear all;close all;clc; % Clear everything
[data, Fs] = audioread('sound1.wav'); % Define sound document
N=128; % Order of filter
Fn = Fs/2; % Nyquist Freq
fc1 = 1500/Fn; % Cut_Off Freq 1 - 1500Hz
fc2 = 7500/Fn; % Cut_Off Freq 2 - 7500Hz
B = fir1(N, [fc1 fc2], 'bandpass'); % Band-Pass Filter
ses_filtered = filtfilt(B, 1, data); % Apply filter
sound(ses_filtered,Fs); % Play the filtered sound
audiowrite('sound_result.wav',ses_filtered,Fs); %record the new sound
So, the first subplot(2,1,1) shows my raw sound, which has noise in high frequency.
Second subplot(2,1,2) shows the result.

More Answers (0)

Categories

Find more on Simulation, Tuning, and Visualization in Help Center and File Exchange

Products

Release

R2020a

Asked:

on 11 Mar 2022

Commented:

on 12 Mar 2022

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!