Echo generator problem - Coursera Introduction to Matlab Programming

조회 수: 12 (최근 30일)
ey21
ey21 2020년 4월 18일
댓글: Onkar Arora 2023년 8월 1일
Hey all,
I am trying to program the solution to the Echo Blur problem (I have attached a screenshot below describing the task):
My code is written below, could anyone give me any pointers as to where I am going wrong?
function[output] = echo_gen(input, fs, delay, amp)
input = input'; %storing the column vector input as a row vector
samplesinthesrecording = length(input); %finding the number of samples in the input vector
numberofdelaysamples = round(delay)*fs; %finding the number of samples in the delay
sampleatwhichechostarts = numberofdelaysamples + 1; %finding the sample number at which the echo begins
soundbeforecho = input(input < input(sampleatwhichechostarts)); % the sound before the echo is playing during the samples which appear before the echo
amplifiedecho = input*amp; %the echo is amplified by an amount specified by amp
originalsoundplusecho = [soundbeforecho, amplifiedecho]; %I am binding the vector of samples for both the original sound and the echo
if min(originalsoundplusecho) < -1 || max(originalsoundplusecho) > 1 %I am making sure the values within the vector 'originalsoundplusecho' are less than 1 and greater than -1
normalisedvector = rescale(originalsoundplusecho,-1,1); %I am normalising the vector if the condition above is not met, making sure it is in the boundaries -1 to 1
output = normalisedvector'; %the output is the normalised vector
else
output = originalsoundplusecho'; %if the values of the vector 'originalsoundplusecho' are within -1 to 1, then the output is the vector 'originalsoundplusecho'
end
end
Here is the code to call the function:
load splat
output = echo_gen(y, Fs, 0.25, 0.6); %calling the function
dt = 1/Fs; %the interval between values on the x-axis
t = 0:dt:dt*(length(output)-1);%the x-axis scale
plot(t, output) %plotting the graph
Thank you very much!
  댓글 수: 8
ey21
ey21 2020년 4월 19일
편집: ey21 2020년 4월 19일
@Walter Roberson, thank you very much!
The code below works!
function[output] = echo_gen(input, fs, delay, amp)
numberofdelaysamples = round(delay*fs);
soundvectorplusecho = zeros(numberofdelaysamples + length(input),1);
soundvectorbeforecho = soundvectorplusecho;
for i = 1:length(input)
soundvectorplusecho(i + numberofdelaysamples) = input(i)*amp;
soundvectorbeforecho(i) = input(i);
end
fullsoundvector = soundvectorbeforecho + soundvectorplusecho;
range = abs(fullsoundvector);
maxrange = max(range);
if maxrange>1
fullsoundvector = fullsoundvector/maxrange;
end
output = fullsoundvector;
end

댓글을 달려면 로그인하십시오.

답변 (1개)

Muhammad Qaisar Ali
Muhammad Qaisar Ali 2020년 6월 27일
function output = echo_gen(input, fs, delay, amp)
delay_mat=zeros(round(delay*fs),1); % a col vector.
echo_mat=([delay_mat;input])*amp; % make echo col vector,input is a column vector.
output=input+echo_mat(1:length(input),1); % super imposing echo with origional input sound track.
output=[output;echo_mat(length(input)+1:end,1)];
if max(abs(output))>1 % scaling b/w -1,+1 throught relative scaling.
output=output/max(abs(output));
end
end

카테고리

Help CenterFile Exchange에서 Simulation, Tuning, and Visualization에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by