FFT Kullanılarak Yukarı Örnekleme İşleminin MATLAB ile Gerçeklenmesi

Sinyal işlemede çok fazla kullanılan uygulamalardan biri örnekleme frekansının artırılması işlemidir.  Bu işlemi gerçekleştirilmesi için farklı yöntemler geliştirilmiştir. Bu yazımızda FFT kullanarak yukarı örnekleme işlemine ait uygulamayı MATLAB kodları ile gerçekleştireceğiz. Aşağıda 20 Hz’de örnkelenmiş 1 Hz’lik sünüs işareti gösterilmiştir.

Yukarı örnekleme işlemlerinde öncelikle sinyalin FFT alma işlemleri gerçekleştirilir. Daha sonra FFT simetrik olduğundan dolayı FFT sinyalinin ilk kısmı ile son kısmının arasına yukarı örnekleme yapılacak adım sayısının bir eksiği kadar FFT’ boyunun katı kadar sıfırlar eklenir. Örneğin 3 ile yukarı örneklenecekse 32’lik FFT için 64 adet sıfır eklenmesi gerekmektedir. Daha sonra bu sinyalin ters FFT’si alınır ve gerçel kısımları yeni sinyalimiz olarak alınır. Aşağıda yukarıda verilen giriş sinyalinin 3 ile yukarı örneklenmesini sağlayan MATLAB kodu ve çıkışta elde edilen sinyal verilmiştir. 20 Hz ile örneklenen siynaln yeni örnekleme frekansı 60 Hz olmuştur.

clc, clear all, close all;
 
f_s = 20;
f_I = 1;
 
n_t = 1 / f_s : 1 / f_s : 1;
 
s_Input = sin(2 * pi * f_I * n_t);
figure, plot(n_t, s_Input);
xlabel('Zaman(s)')
title('20 Hzde örneklenmiş sinüs')
 
l_Input = length(s_Input);
l_FFT = 2^(ceil(log2(l_Input)));
 
fft_I = fft(s_Input, l_FFT);
up_L = 3;
 
Zero_Buff = zeros(1, (up_L - 1) * l_FFT);
fft_I_new = up_L * [fft_I(1 : l_FFT / 2)...
   Zero_Buff fft_I(l_FFT / 2 + 1 : l_FFT)];
i_Input = real(ifft(fft_I_new, up_L * l_FFT));
u_Input = i_Input(1 : up_L * l_Input);
n_t = 1 / (up_L * f_s) : 1 / (up_L * f_s) : 1;
figure, plot(n_t, u_Input)
xlabel('Zaman(s)')
title('3 ile yukarı örneklenmiş sinüs')

1 Hz’lik sinüs işaretimize 0.1 genlik seviyesine sahip bir sinüs işareti eklenerek giriş işareti aşağıdaki gibi olmaktadır.

Aşağıda yukarıda verilen giriş sinyalinin 3 ile yukarı örneklenmesini sağlayan MATLAB kodu ve çıkışta elde edilen sinyal verilmiştir. 20 Hz ile örneklenen siynaln yeni örnekleme frekansı 60 Hz olmuştur.

clc, clear all, close all;
 
f_s = 20;
f_I1 = 1;
f_I2 = 5;
 
n_t = 1 / f_s : 1 / f_s : 1;
 
s_Input = sin(2 * pi * f_I1 * n_t) + 0.1 * sin(2 * pi * f_I2 * n_t);
figure, plot(n_t, s_Input);
xlabel('Zaman(s)')
title('20 Hzde örneklenmiş 1 Hz ve 5 Hz sinüs toplamı')
 
l_Input = length(s_Input);
l_FFT = 2^(ceil(log2(l_Input)));
 
fft_I = fft(s_Input, l_FFT);
up_L = 3;
 
Zero_Buff = zeros(1, (up_L - 1) * l_FFT);
fft_I_new = up_L * [fft_I(1 : l_FFT / 2)...
   Zero_Buff fft_I(l_FFT / 2 + 1 : l_FFT)];
i_Input = real(ifft(fft_I_new, up_L * l_FFT));
u_Input = i_Input(1 : up_L * l_Input);
n_t = 1 / (up_L * f_s) : 1 / (up_L * f_s) : 1;
figure, plot(n_t, u_Input)
xlabel('Zaman(s)')
title('3 ile yukarı örneklenmiş 1 Hz ve 5 Hz sinüs toplamı')

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir