+1 (315) 557-6473 

Matlab Program to Process Digital Audio Assignment Solution.


Instructions

Objective
Write a program to process digital audio in matlab.

Requirements and Specifications

program to process digital audio in matlab

Source Code

P1 A

%----------------------------------------------------------

% P1a

%

% Make a 2 second digital audio signal that contains a pure

% cosine tone with analog frequency 440 Hz.

% - play the signal through the sound card

% - plot the centered DFT magnitude in dB against

% Hertzian analog freq, radian digital freq,

% and normalized digital freq.

% - Write the signal to a wave file, read it back in, and

% play it through the sound card again.

%

Fs = 44100; % sampling frequency in Hz

N = Fs * 2; % length of the 2 sec signal

n = 0:N-1; % discrete time variable

f_analog = 5e3; % analog frequency in Hz

w_dig = 2*pi*f_analog/Fs; % radian digital frequency

x = cos(w_dig * n); % the signal

% Normalize samples to the range [-1,1]

% Not really needed here b/c cos is already in this range,

% but done anyway to illustrate how you normalize.

x = x / max(abs(x));

sound(x,Fs,16); % play it through sound card

X = fftshift(fft(x)); % centered DFT

Xmag = abs(X); % centered DFT magnitude

XmagdB = 20*log10(Xmag); % convert to dB

% Plot the centered magnitude against analog frequency

w = -pi:2*pi/N:pi-2*pi/N; % dig rad freq vector

f = w * Fs /(2*pi); % analog freq vector

figure(1);

plot(f,XmagdB);

xlim([-20000 20000]);

title("Centered DFT Magnitude for 5 kHz Pure Tone");

xlabel("analog frequency, Hz");

ylabel("dB");

% Plot the centered magnitude against radian digital freq

figure(2);

plot(w,XmagdB);

xlim([-pi pi]);

title("Centered DFT Magnitude for 5 kHz Pure Tone");

xlabel("radian digital frequency \omega");

ylabel("dB");

% Plot against normalized digital frequency

figure(3);

plot(w/pi,XmagdB);

xlim([-1 1]);

title("Centered DFT Magnitude for 5 kHz Pure Tone");

xlabel("normalized digital frequency \omega/\pi");

ylabel("dB");

% wait 3 seconds in case sound card is still busy

pause(3);

audiowrite("A-5000.wav",x,Fs); % write to wave file

[x2,Fs] = audioread("A-5000.wav"); % read it back in

sound(x2,Fs,16); % play it again Sam!

P2 A

%----------------------------------------------------------

% P2a

%

% Make some digital audio signals and demonstrate filtering.

% All signals are 4 seconds in duration.

% - Make x1 a 250 Hz pure tone.

% - Play x1 through the sound card.

% - Make x2 a swept frequency chirp from 1 kHz to 3 kHz.

% - Play x2 through the sound card.

% - Make x3 = x1 + x2.

% - Play x3 through the sound card.

% - Apply a lowpass digital Butterworth filter to x3 to

% keep the pure tone and reject the chirp.

% - Play the filtered signal through the sound card.

% - Apply a highpass digital Butterworth filter to x3 to

% keep the chirp and reject the pure tone.

% - Play the filtered signal through the sound card.

%

Fs = 44100; % sampling frequency in Hz

N = Fs * 4; % length of the 4 sec signal

n = 0:N-1; % discrete time variable

% Make x1 a 250 Hz pure tone

f_analog = 1e3; % pure tone analog frequency

w_dig = 2*pi*f_analog/Fs; % radian digital frequency

x1 = cos(w_dig * n); % the pure tone

sound(x1,Fs,16); % play it through sound card

pause(5); % wait for sound card to clear

% Make x2 4-second cosine pure tone with analog frequency 3kHz

Fs = 44100; % sampling frequency in Hz

N = Fs * 4; % length of the 4 sec signal

n = 0:N-1; % discrete time variable

% Make x1 a 250 Hz pure tone

f_analog = 3e3; % pure tone analog frequency

w_dig = 2*pi*f_analog/Fs; % radian digital frequency

