2016-07-10 10 views
1

Ich habe EDFread verwendet, um EEG-Daten zu lesen, die ich in einer Variablen namens PlotData gespeichert habe. Ich möchte wissen, wie ich einen elliptischen Filter implementieren kann, um 7-9 Hz (Alpha-Band) von einem der Kanäle zu extrahieren.Wie elliptischen Filter in Matlab für EDF-Daten verwenden

Die in plotData gespeicherten EDF-Daten sehen wie folgt aus.

plotData = 

      ver: 0 
     patientID: 'test                   ' 
     recordID: 'test                   ' 
     startdate: '23.06.16' 
     starttime: '12.10.38' 
      bytes: 9472 
     records: 3 
     duration: 1 
      ns: 36 
      label: {1x36 cell} 
    transducer: {1x36 cell} 
      units: {1x36 cell} 
    physicalMin: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] 
    physicalMax: [1x36 double] 
    digitalMin: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] 
    digitalMax: [1x36 double] 
     prefilter: {1x36 cell} 
     samples: [1x36 double] 
+0

Hallo. Ich denke, Ihre Frage ist nicht wirklich auf EDF-Dateien beschränkt. Aber: Entwerfen Sie Ihren Filter abhängig von Ihrer in der EDF-Datei verwendeten Abtastfrequenz. –

Antwort

1

Wenn ich verstehe Ihre EDF Daten korrekt zur Verfügung gestellt, gibt es 36 Proben (ns) über eine duration von 1 Sekunde, die Ihnen mit einer Abtastrate von 36 Hz gibt.

Das Design eines digitalen elliptischen Filters kann dann mit der eingebauten ellip Funktion durchgeführt werden. Sie müssen Ihre Filteranforderungen für die Durchlassbandwelligkeiten, die Sperrbanddämpfung und die Übergangsbereiche eingeben. Bei einigen Parametern wie beispielsweise vorgesehen, würde dies wie folgt aussehen:

fs = 36; % sampling rate in Hz 
fmin = 7; % minimum passband frequency in Hz 
fmax = 9; % maximum passband frequency in Hz 
order = 5; % filter order (the higher the narrower the transition band) 
Rs = 20; % stopband attenuation in dB 
Rp = 1; % passband ripples in dB 

[b,a] = ellip(order, Rp, Rs, [fmin/(fs/2), fmax/(fs/2)]); 

Sie können dann die resultierende Reaktion mit freqz visualisieren (und nach Bedarf anpassen). Für die oben genannten Parameter, würde die Frequenzgang wie folgt aussehen:

enter image description here

schließlich zum Ausfiltern von Daten Sie die filter Funktion mit den oben entworfen Filterkoeffizienten a und b und Ihre Eingabe plotData verwenden würde:

filtered_data = filter(b,a,plotData);