Echo generator problem - Coursera Introduction to Matlab Programming
조회 수: 12 (최근 30일)
이전 댓글 표시
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
답변 (1개)
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
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Simulation, Tuning, and Visualization에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!