x2 = cos(w_dig * n); % the pure tone

sound(x2,Fs,16); % play it through sound card

pause(5); % wait for sound card to clear

% Add the two signals

x3 = x1 + x2;

x3 = x3 / max(abs(x3)); % normalize the range to [-1,1]

sound(x3,Fs,16); % play it through sound card

pause(5); % wait for sound card to clear

% Use a lowpass digital Butterworth filter to keep the 250 Hz

% pure tone and reject the chirp.

w_dig = 2*pi*1e3 /Fs;

w_start_dig = 2*pi*3e3/Fs;

Wp = w_dig/pi; % normalized passband edge freq

Ws = w_start_dig/pi; % normalized stopband edge freq

Rp = 1; % max passband ripple

Rs = 60; % min stopband attenuation

[Nf, Wn] = buttord(Wp,Ws,Rp,Rs); % design filter order

[num,den] = butter(Nf,Wn); % design the filter

h=fvtool(num,den); % show frequency response

figure(2);

freqz(num,den,1024); % plot frequency response

title("Lowpass Frequency Response");

y1 = filter(num,den,x3); % apply the filter

y1 = y1 / max(abs(y1)); % normalize filtered signal

sound(y1,Fs,16); % play it through sound card

QUESTION 3

clc, clear all, close all

%% Question 3

% Read noisyavg.wav

[y1, Fs] = audioread('noisysig.wav');

[y2, Fs] = audioread('noisesamp.wav');

% Read

% Play

% sound(y, Fs)

% Get length of signals

N1 = length(y1);

N2 = length(y2);

% DFT magnitude plots for both signals

Y1 = fftshift(fft(y1)); % centered DFT

Ymag1 = abs(Y1); % centered DFT magnitude

YmagdB1 = 20*log10(Ymag1); % convert to dB

% Plot the centered magnitude against analog frequency

w1 = -pi:2*pi/N1:pi-2*pi/N1; % dig rad freq vector

f1 = w1 * Fs /(2*pi); % analog freq vector

Y2 = fftshift(fft(y2)); % centered DFT

Ymag2 = abs(Y2); % centered DFT magnitude

YmagdB2 = 20*log10(Ymag2); % convert to dB

% Plot the centered magnitude against analog frequency

w2 = -pi:2*pi/N2:pi-2*pi/N2; % dig rad freq vector

f2 = w2 * Fs /(2*pi); % analog freq vector

figure

subplot(1,2,1)

plot(w1/pi,YmagdB1);

xlim([-1, 1]);

title("Centered DFT Magnitude for noisysig.wav");

xlabel("normalized digital frequency \omega/\pi");

ylabel("dB");

grid on

subplot(1,2,2)

plot(w2/pi,YmagdB2);

xlim([-1, 1]);

title("Centered DFT Magnitude for noisesamp.wav");

xlabel("normalized digital frequency \omega/\pi");

ylabel("dB");

grid on

% Lowpass filter

w_dig = 2*pi*2.5e3 /Fs;

w_start_dig = 2*pi*5e3/Fs;

Wp = w_dig/pi; % normalized passband edge freq

Ws = w_start_dig/pi; % normalized stopband edge freq

Rp = 1; % max passband ripple

Rs = 60; % min stopband attenuation

[Nf, Wn] = buttord(Wp,Ws,Rp,Rs); % design filter order

[num,den] = butter(Nf,Wn); % design the filter

figure

h=fvtool(num,den); % show frequency response

y3 = filter(num, den, y1);

Y3 = fftshift(fft(y3)); % centered DFT

Ymag3 = abs(Y3); % centered DFT magnitude

YmagdB3 = 20*log10(Ymag3); % convert to dB

% Plot the centered magnitude against analog frequency

figure(3)

plot(f1,YmagdB3);

xlim([-1, 1]);

title("Centered DFT Magnitude for filtered noisysig.wav");

xlabel("normalized digital frequency \omega/\pi");

ylabel("dB");

grid on

sound(y3, Fs)

audiowrite("filteredsig.wav",y3,Fs); % write to wave file