From c386637809bf5660c2d23a452c3d1b78176b916e Mon Sep 17 00:00:00 2001 From: TurtleEmperorx Date: Thu, 9 Dec 2021 01:30:51 -0800 Subject: [PATCH 1/5] Added Target Dampen and Amplify functions Amplify or dampen an area around the target frequencies. It can handle dual channel audio (like the strong bassline) --- src/AnuragDampenTarget.m | 52 ++++++++++++++++++++++++++++++++++++++ src/AnuragEnchanceTarget.m | 52 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 src/AnuragDampenTarget.m create mode 100644 src/AnuragEnchanceTarget.m diff --git a/src/AnuragDampenTarget.m b/src/AnuragDampenTarget.m new file mode 100644 index 0000000..29d3576 --- /dev/null +++ b/src/AnuragDampenTarget.m @@ -0,0 +1,52 @@ +function output_x = AnuragDampenTarget(x, Fs,TARGET, AreaPercentage) +%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 + [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 \ No newline at end of file diff --git a/src/AnuragEnchanceTarget.m b/src/AnuragEnchanceTarget.m new file mode 100644 index 0000000..33923ce --- /dev/null +++ b/src/AnuragEnchanceTarget.m @@ -0,0 +1,52 @@ +function output_x = AnuragEnchanceTarget(x, Fs,TARGET, AreaPercentage) +%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 + [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 \ No newline at end of file From 95a079e224204e68ebb55fca60497ab46f685d6d Mon Sep 17 00:00:00 2001 From: TurtleEmperorx Date: Thu, 9 Dec 2021 18:26:28 -0800 Subject: [PATCH 2/5] Added two Filters that enhance and dampen around a target range Filter format matches readme. Can handle dual channel audio --- src/AnuragDampenTarget.m | 4 +++- src/AnuragEnchanceTarget.m | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/AnuragDampenTarget.m b/src/AnuragDampenTarget.m index 29d3576..41b529b 100644 --- a/src/AnuragDampenTarget.m +++ b/src/AnuragDampenTarget.m @@ -1,4 +1,4 @@ -function output_x = AnuragDampenTarget(x, Fs,TARGET, AreaPercentage) +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. @@ -8,6 +8,8 @@ function output_x = AnuragDampenTarget(x, Fs,TARGET, AreaPercentage) % 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); diff --git a/src/AnuragEnchanceTarget.m b/src/AnuragEnchanceTarget.m index 33923ce..9a348b0 100644 --- a/src/AnuragEnchanceTarget.m +++ b/src/AnuragEnchanceTarget.m @@ -1,4 +1,4 @@ -function output_x = AnuragEnchanceTarget(x, Fs,TARGET, AreaPercentage) +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. @@ -8,6 +8,8 @@ function output_x = AnuragEnchanceTarget(x, Fs,TARGET, AreaPercentage) % 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); From eebe4150c64e26a3f8ffa62c5a4adf238741ba65 Mon Sep 17 00:00:00 2001 From: TurtleEmperorx Date: Thu, 9 Dec 2021 18:28:02 -0800 Subject: [PATCH 3/5] relocated --- src/{ => Filter}/AnuragDampenTarget.m | 0 src/{ => Filter}/AnuragEnchanceTarget.m | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename src/{ => Filter}/AnuragDampenTarget.m (100%) rename src/{ => Filter}/AnuragEnchanceTarget.m (100%) diff --git a/src/AnuragDampenTarget.m b/src/Filter/AnuragDampenTarget.m similarity index 100% rename from src/AnuragDampenTarget.m rename to src/Filter/AnuragDampenTarget.m diff --git a/src/AnuragEnchanceTarget.m b/src/Filter/AnuragEnchanceTarget.m similarity index 100% rename from src/AnuragEnchanceTarget.m rename to src/Filter/AnuragEnchanceTarget.m From 215d9e2b9f467257d5118c3db883735d41888395 Mon Sep 17 00:00:00 2001 From: TurtleEmperorx Date: Thu, 9 Dec 2021 18:56:30 -0800 Subject: [PATCH 4/5] updated FilterSelect --- src/AnuragEnchanceTarget.m | 54 +++++++++++++++++++ ...EnchanceTarget.m => AnuragEnhanceTarget.m} | 0 src/Select/FilterSelect.m | 4 ++ 3 files changed, 58 insertions(+) create mode 100644 src/AnuragEnchanceTarget.m rename src/Filter/{AnuragEnchanceTarget.m => AnuragEnhanceTarget.m} (100%) diff --git a/src/AnuragEnchanceTarget.m b/src/AnuragEnchanceTarget.m new file mode 100644 index 0000000..a43ebfe --- /dev/null +++ b/src/AnuragEnchanceTarget.m @@ -0,0 +1,54 @@ +function output_x = AnuragEnhanceTarget(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 \ No newline at end of file diff --git a/src/Filter/AnuragEnchanceTarget.m b/src/Filter/AnuragEnhanceTarget.m similarity index 100% rename from src/Filter/AnuragEnchanceTarget.m rename to src/Filter/AnuragEnhanceTarget.m diff --git a/src/Select/FilterSelect.m b/src/Select/FilterSelect.m index 659a0d1..6e5c61c 100644 --- a/src/Select/FilterSelect.m +++ b/src/Select/FilterSelect.m @@ -19,6 +19,10 @@ function output = FilterSelect(input,Fs,LOW,MED,HIGH,number) output = seperate_prevalent_schluep(input, Fs, LOW, MED, HIGH); elseif(number == "Option 6") 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 output = input; end From 8bc3ad3b855558eea9cacbf2df0b60f8743b0f30 Mon Sep 17 00:00:00 2001 From: TurtleEmperorx Date: Fri, 10 Dec 2021 13:55:36 -0800 Subject: [PATCH 5/5] moved filters out of subfolder --- src/{Filter => }/AnuragDampenTarget.m | 0 src/AnuragEnchanceTarget.m | 54 -------------------------- src/{Filter => }/AnuragEnhanceTarget.m | 0 3 files changed, 54 deletions(-) rename src/{Filter => }/AnuragDampenTarget.m (100%) delete mode 100644 src/AnuragEnchanceTarget.m rename src/{Filter => }/AnuragEnhanceTarget.m (100%) diff --git a/src/Filter/AnuragDampenTarget.m b/src/AnuragDampenTarget.m similarity index 100% rename from src/Filter/AnuragDampenTarget.m rename to src/AnuragDampenTarget.m diff --git a/src/AnuragEnchanceTarget.m b/src/AnuragEnchanceTarget.m deleted file mode 100644 index a43ebfe..0000000 --- a/src/AnuragEnchanceTarget.m +++ /dev/null @@ -1,54 +0,0 @@ -function output_x = AnuragEnhanceTarget(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 \ No newline at end of file diff --git a/src/Filter/AnuragEnhanceTarget.m b/src/AnuragEnhanceTarget.m similarity index 100% rename from src/Filter/AnuragEnhanceTarget.m rename to src/AnuragEnhanceTarget.m