Matlab Filtereleme örneği

Yine kodları matlab html üreticisi üretti. Üzerini seçerek kodları okuyabilirsiniz.

Burada filter1.mat dosyasını "filter designer" aracıyla ürettim. Elle yapmak mümkün fakat bu elle yaptıklarımızı otomatikleştirmek zaman kazandırıyor ve ne yaptığını farkına varıyorsun. filtering
fs=1000;
t=0:1/fs:1;
y1=sin(2*pi*t*50);
y2=sin(2*pi*t*100);
modulated=y1.*y2;

figure('Name','Orjinal Signal and fft')
subplot(3,1,1); hold on;
plot(t,modulated)
title('signal'); ylabel('amplitude'); xlabel('zaman sn')
% 2
order    = 10;
fcutlow  = 100;
fcuthigh = 200;
[b,a]    = butter(order,[fcutlow,fcuthigh]/(fs/2), 'bandpass');
filtered = filter(b,a,modulated);
plot(t,filtered)
% 3
load filter1.mat
filtered_kaiser = filter(filter1,modulated);
plot(t,filtered_kaiser)
hold off; legend('orjinal modulated','butter filtered','kaiser filtered(order=10, beta=0.3)');

subplot(3,1,2); hold on;
L=length(t);
sfft=fft(modulated);
sfft_abs=abs(sfft/L);
sfft_abs = sfft_abs(1:fix(L/2)+1);
sfft_abs(2:end-1) = 2*sfft_abs(2:end-1);
f = fs*(0:(L/2))/L; % fft vektörü
plot(f,sfft_abs)
title('fft'); ylabel('amplitude birim'); xlabel('frequency Hz')
% 2
L=length(t);
sfft=fft(filtered);
sfft_abs=abs(sfft/L);
sfft_abs = sfft_abs(1:fix(L/2)+1);
sfft_abs(2:end-1) = 2*sfft_abs(2:end-1);
f = fs*(0:(L/2))/L; % fft vektörü
plot(f,sfft_abs)
% 3
L=length(t);
sfft_kaiser=fft(filtered_kaiser);
sfft_abs_kaiser=abs(sfft_kaiser/L);
sfft_abs_kaiser = sfft_abs_kaiser(1:fix(L/2)+1);
sfft_abs_kaiser(2:end-1) = 2*sfft_abs_kaiser(2:end-1);
f = fs*(0:(L/2))/L; % fft vektörü
plot(f,sfft_abs_kaiser)
hold off; legend('orjinal modulated','butter filtered','kaiser filtered(order=10, beta=0.3)');

subplot(3,1,3); hold on
plot(f,10*log10(sfft_abs))
title('spectrum'); ylabel('DB'); xlabel('frequency Hz')
% 2
plot(f,10*log10(sfft_abs))
% 3
plot(f,10*log10(sfft_abs_kaiser))
hold off; legend('orjinal modulated','butter filtered','kaiser filtered(order=10, beta=0.3)');

Filter designer aracı ile ürettiğim filtreleri birçok farklı platforma aktarabiliyorum ve fixed point designer ile double kullanmayarak minimum ihtiyaçlara göre düzenliyorum ve az hafıza kullanıyorum. Oldukça hızlandırıyor.


Yorumlar

Popüler Yayınlar