adding resource code references to work from, playing
This commit is contained in:
parent
7c30643c2c
commit
1828152664
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,3 +1,5 @@
|
|||||||
*~
|
*~
|
||||||
*#
|
*#
|
||||||
*.pdf
|
*.pdf
|
||||||
|
samples
|
||||||
|
*.asv
|
||||||
|
38
examples scripts/lpss_fft_example.m
Normal file
38
examples scripts/lpss_fft_example.m
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
close all;
|
||||||
|
clear all;
|
||||||
|
|
||||||
|
% PARAMS
|
||||||
|
Fs = 1000; % Sampling frequency
|
||||||
|
T = 1/Fs; % Sampling period
|
||||||
|
L = 1500; % Length of signal
|
||||||
|
t = (0:L-1)*T; % Time vector
|
||||||
|
|
||||||
|
% SIGNAL
|
||||||
|
S = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
|
||||||
|
|
||||||
|
% FINAL SIGNAL
|
||||||
|
%X = S + 2*randn(size(t));
|
||||||
|
X = S;
|
||||||
|
|
||||||
|
% PLOT TIME DOMAIN
|
||||||
|
figure(1)
|
||||||
|
plot(1000*t(1:50),X(1:50))
|
||||||
|
title('Signal Corrupted with Zero-Mean Random Noise')
|
||||||
|
xlabel('t (milliseconds)')
|
||||||
|
ylabel('X(t)')
|
||||||
|
|
||||||
|
% CALCULATE FFT
|
||||||
|
Y = fft(X);
|
||||||
|
|
||||||
|
P2 = abs(Y/L);
|
||||||
|
P1 = P2(1:L/2+1);
|
||||||
|
P1(2:end-1) = 2*P1(2:end-1);
|
||||||
|
|
||||||
|
f = Fs*(0:(L/2))/L;
|
||||||
|
|
||||||
|
% PLOT FREQ DOMAIN
|
||||||
|
figure(2)
|
||||||
|
plot(f,P1)
|
||||||
|
title('Single-Sided Amplitude Spectrum of X(t)')
|
||||||
|
xlabel('f (Hz)')
|
||||||
|
ylabel('|P1(f)|')
|
16
examples scripts/lpss_filter_example.m
Normal file
16
examples scripts/lpss_filter_example.m
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
close all;
|
||||||
|
clear all;
|
||||||
|
|
||||||
|
% b, a, x, (zi, dim)
|
||||||
|
% [y, zf]
|
||||||
|
|
||||||
|
% numerator = b
|
||||||
|
% demonitator = a
|
||||||
|
% signal = x
|
||||||
|
|
||||||
|
% initial conditions = zi
|
||||||
|
% dimension = dim
|
||||||
|
|
||||||
|
% final conditions = zf
|
||||||
|
|
||||||
|
% normalises a vector so a(1) is 1
|
30
examples scripts/lpss_lpc_example.m
Normal file
30
examples scripts/lpss_lpc_example.m
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
close all;
|
||||||
|
clear all;
|
||||||
|
|
||||||
|
% GENERATE SIGNAl
|
||||||
|
noise = randn(50000,1);
|
||||||
|
x = filter(1,[1 1/2 1/3 1/4], noise); % 3rd order forward predictor
|
||||||
|
x = x(end-4096+1:end); % last 4096 samples of AR process to avoid startup transients
|
||||||
|
|
||||||
|
% LPC
|
||||||
|
a = lpc(x,3); % signal, filter order
|
||||||
|
est_x = filter([0 -a(2:end)],1,x);
|
||||||
|
|
||||||
|
% COMPARE LAST 100 SAMPLES OF EACH
|
||||||
|
plot(1:100, x(end-100+1:end), 1:100,est_x(end-100+1:end), '--')
|
||||||
|
grid
|
||||||
|
xlabel('Sample Number')
|
||||||
|
ylabel('Amplitude')
|
||||||
|
legend('Original signal','LPC estimate')
|
||||||
|
|
||||||
|
% PREDICTION ERROR
|
||||||
|
e = x - est_x;
|
||||||
|
[acs, lags] = xcorr(e,'coeff');
|
||||||
|
|
||||||
|
% PLOT AUTOCORRELATION
|
||||||
|
figure(2)
|
||||||
|
plot(lags, acs)
|
||||||
|
grid
|
||||||
|
xlabel('Lags')
|
||||||
|
ylabel('Normalized Autocorrelation')
|
||||||
|
ylim([-0.1 1.1])
|
18
lpss_autocorr.m
Normal file
18
lpss_autocorr.m
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
%% lpss_autocorr.m
|
||||||
|
%%
|
||||||
|
%% Load wav and run through autocorr from econometrics toolbox
|
||||||
|
%% Used max range of m lags calculated from sample frequency
|
||||||
|
|
||||||
|
close all;
|
||||||
|
clear all;
|
||||||
|
|
||||||
|
[y, Fs] = audioread('samples/hood_m.wav');
|
||||||
|
sample_size = size(y);
|
||||||
|
L = sample_size(1); % number of samples
|
||||||
|
|
||||||
|
f0 = 60; % low-pitched male speech
|
||||||
|
%f0 = 600; % children
|
||||||
|
|
||||||
|
m = Fs / f0; % from lecture 2, max number of lags required to search
|
||||||
|
|
||||||
|
autocorr(y,'NumLags', m)
|
32
lpss_fft.m
Normal file
32
lpss_fft.m
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
%% lpss_fft.m
|
||||||
|
%%
|
||||||
|
%% Load wav and plot in frequency domain using fft
|
||||||
|
%% Construct proper one-sided function for display
|
||||||
|
|
||||||
|
close all;
|
||||||
|
clear all;
|
||||||
|
|
||||||
|
[y, Fs] = audioread('samples/hood_m.wav');
|
||||||
|
sample_size = size(y);
|
||||||
|
L = sample_size(1); % number of samples
|
||||||
|
|
||||||
|
% PLOT TIME DOMAIN
|
||||||
|
figure(1);
|
||||||
|
title('time domain')
|
||||||
|
plot(y);
|
||||||
|
xlabel('t (milliseconds)');
|
||||||
|
ylabel('X(t)');
|
||||||
|
|
||||||
|
% CALCULATE FFT
|
||||||
|
Y = fft(y);
|
||||||
|
P2 = abs(Y/L); % two-sided spectrum
|
||||||
|
P1 = P2(1:L/2+1); % single-sided spectrum
|
||||||
|
P1(2:end-1) = 2*P1(2:end-1);
|
||||||
|
f = Fs*(0:(L/2))/L;
|
||||||
|
|
||||||
|
% PLOT FFT
|
||||||
|
figure(2);
|
||||||
|
title('fft')
|
||||||
|
plot(f, P1);
|
||||||
|
xlabel('f (Hz)')
|
||||||
|
ylabel('|P1(f)|')
|
46
lpss_lpc.m
Normal file
46
lpss_lpc.m
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
%% lpss_lpc.m
|
||||||
|
%%
|
||||||
|
%% Load wav and calculate LPC coeffs
|
||||||
|
|
||||||
|
close all;
|
||||||
|
clear all;
|
||||||
|
|
||||||
|
ORDER = 40;
|
||||||
|
DISPLAY_SAMPLES = 1000;
|
||||||
|
|
||||||
|
% READ SIGNAL
|
||||||
|
[y, Fs] = audioread('samples/hood_m.wav');
|
||||||
|
sample_size = size(y);
|
||||||
|
L = sample_size(1); % number of samples
|
||||||
|
DISPLAY_SAMPLES = min([DISPLAY_SAMPLES L]);
|
||||||
|
|
||||||
|
for ITER=1:ORDER
|
||||||
|
|
||||||
|
% LPC
|
||||||
|
a = lpc(y,ITER); % signal, filter order
|
||||||
|
est_y = filter(0.02, a, y);
|
||||||
|
|
||||||
|
% PREDICTION ERROR
|
||||||
|
e = y - est_y;
|
||||||
|
[acs, lags] = xcorr(e,'coeff');
|
||||||
|
|
||||||
|
% COMPARE TWO SIGNALS
|
||||||
|
x = 1:DISPLAY_SAMPLES;
|
||||||
|
figure(2)
|
||||||
|
plot(x, y(end-DISPLAY_SAMPLES+1:end), x, est_y(end-DISPLAY_SAMPLES+1:end), '--')
|
||||||
|
%plot(x, y(end-DISPLAY_SAMPLES+1:end))
|
||||||
|
%plot(x, est_y(end-DISPLAY_SAMPLES+1:end))
|
||||||
|
grid
|
||||||
|
xlabel('Sample Number')
|
||||||
|
ylabel('Amplitude')
|
||||||
|
legend('Original signal','LPC estimate')
|
||||||
|
|
||||||
|
% PLOT AUTOCORRELATION
|
||||||
|
% figure(2)
|
||||||
|
% plot(lags, acs)
|
||||||
|
% grid
|
||||||
|
% xlabel('Lags')
|
||||||
|
% ylabel('Normalized Autocorrelation')
|
||||||
|
% ylim([-0.1 1.1])
|
||||||
|
|
||||||
|
end
|
10
lpss_play.m
Normal file
10
lpss_play.m
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
%% lpss_play.m
|
||||||
|
%%
|
||||||
|
%% Load wav and play
|
||||||
|
|
||||||
|
close all;
|
||||||
|
clear all;
|
||||||
|
|
||||||
|
[y, Fs] = audioread('samples/ee.wav');
|
||||||
|
size(y)
|
||||||
|
sound(y, Fs)
|
20
lpss_spectrogram.m
Normal file
20
lpss_spectrogram.m
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
%% lpss_spectrogram.m
|
||||||
|
%%
|
||||||
|
%% Load wav and plot spectrogram
|
||||||
|
|
||||||
|
close all;
|
||||||
|
clear all;
|
||||||
|
|
||||||
|
WINDOW_NUMBER = 20;
|
||||||
|
|
||||||
|
% matrix by audio channel and sample frequency
|
||||||
|
[y, Fs] = audioread('samples/hood_m.wav');
|
||||||
|
sample_size = size(y);
|
||||||
|
window_size = round(sample_size(1) / ((WINDOW_NUMBER + 1)/2));
|
||||||
|
|
||||||
|
freqRes = Fs / window_size
|
||||||
|
timeRes = window_size / Fs
|
||||||
|
|
||||||
|
spectrogram(y, window_size, round(window_size/2), [], Fs, 'yaxis');
|
||||||
|
%view(-45, 65) % For spinning the map on its axis for a 3D view
|
||||||
|
%colormap bone % grayscale
|
27
lpss_spectrogram_iter.m
Normal file
27
lpss_spectrogram_iter.m
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
%% lpss_spectrogram_iter.m
|
||||||
|
%%
|
||||||
|
%% Load wav and plot spectrogram for iterating window sizes
|
||||||
|
|
||||||
|
close all;
|
||||||
|
clear all;
|
||||||
|
|
||||||
|
%WINDOW_NUMBER = 20;
|
||||||
|
|
||||||
|
% matrix by audio channel and sample frequency
|
||||||
|
[y, Fs] = audioread('samples/hood_m.wav');
|
||||||
|
sample_size = size(y);
|
||||||
|
|
||||||
|
for WINDOW_NUMBER=1:50
|
||||||
|
|
||||||
|
window_size = round(sample_size(1) / ((WINDOW_NUMBER + 1)/2));
|
||||||
|
|
||||||
|
freqRes = Fs / window_size;
|
||||||
|
timeRes = window_size / Fs;
|
||||||
|
|
||||||
|
spectrogram(y, window_size, round(window_size/2), [], Fs, 'yaxis');
|
||||||
|
%view(-45, 65) % For spinning the map on its axis for a 3D view
|
||||||
|
%colormap bone % grayscale
|
||||||
|
|
||||||
|
pause(0.05);
|
||||||
|
|
||||||
|
end
|
Loading…
Reference in New Issue
Block a user