Compare commits
2 Commits
8f89d076e6
...
4cfaf94544
| Author | SHA1 | Date |
|---|---|---|
|
|
4cfaf94544 | |
|
|
aaec5b54fa |
Binary file not shown.
Binary file not shown.
|
|
@ -1,30 +1,117 @@
|
||||||
|
%loading the signal library in octave
|
||||||
pkg load signal
|
pkg load signal
|
||||||
clear all
|
clear all
|
||||||
close all
|
close all
|
||||||
|
|
||||||
[y,fs]=audioread('modulator22.wav');
|
%reading of the orignial signal in data
|
||||||
|
[y,fs]=audioread('./data/modulator22.wav');
|
||||||
|
|
||||||
|
%calculation of the time from the sampling frequency
|
||||||
t=0:1/fs:length(y)/fs-1/fs;
|
t=0:1/fs:length(y)/fs-1/fs;
|
||||||
|
|
||||||
|
%showing the original signal
|
||||||
##figure;
|
##figure;
|
||||||
##set(gcf, 'name','Signal of origin');
|
##set(gcf, 'name','Signal of origin');
|
||||||
##plot(t,y);
|
##plot(t,y);
|
||||||
##xlabel('time(s)');
|
##xlabel('time(s)');
|
||||||
##ylabel('amplitude(n.u.');
|
##ylabel('amplitude(n.u.');
|
||||||
|
|
||||||
|
%save a speed down version of the original signal
|
||||||
|
audiowrite('./data/modulator22_speedown.wav', y , fs/2);
|
||||||
|
|
||||||
audiowrite('modulator22_speedown.wav', y , fs/2);
|
%save the speed down version's signal and sampling frequency and calculate it's new time duration
|
||||||
[y_speedown,fs_speedown]=audioread('modulator22_speedown.wav');
|
[y_speedown,fs_speedown]=audioread('./data/modulator22_speedown.wav');
|
||||||
t_speedown=0:1/fs_speedown:length(y_speedown)/fs_speedown-1/fs_speedown;
|
t_speedown=0:1/fs_speedown:length(y_speedown)/fs_speedown-1/fs_speedown;
|
||||||
|
|
||||||
|
%showing the speed down version's signal
|
||||||
##figure;
|
##figure;
|
||||||
##set(gcf, 'name','Speed down of the signal of origin');
|
##set(gcf, 'name','Speed down of the signal of origin');
|
||||||
##plot(t_speedown,y_speedown);
|
##plot(t_speedown,y_speedown);
|
||||||
##xlabel('time(s)');
|
##xlabel('time(s)');
|
||||||
##ylabel('amplitude(n.u.');
|
##ylabel('amplitude(n.u.');
|
||||||
|
|
||||||
|
%Apply the DFT(flase) and FFT(true) to the speed down signal
|
||||||
%frequencySpectrum(y_speedown, fs_speedown, false);
|
%frequencySpectrum(y_speedown, fs_speedown, false);
|
||||||
%frequencySpectrum(y_speedown, fs_speedown, true);
|
%frequencySpectrum(y_speedown, fs_speedown, true);
|
||||||
|
|
||||||
|
%Illustrate the spectogram of the speed down version at 2 windows values (1 for a precise frequency read and 1 for a precise time domain)
|
||||||
%spectrogram(y_speedown, fs_speedown, 5, 30);
|
%spectrogram(y_speedown, fs_speedown, 5, 30);
|
||||||
%spectrogram(y_speedown, fs_speedown, 5, 5);
|
%spectrogram(y_speedown, fs_speedown, 5, 5);
|
||||||
|
|
||||||
|
%Lowering the sampling frequency using the downsample() function
|
||||||
|
##y_downsampled = downsample(y, 2);
|
||||||
|
##fs_downsample = fs/2;
|
||||||
|
##audiowrite('./data/modulator22_downsample.wav', y_downsampled , fs_downsample);
|
||||||
|
##t_downsample=0:1/fs_downsample:length(y_downsampled)/fs_downsample-1/fs_downsample;
|
||||||
|
|
||||||
|
%Lowering again the sampling frequency but with the decimate() function (applying a LP filter at the start )
|
||||||
|
##y_decimated = decimate(y, 2);
|
||||||
|
##fs_decimate = fs/2;
|
||||||
|
##audiowrite('./data/modulator22_decimate.wav', y_decimated , fs_decimate);
|
||||||
|
##t_decimate=0:1/fs_decimate:length(y_decimated)/fs_decimate-1/fs_decimate;
|
||||||
|
|
||||||
|
%Comparing them both on the same graph to see the effect of the LP filter on the signal itself
|
||||||
|
##figure;
|
||||||
|
##set(gcf, 'name','Decimate vs Downsample');
|
||||||
|
##title('Decimate vs Downsample');
|
||||||
|
##plot(t_downsample,y_downsampled,'b');
|
||||||
|
##hold on;
|
||||||
|
##plot(t_decimate,y_decimated,'g');
|
||||||
|
##xlabel('time(s)');
|
||||||
|
##ylabel('amplitude(n.u)');
|
||||||
|
##legend('downsample()','decimate()',"location","southeastoutside");
|
||||||
|
|
||||||
|
%Illustrating them with their frequencySpectrum to see the effect of the LP filter
|
||||||
|
##frequencySpectrum(y_decimated, fs_decimate, true);
|
||||||
|
##frequencySpectrum(y_downsampled, fs_downsample, true);
|
||||||
|
|
||||||
|
%%%IIR and FIR LP FILTER IMPLEMENTATION %%%%
|
||||||
|
%creating a low pass filter FIR
|
||||||
|
N=30;
|
||||||
|
fc=1000;
|
||||||
|
bfir=fir1(N,fc/(fs/2));
|
||||||
|
freqz(bfir,1);
|
||||||
|
|
||||||
|
%filter the signal
|
||||||
|
y_FIR_filter=filter(bfir,1,y);
|
||||||
|
|
||||||
|
%plot of the signal FIR
|
||||||
|
##figure;
|
||||||
|
##plot(y_FIR_filter,'g');
|
||||||
|
|
||||||
|
%creating a low pass filter IIR
|
||||||
|
N=8;
|
||||||
|
fc=1000;
|
||||||
|
[biir,a]=butter(N,fc/(fs/2));
|
||||||
|
freqz(biir,a);
|
||||||
|
Z=roots(biir); %zeros of the transfer fct
|
||||||
|
P=roots(a); %poles fo the transfer fct
|
||||||
|
|
||||||
|
%representation of zeros/poles in complex plan
|
||||||
|
##figure;
|
||||||
|
##zplane(Z,P);
|
||||||
|
##title('Zeros and poles of the transfer function of the IIR filter');
|
||||||
|
##legend('zeros','poles');
|
||||||
|
##grid on;
|
||||||
|
|
||||||
|
%filter the signal
|
||||||
|
y_IIR_filter=filter(biir,a,y);
|
||||||
|
|
||||||
|
%plot of the signal IIR
|
||||||
|
##figure;
|
||||||
|
##plot(y_IIR_filter,'b');
|
||||||
|
|
||||||
|
%downsample of the IIR signal
|
||||||
|
y_IIR_downsample = downsample(y_downsampled, 2);
|
||||||
|
fs_IIR_downsample = fs/2;
|
||||||
|
t_IIR_downsample=0:1/fs_IIR_downsample:length(y_IIR_downsample)/fs_IIR_downsample-1/fs_IIR_downsample;
|
||||||
|
|
||||||
|
figure;
|
||||||
|
set(gcf, 'name','Downsample of IIR');
|
||||||
|
plot(t_IIR_downsample,y_IIR_downsample,'b');
|
||||||
|
xlabel('time(s)');
|
||||||
|
ylabel('amplitude(n.u)');
|
||||||
|
legend('downsample()',"location","southeastoutside");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue