Merge pull request #48 from ltcptgeneral/Anurag_Filters

Anurag filters
This commit is contained in:
TurtleEmperorx 2021-12-10 14:08:24 -08:00 committed by GitHub
commit 6e15bdceb8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 112 additions and 0 deletions

54
src/AnuragDampenTarget.m Normal file
View File

@ -0,0 +1,54 @@
function output_x = AnuragDampenTarget(x, Fs,LOW, MID, HIGH)
%Dampen a range of frequencies a percentage around the target frequency
%Also maintain the other frequencies so that the target is muted
%percentage is expressed as a number between 0 and 1.
%target is the midpoint of the frequency range to dampen
%x and Fs are the signal and frequency
% CONTRIBUTORS:
% Anurag Jadhav: function creator
% Detailed explanation goes here
TARGET = MID;
AreaPercentage = 0.15;
[dim,len] = size(x); %get length of the input
F = Fs * ((-len/2) : ((len/2) - 1)) / len;
lenf = length(F);
Mod_Freq = ifft(fft(x)); %Fourier Transform of the input signal
output = zeros([1,lenf]); % zero array of size Mod_freq
if(dim == 2) %check for dual channel audio
F = [F;F];
output = [output;output];
end
%set the bounds
lowerBound = (1-AreaPercentage) * TARGET;
upperBound = (1+AreaPercentage) * TARGET;
%% Dampen the target frequencies and maintain the others
if(dim == 2) %iterate through both channels if track is dual channel
for n = 1:lenf
if ((lowerBound < abs(F(1,n))) && abs(F(1,n)) < upperBound)
output(1,n) = 1;
else
output(1,n) = 0.5;
end
end
for n = 1:lenf
if ((lowerBound < abs(F(2,n))) && abs(F(2,n)) < upperBound)
output(2,n) = 1;
else
output(2,n) = .5;
end
end
else %iterate onnly once for monochannel
for n = 1:lenf
if ((lowerBound < abs(F(n))) && abs(F(n)) < upperBound)
output(n) = 1;
else
output(n) = .5;
end
end
end
%%Filter the original signal and transform
filtered_Mod_Freq = fftshift(Mod_Freq .* output);
output_x = real(ifft(filtered_Mod_Freq));
end

54
src/AnuragEnhanceTarget.m Normal file
View File

@ -0,0 +1,54 @@
function output_x = AnuragEnchanceTarget(x, Fs,LOW, MID, HIGH)
%Amplify a range of frequencies a percentage around the target frequency
%Also damnpen the other frequencies so that the target is easier to hear
%percentage is expressed as a number between 0 and 1.
%target is the midpoint of the frequency range to amplify
%x and Fs are the signal and frequency
% CONTRIBUTORS:
% Anurag Jadhav: function creator
% Detailed explanation goes here
TARGET = MID;
AreaPercentage = 0.15;
[dim,len] = size(x); %get length of the input
F = Fs * ((-len/2) : ((len/2) - 1)) / len;
lenf = length(F);
Mod_Freq = ifft(fft(x)); %Fourier Transform of the input signal
output = zeros([1,lenf]); % zero array of size Mod_freq
if(dim == 2) %check for dual channel audio
F = [F;F];
output = [output;output];
end
%set the bounds
lowerBound = (1-AreaPercentage) * TARGET;
upperBound = (1+AreaPercentage) * TARGET;
%% Amplify the target frequencies and dampen the others
if(dim == 2) %iterate through both channels if track is dual channel
for n = 1:lenf
if ((lowerBound < abs(F(1,n))) && abs(F(1,n)) < upperBound)
output(1,n) = 2;
else
output(1,n) = 0.75;
end
end
for n = 1:lenf
if ((lowerBound < abs(F(2,n))) && abs(F(2,n)) < upperBound)
output(2,n) = 2;
else
output(2,n) = 0.75;
end
end
else %iterate onnly once for monochannel
for n = 1:lenf
if ((lowerBound < abs(F(n))) && abs(F(n)) < upperBound)
output(n) = 2;
else
output(n) = 0.75;
end
end
end
%%Filter the original signal and transform
filtered_Mod_Freq = fftshift(Mod_Freq .* output);
output_x = real(ifft(filtered_Mod_Freq));
end

View File

@ -19,6 +19,10 @@ function output = FilterSelect(input,Fs,LOW,MED,HIGH,number)
output = seperate_prevalent_schluep(input, Fs, LOW, MED, HIGH); output = seperate_prevalent_schluep(input, Fs, LOW, MED, HIGH);
elseif(number == "Option 6") elseif(number == "Option 6")
output = bandreject_filter(input, Fs, LOW, HIGH); output = bandreject_filter(input, Fs, LOW, HIGH);
elseif(number == "Option 7")
output = AnuragEnhanceTarget(input, Fs, LOW,MID, HIGH);
elseif(number == "Option 8")
output = AnuragDampenTarget(input, Fs, LOW,MID, HIGH);
else else
output = input; output = input;
end end