📖 Scenario: You are working on a simple audio processing task. You have a short audio signal represented as a vector of sample values. You want to analyze and modify this signal step-by-step.
🎯 Goal: Build a MATLAB script that loads a short audio signal, sets a threshold, filters the signal based on this threshold, and then outputs the filtered signal.
📋 What You'll Learn
Create a vector variable with exact audio sample values
Create a threshold variable with an exact value
Use a logical indexing operation to filter the audio samples above the threshold
Display the filtered audio samples using disp
💡 Why This Matters
🌍 Real World
Audio signal processing is used in music editing, noise reduction, and voice recognition to analyze and improve sound quality.
💼 Career
Understanding basic audio processing helps in roles like audio engineering, software development for media apps, and research in signal processing.
Progress0 / 4 steps
1
Create the audio signal vector
Create a vector called audioSignal with these exact sample values: [0.1, 0.5, 0.3, 0.7, 0.2, 0.9, 0.4]
MATLAB
Hint
Use square brackets to create a vector with the exact numbers separated by commas.
2
Set the threshold value
Create a variable called threshold and set it to the value 0.5
MATLAB
Hint
Use the assignment operator = to set the variable threshold.
3
Filter the audio signal above the threshold
Create a new vector called filteredSignal that contains only the values from audioSignal that are greater than threshold using logical indexing
MATLAB
Hint
Use audioSignal(audioSignal > threshold) to select values above the threshold.
4
Display the filtered audio signal
Use disp to display the contents of filteredSignal
MATLAB
Hint
Use disp(filteredSignal) to show the filtered values in the command window.
Practice
(1/5)
1. What does the MATLAB function audioread do in audio signal processing?
easy
A. It saves audio data to a file.
B. It plays the audio sound through speakers.
C. It reads an audio file and loads the sound data into MATLAB.
D. It filters the audio signal to remove noise.
Solution
Step 1: Understand the purpose of audioread
The function audioread is used to load audio data from a file into MATLAB as a vector or matrix.
Step 2: Differentiate from other audio functions
Functions like sound play audio, audiowrite saves audio, and filter processes signals. audioread only reads data.
Final Answer:
It reads an audio file and loads the sound data into MATLAB. -> Option C
Quick Check:
audioread = read audio data [OK]
Hint: Remember: 'read' means load data, not play or save [OK]
Common Mistakes:
Confusing audioread with sound
Thinking it saves audio instead of loading
Assuming it filters or changes the audio
2. Which of the following is the correct syntax to apply a simple low-pass filter b, a to an audio signal x in MATLAB?
easy
A. y = filter(b, a, x);
B. y = filter(x, b, a);
C. y = filter(a, b, x);
D. y = filter(x, a, b);
Solution
Step 1: Recall the filter function syntax
The MATLAB filter function syntax is y = filter(b, a, x); where b and a are filter coefficients and x is the input signal.
Step 2: Identify correct argument order
Options A, C, and D have the arguments in wrong order, which will cause errors or wrong output.
Final Answer:
y = filter(b, a, x); -> Option A
Quick Check:
filter(b, a, x) = correct syntax [OK]
Hint: Filter syntax is always filter(b, a, x) [OK]
Common Mistakes:
Swapping filter coefficients order
Putting signal before coefficients
Using wrong variable names
3. What will be the output size of y after running this MATLAB code?
x = randn(44100,1); % 1 second noise at 44.1kHz
b = [1 0 0.5]; a = 1;
y = filter(b, a, x);
medium
A. An error due to filter coefficients
B. A vector of size 44102x1
C. A scalar value
D. A vector of size 44100x1
Solution
Step 1: Understand input and filter output length
The input x is a 44100x1 vector. The filter function outputs a vector of the same length as input.
Step 2: Check filter coefficients validity
Coefficients b and a are valid. No error occurs. Output y matches input size.
A. The length of y(delay:end) and x(1:end-delay) do not match.
B. The variable echoGain should be greater than 1.
C. The indexing delay:end is invalid for vector y.
D. The echo effect requires a filter function, not direct addition.
Solution
Step 1: Check vector lengths in addition
The segment y(delay:end) has length length(y) - delay + 1. The segment x(1:end-delay) has length length(x) - delay. They differ by 1, causing a dimension mismatch error.
Step 2: Eliminate other options
A: Indexing is valid. B: echoGain=0.6 <1 is appropriate for decaying echo. D: Direct indexing addition works for simple echo.
Final Answer:
The length of y(delay:end) and x(1:end-delay) do not match. -> Option A
Quick Check:
len(y(delay:end))=N-d+1 vs len(x(1:end-d))=N-d [OK]
Hint: Check lengths of vectors before adding [OK]
Common Mistakes:
Assuming echoGain must be >1
Thinking filter is required for echo
Ignoring vector length mismatch
5. You want to create a MATLAB function that adds an echo effect to an audio signal x sampled at Fs. The echo delay is 0.3 seconds and echo gain is 0.5. Which code correctly implements this?
hard
A. function y = addEcho(x, Fs)
delaySamples = round(0.3 * Fs);
y = x;
y(delaySamples+1:end) = y(delaySamples+1:end) + 0.5*x(1:end-delaySamples);
end
B. function y = addEcho(x, Fs)
delaySamples = round(0.3 * Fs);
y = filter([1 zeros(1,delaySamples-1) 0.5], 1, x);
end
C. function y = addEcho(x, Fs)
delaySamples = round(0.3 * Fs);
y = x + 0.5 * [zeros(delaySamples,1); x];
end
D. function y = addEcho(x, Fs)
delaySamples = round(0.3 * Fs);
y = zeros(length(x)+delaySamples,1);
y(1:length(x)) = x;
y(delaySamples+1:end) = y(delaySamples+1:end) + 0.5*x;
end
Solution
Step 1: Understand echo effect implementation
Echo is created by adding a delayed and scaled copy of the signal to itself. Using filter with coefficients [1 zeros(1,delaySamples-1) 0.5] adds original plus delayed echo.
Step 2: Evaluate each option
function y = addEcho(x, Fs)
delaySamples = round(0.3 * Fs);
y = zeros(length(x)+delaySamples,1);
y(1:length(x)) = x;
y(delaySamples+1:end) = y(delaySamples+1:end) + 0.5*x;
end extends length but adds full x without delay in echo part. function y = addEcho(x, Fs)
delaySamples = round(0.3 * Fs);
y = x;
y(delaySamples+1:end) = y(delaySamples+1:end) + 0.5*x(1:end-delaySamples);
end correctly indexes x to match lengths. function y = addEcho(x, Fs)
delaySamples = round(0.3 * Fs);
y = x + 0.5 * [zeros(delaySamples,1); x];
end adds vectors of different lengths causing error. function y = addEcho(x, Fs)
delaySamples = round(0.3 * Fs);
y = filter([1 zeros(1,delaySamples-1) 0.5], 1, x);
end correctly uses filter with proper coefficients.
Final Answer:
function y = addEcho(x, Fs)
delaySamples = round(0.3 * Fs);
y = filter([1 zeros(1,delaySamples-1) 0.5], 1, x);
end -> Option B
Quick Check:
Use filter with delayed coefficients for echo [OK]
Hint: Use filter with delayed coefficients for echo [OK]
Common Mistakes:
Adding vectors of different lengths directly
Forgetting to delay the echo signal
Incorrect indexing causing errors
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.