Pencereleme süzgeci tasarım yönteminin artık en önemli tasarım yöntemlerinden biri olmadığına katılıyorum ve gerçekten de geleneksel nedenlerle muhtemelen tarihsel nedenlerden ötürü temsil edildiğinden dolayı olabilir.
Ancak, kullanımının bazı durumlarda haklı olabileceğini düşünüyorum. Hesaplamalı karmaşıklığın artık bir sorun olmadığı konusunda hemfikir değilim. Bu platforma bağlıdır. Masaüstü bilgisayarımızda otururken ve bir filtre tasarlarken, gerçekten de karmaşıklık için endişelenmemize gerek yok. Bununla birlikte, belirli platformlarda ve tasarımın yarı gerçek zamanlı olarak yapılması gereken durumlarda, hesaplama karmaşıklığı bir sorundur ve çok daha karmaşık olan optimal bir tekniğe göre basit bir suboptimal tasarım tekniği tercih edilecektir. Örnek olarak, bir keresinde filtrenin (kiriş oluşturucu) anında yeniden tasarlanmasının gerektiği kiriş biçimleme sistemi üzerinde çalıştım ve bu yüzden hesaplama karmaşıklığı gerçekten önemli bir konuydu.
Ayrıca, pek çok pratik durumda, en iyi ve en iyi tasarım arasındaki fark konusunda endişelenmemize gerek olmadığına ikna oldum. Kantitatif katsayılar ve kantitatif aritmetik işlemlerin kantitatif sonuçları ile sabit noktalı aritmetik kullanmamız gerekirse, bu daha da gerçek olur.
Diğer bir konu, optimum filtre tasarım yöntemlerinin ve uygulamalarının sayısal kararlılığıdır. Parks-McClellan algoritmasının (söylemeliyim, kullandığım uygulamayı ) bir araya gelmediği birkaç durumla karşılaştım. Bu, şartnamenin pek bir anlam ifade etmemesi durumunda gerçekleşecek, ancak aynı zamanda tamamen makul şartlarla da olabilir. Aynısı, doğrusal olmayan bir denklem sisteminin çözülmesi gereken en kötü kareler tasarım yöntemi için de geçerlidir, ki bu da şartsız bir problem haline gelebilir. Bu şartlar altında, pencereleme yöntemi sizi asla yarı yolda bırakmaz.
Pencere yöntemi ile en küçük kareler tasarımı arasındaki karşılaştırmanız hakkında bir açıklama: Bu karşılaştırmanın, pencere yöntemi üzerine en küçük kareler yönteminin genel üstünlüğünü gösterdiğini sanmıyorum. Öncelikle, bu iki yöntemden herhangi biri için tasarım amacı olmayan durma bandı zayıflamasına bakarsınız. Pencereleme yöntemi hiçbir şekilde optimal değildir ve en küçük kareler tasarımı, durdurma bandı enerjisini en aza indirir ve durdurma bandı dalgalanma boyutuna hiç aldırış etmez. Görülebilecek olan şey, pencere tasarımının geçiş bandı kenarının en küçük kareler tasarımından daha büyük olmasına rağmen, durdurma bandı kenarının daha küçük olmasıdır. Sonuç olarak, pencereleme ile tasarlanan filtrenin geçiş bandı genişliği daha küçüktür ve bu da daha yüksek durma bandı dalgalanmalarına neden olur. Geçiş bandı genişliğindeki fark küçük olabilir, ancak filtre özellikleri bu parametreye karşı çok hassastır. Hiç şüphe yok ki, en küçük kareler filtresinin bant enerjisini durdurmak söz konusu olduğunda diğer filtreden daha iyi performans gösterdiğini, ancak bu dalgalanma boyutu kadar kolay olmadığını gösteriyor. Ve eğer bu fark pratikte bir uygulamada gerçekten bir fark yaratabiliyorsa sorun devam eder.
Bakalım, bu gibi karşılaştırmalar genellikle onların görünmesini istediğiniz şekilde görünmek için yapılabilir. Aşağıdaki şekilde, Matlab / Octave işleviyle firls.m
(mavi) tasarlanan en küçük kareleri optimal bir düşük geçiş filtresi ile Kaiser penceresi (kırmızı) kullanarak pencere yöntemiyle tasarlanmış bir düşük geçiş filtresiyle karşılaştırıyorum.
Şekilden, pencere ile tasarlanan filtrenin en küçük kareler optimal filtresinden biraz daha iyi olduğu söylenebilir. Bu elbette anlamsızdır, çünkü "daha iyi" bile tanımlamadık ve en küçük kareler filtresinin daha küçük bir ortalama kare yaklaşım hatası olması gerekir . Ancak, bunu doğrudan şekilde görmüyorsunuz. Her neyse, bu sadece benim böyle bir karşılaştırma yaparken çok dikkatli ve net olması gerektiği iddiamı desteklemektir.
Özetle, DSP öğrencileri için tamamen didaktik nedenlerle öğrenmenin faydalı olmasının yanı sıra, 1970'lerden bu yana teknolojik ilerlemelere rağmen pencereleme yönteminin kullanılmasının bazı pratik senaryolarda haklı çıkabileceğini düşünüyorum. çok yakında değiş.
firpm()
ve arasındaki karşılaştırmayı önerebilirimfirls()
.