You are on page 1of 5

close all; clear all; clc;

fs = 3000 % fs
Sampling frequency, positive scalar. Sampling frequency, specifie
d as a positive scalar. The sampling frequency is the number of samples per unit
time. If the unit of time is seconds, the sampling frequency has units of hertz
.
T = 1/fs;% sampling rate or frequency
load('J:\BIOM_Signal_processing\Hw9\EEGsignal_1') % contains eeg1 and fs
N =length(eeg1); ls = size(eeg1); % find the length of the data per second
tx =[0:length(eeg1)-1]/fs;% Make time axis for EEG signal
figure; subplot (211), plot(tx,eeg1); xlabel('Time (s)'), ylabel('Amplitude (mV)
'), title('Original EEG signal'); %EEG waveform
subplot(212), plot(tx,eeg1);
%fignum = fignum + 1; figure(fignum);
xlabel('Time (s)'), ylabel('Amplitude (mV)'), title('Zoom into original EEG sign
al at 1 to 2 seconds'), xlim([1,2]) % Used to zoom in on single ECG waveform
figure;
NFFT = 2 ^ nextpow2(N); %% number points. Number of DFT points, specified as a
positive integer. For a real-valued input signal, x, the PSD estimate, pxx has l
ength (nfft/2 + 1) if nfft is even, and (nfft + 1)/2 if nfft is odd. For a compl
ex-valued input signal,x, the PSD estimate always has length nfft. If nfft is sp
ecified as empty, the default nfft is used.
Y = fft(eeg1, NFFT)/N; %% fft of the EEG signals
f = (fs/2 * linspace(0,1,NFFT/2+1))'; % Vector containing frequencies in Hz
amp =( 2 * abs(Y(1: NFFT/2+1))); % Vector containing corresponding amplitudes
subplot(2,1,1), plot (f, amp);title ('plot single-sided amplitude spectrume of t
he EEG signal'); xlabel ('frequency (Hz)'); ylabel ('|y(f)|');grid on;
%Estimate the power spectrum of the 10-s epoch by computing the periodogram
%the plot using periodogram with no outputs.
periodogram_1 = periodogram(eeg1);
subplot(2,1,2), plot (f,periodogram_1);title('Periodogram power spectral Densist
y Estimate of the EEG signal'); xlabel ('frequency (Hz)');ylabel ('Power/Frequen
cy(dB)');grid on;
%%% plot the periodogram with the length of EEG signal
nfft= length(eeg1);
periodogram_2 =periodogram(eeg1,[],nfft);
f1 = (fs/2 * linspace(0,1,nfft/2+1))'; % Vector containing frequencies in Hz
figure;
subplot(2,2,1), plot(f1,periodogram_2);title('Periodogram power spectral Densist
y Estimate of the EEG signal and length of EGG signal'); xlabel('frequency (Hz)'
);ylabel('Power/Frequency(dB)');grid on;
%%%%The signal is 30001 samples in length. Obtain the periodogram using the defa
ult rectangular window and DFT length. The DFT length is the next power of two g
reater than the signal length, or 32768 points.
%Because the signal is real-valued and has even length, the periodogram is one-s
ided and there are 512/2+1 points.
[pxx,w] = periodogram(eeg1);
subplot(2,2,2), plot(w,10*log10(pxx)); title ('Periodogram using the default rec
tangular window and DFT length'); xlabel ('frequency(Hz)'); ylabel ('Power/Frequ
ency(dB)');grid on;
%%Modified Periodogram with Hamming Window. Obtain the modified periodogram of a
n input EEG signal with no noise. The signal is 30001 samples in length. Obtain
the modified periodogram using a Hamming window and default DFT length. The DFT
length is the next power of two greater than the signal length, or 32786 points
.
%Because the signal is real-valued and has even length, the periodogram is one-s
ided and there are 32768/2+1 points.
hamming_1=periodogram(eeg1,hamming(length(eeg1)));
subplot(2,2,3), plot (f,hamming_1);title ('Periodogram using the hamming window

and DFT length'); xlabel ('frequency(Hz)'); ylabel ('PSD estimate/Power/Frequenc


y(dB) ');grid on;
%DC-Centered Periodogram
%Obtain the periodogram of EEG signal. The data are sampled at 3000 kHz. Use the
'centered' option to obtain the DC-centered periodogram and plot the result.
[periodogram_center, fcenter]= periodogram(eeg1,[],length(eeg1),fs,'centered');
subplot(2,2,4), plot(fcenter,periodogram_center); title ('Periodogram using DC-C
entered and DFT length'); xlabel ('frequency(Hz)'); ylabel ('Power/Frequency(dB)
');grid on;
%Change the window size for each periodogram, using 3 or 4 values of your
%own choosing. An example might be: 100 sample windows, 200 samples, 1000 sample
s, and 2000 samples.
%use example from this link: http://www.mathworks.com/help/signal/ref/periodogra
m.html
%pxx = periodogram(x,window) returns the modified periodogram PSD estimate using
the window, window. window is a vector the same length as x.
%% use from this link: http://www.mathworks.com/matlabcentral/answers/73055-haii-am-new-to-matlab-how-to-divide-a-eeg-signal-into-frames-in-matlab
%eeg_100= eeg1(1:100,1); %% create the data sample from 0 to 100 sample from col
umn 1.
eeg_100= eeg1(1:101); %% create the data sample from 0 to 100 sample from column
1.
nfft_100 = length(eeg_100);
[pxx_100,w1] = periodogram(eeg_100);
figure;
subplot(3,2,1), plot(w1,10*log10(pxx_100)); title ('Periodogram using the defaul
t rectangular window for 100 sample and DFT length'); xlabel ('frequency(Hz)');
ylabel ('Power/Frequency(dB)');grid on
eeg_200= eeg1(1:201); %% create the data sample from 0 to 200 sample from column
1.
nfft_200 = length(eeg_200);
[pxx_200,w2] = periodogram(eeg_200);
subplot(3,2,2), plot(w2,10*log10(pxx_200)); title ('Periodogram using the defaul
t rectangular window for 200 sample and DFT length'); xlabel ('frequency(Hz)');
ylabel ('Power/Frequency(dB)');grid on;
eeg_1000= eeg1(1:1001); %% create the data sample from 0 to 1000 sample from col
umn 1.
nfft_1000 = length(eeg_1000);
[pxx_1000,w3] = periodogram(eeg_1000);
subplot(3,2,3), plot(w3,10*log10(pxx_1000)); title ('Periodogram using the defau
lt rectangular window for 1000 sample and DFT length'); xlabel ('frequency(Hz)')
; ylabel ('Power/Frequency(dB)');grid on;
eeg_2000= eeg1(1:2001); %% create the data sample from 0 to 1000 sample from col
umn 1.
nfft_2000 = length(eeg_2000);
[pxx_2000,w4] = periodogram(eeg_2000);
subplot(3,2,4), plot(w4,10*log10(pxx_2000)); title ('Periodogram using the defau
lt rectangular window for 2000 sample and DFT length'); xlabel ('frequency(Hz)')
; ylabel ('Power/Frequency(dB)');grid on;
%% this method is slide the window through the entire data at every 1/2 second,
calculate the frequency, average it.
[p,f] = pwelch(eeg1,hamming(fs),.5*fs, 2*fs,fs); %%
figure; subplot (421), plot (f,10*log10(p),'r'); xlabel('freq (hz)');
ylabel('PSD Amplitude'); title('Power SPectral Density via Welchs method');grid
on;
subplot (422), plot (f,10*log10(p),'g'); xlabel('freq (hz)');ylabel('PSD Amplitu
de'); title('Power SPectral Density via Welchs method zoom in at 40 hz'); xlim([

0,40]);grid on;
%text(0.5,-1/3,'{\itNote the odd symmetry.}')
%%%%%%%
%%% problem 2
%2. Given three signals:
%x1 = cos(2*pi*4*t)
%x2 = cos(2*pi*20*t)
%x3 = cos(2*pi*40*t)
%Generate .3 seconds of each signal. First, combine them into new signals
%x4 = x1 + x2 + x3
x4 is the sum of the first three signals.
%x5 = [x1 x2 x3] where x5 is concatenated from the first 3 vectors
clc;clear all;close all;
t = 0:0.01:1;
x1 = cos(2*pi*4*t); % for x1: frequency is 4hz,
x2 = cos(2*pi*20*t);%x2: frequency = 20Hz,
x3 = cos(2*pi*40*t);% is 40 Hz.
x4 = x1 + x2 + x3;
f1 = 4;
f2 = 20;
f3= 40;
T1 = 1/f1;
T2 = 1/f2;
T3 = 1/f3;
figure;
subplot(2,2,1), plot(t,x1); xlabel('Time (s)'), ylabel('Amplitude'), title('sign
al: x1 = cos(2*pi*4*t) ');
subplot(2,2,2), plot(t,x2); xlabel('Time (s)'), ylabel('Amplitude'), title('sign
al: x2 = cos(2*pi*20*t) ');
subplot(2,2,3), plot(t,x3); xlabel('Time (s)'), ylabel('Amplitude'), title('sign
al: x3 = cos(2*pi*40*t) ');
subplot(2,2,4), plot(t,x4); xlabel('Time (s)'), ylabel('Amplitude'), title('sign
al: x4 = x1 + x2 + x3 ');
% Concatinate the three signals:
x5 = [x1 x2 x3] ;
figure;
plot(x5); xlabel('Time (s)'), ylabel('Amplitude'), title('Concatinate the thr
ee signals: x1, x2, and x3 ');
%What is the Nyquist rate for this signal?
fN1=f1/2;
fN2 = f2/2;
FN3= f3/2; %Fmax
fs = 50; %The Nyquist rate is FN= 2Fmax
%plot the spectrum of each signal. Compare the results.
NFFT_x1 = 2 ^ nextpow2(length(x1)); %% number points. Number of DFT points, spe
cified as a positive integer. For a real-valued input signal, x, the PSD estimat
e, pxx has length (nfft/2 + 1) if nfft is even, and (nfft + 1)/2 if nfft is odd.
For a complex-valued input signal,x, the PSD estimate always has length nfft. I
f nfft is specified as empty, the default nfft is used.
Y_x1 = fft(x1, NFFT_x1)/length(x1); %% fft of the EEG signals
f_x1 = (fs/2 * linspace(0,1,NFFT_x1/2+1))'; % Vector containing frequencies in H
z
amp_x1 =( 2 * abs(Y_x1(1: NFFT_x1/2+1))); % Vector containing corresponding ampl
itudes
NFFT_x2 = 2 ^ nextpow2(length(x2)); %% number points. Number of DFT points, spe
cified as a positive integer. For a real-valued input signal, x, the PSD estimat

e, pxx
For a
f nfft
Y_x2 =
f_x2 =
z
amp_x2
itudes

has length (nfft/2 + 1) if nfft is even, and (nfft + 1)/2 if nfft is odd.
complex-valued input signal,x, the PSD estimate always has length nfft. I
is specified as empty, the default nfft is used.
fft(x2, NFFT_x1)/length(x2); %% fft of the EEG signals
(fs/2 * linspace(0,1,NFFT_x2/2+1))'; % Vector containing frequencies in H
=( 2 * abs(Y_x2(1: NFFT_x2/2+1))); % Vector containing corresponding ampl

NFFT_x3 = 2 ^ nextpow2(length(x3)); %% number points. Number of DFT points, spe


cified as a positive integer. For a real-valued input signal, x, the PSD estimat
e, pxx has length (nfft/2 + 1) if nfft is even, and (nfft + 1)/2 if nfft is odd.
For a complex-valued input signal,x, the PSD estimate always has length nfft. I
f nfft is specified as empty, the default nfft is used.
Y_x3 = fft(x3, NFFT_x3)/length(x3); %% fft of the EEG signals
f_x3 = (fs/2 * linspace(0,1,NFFT_x3/2+1))'; % Vector containing frequencies in H
z
amp_x3 =( 2 * abs(Y_x3(1: NFFT_x3/2+1))); % Vector containing corresponding ampl
itudes
NFFT_x4 = 2 ^ nextpow2(length(x4)); %% number points. Number of DFT points, spe
cified as a positive integer. For a real-valued input signal, x, the PSD estimat
e, pxx has length (nfft/2 + 1) if nfft is even, and (nfft + 1)/2 if nfft is odd.
For a complex-valued input signal,x, the PSD estimate always has length nfft. I
f nfft is specified as empty, the default nfft is used.
Y_x4 = fft(x4, NFFT_x4)/length(x4); %% fft of the EEG signals
f_x4 = (fs/2 * linspace(0,1,NFFT_x4/2+1))'; % Vector containing frequencies in H
z
amp_x4 =( 2 * abs(Y_x3(1: NFFT_x4/2+1))); % Vector containing corresponding ampl
itudes
NFFT_x5 = 2 ^ nextpow2(length(x5)); %% number points. Number of DFT points, spe
cified as a positive integer. For a real-valued input signal, x, the PSD estimat
e, pxx has length (nfft/2 + 1) if nfft is even, and (nfft + 1)/2 if nfft is odd.
For a complex-valued input signal,x, the PSD estimate always has length nfft. I
f nfft is specified as empty, the default nfft is used.
Y_x5 = fft(x5, NFFT_x5)/length(x5); %% fft of the EEG signals
f_x5 = (fs/2 * linspace(0,1,NFFT_x5/2+1))'; % Vector containing frequencies in H
z
amp_x5 =( 2 * abs(Y_x5(1: NFFT_x5/2+1))); % Vector containing corresponding ampl
itudes
figure;
subplot(3,2,1), plot (f_x1, amp_x1); title ('plot single-sided amplitude spectru
me of signal x1 = cos(2*pi*4*t)'); xlabel ('frequency (Hz)'); ylabel ('|y(f)|');
grid on;
subplot(3,2,2), plot (f_x2, amp_x2); title ('plot single-sided amplitude spectru
me of signal x2 = cos(2*pi*20*t)'); xlabel ('frequency (Hz)'); ylabel ('|y(f)|')
;grid on;
subplot(3,2,3), plot (f_x3, amp_x3); title ('plot single-sided amplitude spectru
me of signal x3 = cos(2*pi*40*t)'); xlabel ('frequency (Hz)'); ylabel ('|y(f)|')
;grid on;
subplot(2,2,4),plot (f_x4, amp_x4); title ('plot single-sided amplitude spectrum
e of signal x4 = x1+x2+x3 '); xlabel ('frequency (Hz)'); ylabel ('|y(f)|');grid
on;
figure;
subplot (211); plot(x5); xlabel('Time (s)'), ylabel('Amplitude'), title('Concati
nate the three signals: x1, x2, and x3 ');
subplot (212); plot (f_x5, amp_x5); title ('plot single-sided amplitude spectrum
e of concatinate the three signals: x1, x2, and x3 '); xlabel ('frequency (Hz)')

; ylabel ('|y(f)|');grid on;

You might also like