%loading the signal library in octave pkg load signal clear all close all %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; %showing the original signal ##figure; ##set(gcf, 'name','Signal of origin'); ##plot(t,y); ##xlabel('time(s)'); ##ylabel('amplitude(n.u.'); %save a speed down version of the original signal audiowrite('./data/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('./data/modulator22_speedown.wav'); t_speedown=0:1/fs_speedown:length(y_speedown)/fs_speedown-1/fs_speedown; %showing the speed down version's signal ##figure; ##set(gcf, 'name','Speed down of the signal of origin'); ##plot(t_speedown,y_speedown); ##xlabel('time(s)'); ##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, 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, 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");