Matlab ile Sayısal Filtre Tasarımı

Matlab’ın mühendislik ve matematik biliminde çok yardımcı araç olduğu yadsınamaz. Bu yazımızda Matlab’in FDATool (Filtre Tasarım & Analiz Araç Kutusu) ile filtre tasarlayıp, filtrenin katsayılarını, katsayı dosyası haline getireceğiz. Daha sonra da C kodu içine include komutu ile dahil ederek DSK 6713 DSP kit içine gömeceğiz.

Matlab Filtre Tasarım & Analiz Araç Kutusu

İlk işlemimiz Matlab’de command window penceresinde (komut penceremiz)fdatool yazıp enter’e basmak.

Daha sonra çıkan araç kutusu ile (yukarıdaki resimde görüldüğü gibi) tasarlayacağımız filtre özelliklerini seçeceğiz. Design Method bölümünden IIR ya da FIR olarak seçim yapıyoruz, daha sonra hangi alt metodu kullanacağımızı seçiyoruz. Response Type bölümünden filtre türünü seçiyoruz. Filter Order bölümünden kaçıncı dereceden filtre tasarlamak istediğimizi seçiyoruz. Filtre katsayısını büyük tutmak, filtreyi ideale yaklaştırabilmesine rağmen, gömülü sistem üzerinde de işlem yükü artıracağından katsayı seçimi önemli bir konu olmaktadır. Filtre katsayısını belirledikten sonra, örnekleme frekansını ve kesim frekansı gibi değerleri girdikten sonra Design Filter butonuna basıyoruz, filtrenin cevabını yukarıdaki ekranda izlememiz mümkün oluyor.

File > Export memüsüne tıklayınca çıkan pencereden Export To bölümünü Workspace, Export As bölümünü Coefficients olarak seçiyoruz. Variable Names, bize bu katsayıların hangi değişken adı ile workspace’ye aktarılmasını istediğimizi soruyor. İstediğimiz bir değişkeni girerek Export butonuna basarki katsayıları Workspace’ye aktarabiliriz.

Daha sonra bu katsayıları, cof uzantılı katsayı dosyası haline getireceğiz. Bunun için ise dsk_fir67.m adındaki programı kullanacağız. Dikkat edilmesi gerek nokta, bu dosya FIR filtre katsayıları içindir. IIR filtre için kullanmamız gereken program dsk_sos_iir67.m ve dsk_sos_iir67int.m olmalıdır.

dsk_fir67.m dosyasının kodları aşağıdaki gibidir:

% DSK_FIR67.M

% MATLAB function to write FIR filter coefficients

% in format suitable for use in C6713 DSK programs

% fir.c and firprn.c

% written by Donald Reay

%

function dsk_fir67(coeff)

%

coefflen=length(coeff);

fname = input(’enter filename for coefficients ‘,’s’);

fid = fopen(fname,’wt’);

fprintf(fid,’// %s\n’,fname);

fprintf(fid,’// this file was generated automatically using function dsk_fir67.m\n’,fname);

fprintf(fid,’\n#define N %d\n’,coefflen);

fprintf(fid,’\nfloat h[N] = { \n’);

% j is used to count coefficients written to current line

% in output file

j=0;

% i is used to count through coefficients

for i=1:coefflen

% if six coeffs have been written to current line

% then start new line

if j>5

j=0;

fprintf(fid,’\n’);

end

% if this is the last coefficient then simply write

% its value to the current line

% else write coefficient value, followed by comma

if i==coefflen

fprintf(fid,’%2.4E’,coeff(i));

else

fprintf(fid,’%2.4E,’,coeff(i));

j=j+1;

end

end

fprintf(fid,’\n};\n’);

fclose(fid);

dsk_fir67(katsayiDegiskenimiz) şeklinde bu programı çağırabiliriz. Program bize katsyı dosyasına vermek istediğimiz ismi soracak.  Uzantısı cof olacak şekilde herhangi bir isim verebiliriz. katsayi.cof olduğunu kabul edelim.

Code Composer Studio IDE’sine geçerek, C yazılımımız içine bu katsayıları yerleştireceğiz.

// program fir.c

#include “DSK6713_AIC23.h” // codec support

Uint32 fs=DSK6713_AIC23_FREQ_48KHZ; //set sampling rate

#define DSK6713_AIC23_INPUT_MIC 0×0015

#define DSK6713_AIC23_INPUT_LINE 0×0011

Uint16 inputsource=DSK6713_AIC23_INPUT_LINE; // select line in

//filter coefficient file

#include “katsayi.cof”

#include “y.h”

float x[k];

//filter delay line

float cikis_buffer[k];

interrupt void c_int11() //ISR - AIC23 codec interrupts at 48kHz

{

short i;

float yn=0.0;

//get new input into delay line

for (i=0 ; i<k ; i++) //calculate filter output

{

x[i] = b[i];

yn+=h[i]*x[i];

cikis_buffer[i] = yn;

}

for(i=(k-1);i>0;i–)

x[i]=x[i-1];

output_left_sample((short)(yn)); //output to codec

return;

}

void main() //main body of program does nothing

{

comm_intr(); //initialise DSK

while(1); //infinite loop

}

Code Composer Studio (CCS)’de projeyi açtıktan sonra Project>Build diyoruz ve bu işlem sonucunda oluşan fir.out dosyasını File>Load program diyerek DSK içine yüklüyoruz. Debug>Run (F5′e basarak da aynı işlemi yapabilirsiniz) diyerek programı DSP üzerinde çalıştırıp, osiloskop ile izleyebilirsiniz. Elinizde osiloskop yoksa ve filtrenin çalışmasını izlemek istiyorsanız yapılması gerekenleri bir sonraki yazıda ele alacağım.

EkleBunu Sosyal Paylaşım Butonu

Etiketler: , , , , , ,

Eğer yazıyı beğendiyseniz ya da ekleyecekleriniz varsa, lütfen yorumunuz yazın veya RSS aboneliği ile yeni yazılardan anında haberdar olun.

Yorumlar

Henüz Yorum Yok.

Yorum Yazın

(gerekli)

(gerekli)