Echo generator problem - Coursera Introduction to Matlab Programming
    3 views (last 30 days)
  
       Show older comments
    
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 Comments
Answers (1)
  Muhammad Qaisar Ali
      
 on 27 Jun 2020
        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
0 Comments
See Also
Categories
				Find more on Pulsed Waveforms in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



