Fourier transformu ile resample - [ Bulmaca, ödev, yarışma :) ]

Başlatan t2, 18 Eylül 2016, 16:58:34

alicavuslu

Sıfır geçişlerinin olması çok doğal. Çünkü filtre katsayılarını sınırlı sayıda yaptığımızdan değişiklik olmuyor. Katsayıları intfilt(2, 2, 0.6); şeklinde tekrar elde ederseniz sıfır geçişlerinin olmadığı sinyali elde edebilirsiniz.

http://uppit.com/xwkvlyp7mmzq


Not 1: FFT için verilen MATLAB kodları aynı işlemleri yapıyor. Ferdem Hocamızınki sadece generic bir yapıdadır :)
Not 2: Size sürekli zaman düzeleminde işlem yapmanızı ısrar etmemin nedeni FFT'nin getireceği işlem yükünden kaçınmanız içindir.

t2

Anlaşıldı hocam. Olay filtrede bitiyor. Filtreye çalışayım.

t2

interpolasyon filtre formülü nasıl bir şey acaba? detayını nasıl bulabilirim?
Daha önce farkında olmadan bu noktaya gelmiş ve aşağıdaki soruyu sormuştum

https://www.picproje.org/index.php/topic,65557.0.html

Bu sorudaki hesabı yapabilirsek filtreyi icat etmiş oluruz sanırım. 
Sanki analog devre varmış gibi voltajı bulsak yeterli. 

ferdem

Örnek aralarına 0 ekleyip (veri sayısı 2 katına çıktı) dijital "lowpass" FIR filtreden geçirince sonuç aşağıdaki gibi oluyor:


FIR filtre katsayıları MATLAB FDA tool dan veya internetteki araçlarla bulunabilir. Kesim frekansı örnekleme frekansının yarısı veya aşağısı seçmek gerekiyor. Örneğin fs i 16000 seçip kesim frekansı da 3.5k seçtim, aşağıdaki siteden katsayıları bulabilirsiniz:
http://www.arc.id.au/FilterDesign.html

b katsayıları:
Alıntı Yap
-0,000138000000000000
-0,000774000000000000
0
0,00229300000000000
0,00136900000000000
-0,00434200000000000
-0,00520200000000000
0,00560400000000000
0,0125120000000000
-0,00349200000000000
-0,0234030000000000
-0,00593700000000000
0,0365960000000000
0,0289210000000000
-0,0495100000000000
-0,0821230000000000
0,0590040000000000
0,309732000000000
0,437500000000000
0,309732000000000
0,0590040000000000
-0,0821230000000000
-0,0495100000000000
0,0289210000000000
0,0365960000000000
-0,00593700000000000
-0,0234030000000000
-0,00349200000000000
0,0125120000000000
0,00560400000000000
-0,00520200000000000
-0,00434200000000000
0,00136900000000000
0,00229300000000000
0
-0,000774000000000000
-0,000138000000000000

Bu katsayılarla Delphi de bir FIR filtre gerçekleyin, sonucu siz de görün. Adamlar(cooledit) da çok benzer bir işlem yapmışlar, çıkışlar çok benziyor çünkü:
Alıntı Yap
data2=[data_8k zeros(length(data_8k),1)];
data2=reshape(data2.',2*length(data_8k),1);
data3=filter(bx,1,data2);
wavwrite(2*data3,16000,'interpolated_w_filter');

local_data=2*data3;
local_data=local_data.';
local_data=[local_data(17:end) zeros(1,17)];
plot(local_data);
hold on
plot(data_converted,'r');



Yeterince sık(fs>=Nyquist) örneklenmiş bir "lowpass" sinyalin kayıpsız geri elde edilmesi("reconstruction") teorik olarak mümkün, fs/2 kesim frekanslı ideal bir "lowpass" filtre çıkışı orijinal sinyali verecektir.
Gerçekte ideal olmasa da ideale yakın filtreler kullanılır, yukarıda yapmak istediğimiz gibi.
Bu arada bir yerde şu bilgiye rastladım, dijital tarafta "upsampling" yaparak çıkışta kullanılacak DAC devresinin gereksinimi gevşetilebiliyormuş [1]. "Upsampling" yapmanın en mantıklı sebeplerinden biri olmalı.
Alıntı Yapthe sampling rate is increased by a factor of M in discrete time, in
order to reduce the demands of the D/A conversion. This allows us
to use a very simple D/A converter.

[1] http://www.ece.iastate.edu/~namrata/EE424/l1.pdf