Borrar filtros
Borrar filtros

Hi there, i just want to design and apply a 2s hanning window with 50% overlapp on my EEG signal in order to segment it , i've tried with @hann command but i couldn't get it

38 visualizaciones (últimos 30 días)
my signal is a 17-channel signal with 30721 samples totally (=17 * 30721) . i need my signal to be segmented with 2s hanning window with 50% overlapp to apply preproccessing on it for my Master thesis. sampling frequency is 256 Hz.
i have problem from A to Z designing the window and also, i dont know how to apply it on my Original Signal,
I will be grateful if you could help me design and apply this window to my signal,
thank you so much

Respuesta aceptada

Mathieu NOE
Mathieu NOE el 23 de En. de 2023
see example below
the signal gets splitted in 2s buffer and windowed
see the subfunction at the bottom of the code :
sw = signal(start:stop).*window; % signal buffered and windowed
then we do fft on each windowed segment and when iteration process is complete we get a time / frequency (spectrgram) plot
code :
% dummy signal
Fs = 256;
dt = 1/Fs;
t = 0:dt:30; % 2 s at 1 kHz sample rate
signal = chirp(t,0,15,50,'quadratic'); % Start at DC, cross 50 Hz at 15 s
nfft = 2*256; % frame length = 2 seconds x Fs
overlap = 0.5; % window overlap ; 0 = 0 % , 0.5 = 50% , 1 = 100 %
[S,F,T] = myspecgram(signal, Fs, nfft, overlap);
xlabel('Time (secs)')
ylabel('Freq (Hz)')
title('Short-time Fourier Transform spectrum (dB Scale)')
function [fft_specgram,freq_vector,time] = myspecgram(signal, Fs, nfft, Overlap)
% FFT peak spectrogram of signal (example sinus amplitude 1 = 0 dB after fft).
% signal - input signal,
% Fs - Sampling frequency (Hz).
% nfft - FFT window size
% Overlap - buffer overlap % (between 0 and 0.95)
signal = signal(:);
samples = length(signal);
% fill signal with zeros if its length is lower than nfft
if samples<nfft
s_tmp = zeros(nfft,1);
s_tmp((1:samples),:) = signal;
signal = s_tmp;
samples = nfft;
% window : hanning
window = hanning(nfft);
window = window(:);
% compute fft with overlap
offset = fix((1-Overlap)*nfft);
spectnum = 1+ fix((samples-nfft)/offset); % Number of windows
% % for info is equivalent to :
% noverlap = Overlap*nfft;
% spectnum = fix((samples-noverlap)/(nfft-noverlap)); % Number of windows
% main loop
fft_specgram = [];
for ci=1:spectnum
start = 1+(ci-1)*offset;
stop = start+nfft-1;
sw = signal(start:stop).*window; % signal buffered and windowed
fft_specgram = [fft_specgram abs(fft(sw))*4/nfft]; % X=fft(x.*hanning(N))*4/N; % hanning only
% one sidded fft spectrum % Select first half
if rem(nfft,2) % nfft odd
select = (1:(nfft+1)/2)';
select = (1:nfft/2+1)';
fft_specgram = fft_specgram(select,:);
freq_vector = (select - 1)*Fs/nfft;
% time vector
% time stamps are defined in the middle of the buffer
time = ((0:spectnum-1)*offset + round(nfft/2))/Fs;
  15 comentarios
Mathieu NOE
Mathieu NOE el 6 de Feb. de 2023
the power spectrum plot is what I already showed you above
here again
it's coming from this fft computation in my code
[freq, spectrum_raw] = myfft_peak(signal,Fs,NFFT,OVERLAP);
but maybe your supervisor would like you to use this matlab function instead
look at the doc and example it's fairly easy to replace my fft code with this matlab function
alireza ghavami
alireza ghavami el 19 de Feb. de 2023
hi dear Mathieu , im so sorry to reply you late,
im very thankful for your help, you helped me alot
i was trying to read about your last comment in the help of MATLAB but i did not get it clearly,
and if its possible, can i ask you to write me your contact details so i could contact you easier?
im so sorry if im asking too much questions :)

Iniciar sesión para comentar.

Más respuestas (0)


Más información sobre Spectral Measurements en Help Center y File Exchange.




Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by