Question
Hello everyone!, I am using the following formula to determine the atmospheric absorption based on each frequency according to a given distance. The array of frequencies was given based on a third-octave band. myFreqArray = [25 32 40 50 63 79 100 126 158 200 251 316 398 501 631 794 1000 ... 1259 1585 1995 2512 3162 3981 5012 6310 7943 10000 12589 15849 19953]; %---------------- for f=myFreqArray z = 0.1068 * exp (-3352 / T) * (frN + f^2 / frN)^(-1); y = (T / To)^(-5/2) * (0.01275 * exp (-2239.1 / T) * (frO + f^2 / frO)^(-1) + z); alpha = 8.686 * f^2 * ((1.84 * 10^(-11) * (pa / pr)^(-1) * (T / To)^(1/2)) + y); %[dB/m] pt = pi * exp(-x * alpha * d) AtmosphericAbs=alpha*d; Aabs=20 * log10(pt/p0); Gain = Aabs - LdBinitial; end %myGainArray = [G1, G2, G3, G4, G5, G6, G7, G8, G9, G10, G11, G12, G13, G14, G15,... % G16, G17, G18, G19, G20, G21, G22, G23, G24, G25, G26, G27, G28, G29, G30]; release(graphicEQ); % Release system memory from previous run graphicEQ = oneThirdOctaveGraphicEQ; oneThirdOctaveGraphicEQ.Bandwidth = '1/3 octave'; oneThirdOctaveGraphicEQ.Gains = myGainArray; equalizer = graphicEQ; But I need help please to be able to take the result of the "Gain" output for all the frequencies and arrange them in an array based on the frequency array input. So I can use that output array to generate my graphic Eq.
Expert Answer
Prashant Kumar
PhD Expert
Answered Aug 28, 2026
Here is the corrected code:
myFreqArray = [25 32 40 50 63 79 100 126 158 200 251 316 398 501 631 794 1000 ...
1259 1585 1995 2512 3162 3981 5012 6310 7943 10000 12589 15849 19953];
%----------------
f = myFreqArray; % Renaming is optional that is for the sake of easiness of coding
for ii=1:numel(f);
z = 0.1068 * exp (-3352 / T) * (frN + f(ii)^2 / frN)^(-1);
y = (T / To)^(-5/2) * (0.01275 * exp (-2239.1 / T) * (frO + f(ii)^2 / frO)^(-1) + z);
alpha = 8.686 * f(ii)^2 * ((1.84 * 10^(-11) * (pa / pr)^(-1) * (T / To)^(1/2)) + y); %[dB/m]
pt = pi * exp(-x * alpha * d)
AtmosphericAbs=alpha*d;
Aabs=20 * log10(pt/p0);
Gain(ii) = Aabs - LdBinitial;
end
%myGainArray = [G1, G2, G3, G4, G5, G6, G7, G8, G9, G10, G11, G12, G13, G14, G15,...
% G16, G17, G18, G19, G20, G21, G22, G23, G24, G25, G26, G27, G28, G29, G30];
release(graphicEQ); % Release system memory from previous run
graphicEQ = oneThirdOctaveGraphicEQ;
oneThirdOctaveGraphicEQ.Bandwidth = '1/3 octave';
oneThirdOctaveGraphicEQ.Gains = myGainArray;
equalizer = graphicEQ;
100% Run Guarantee
3-Hour Fast-Track Delivery
Need a Custom Version or Complete Simulation for This Problem?
Our 500+ PhD engineers build, debug, and optimize working MATLAB scripts and Simulink (.slx) models tailored to your exact assignment rubrics with zero plagiarism.
Tested on MATLAB R2024b / R2026a
Turnitin 0% Plagiarism Report
Free 7-Day Revisions Guarantee
Have a different question? Ask here
Related Signal Processing Questions & Solutions
Browse All →
Explore similar technical troubleshooting questions and verified MATLAB solutions:
Ready-to-Run MATLAB & Simulink Projects
Browse All Projects →