2016-04-13 12 views
0

Bu yüzden bir dizi gerçek değerli nokta üzerinde bir frekans kaydırması gerçekleştirmeye çalışıyorum. Bir frekans kayması elde etmek için, verilerin karmaşık bir üstel ile çarpılması ve sonuçta elde edilen verilerin karmaşık hale getirilmesi gerekir. Eğer sadece bir kosinüsle çoğalırsam, hem toplamda hem de fark frekanslarında sonuç alırım. Sadece toplamı veya farkı istiyorum.Python'da, karmaşık veriler üzerinde bir fft yaparsam, o zaman sadece pozitif frekansları etkiler, bu verileri nasıl etkiler?

Yaptığım şey, verileri karmaşık bir üstelle çarpmak, fft değerini hesaplamak için fft.fft() yöntemini kullanmak, daha sonra fft.irfft() öğesini yalnızca pozitif frekanslarda kullanmak için yalnızca bir Frekansta toplam veya fark kayması. Bu harika çalışıyor gibi görünüyor, ancak bunu yapmak için herhangi bir eksisi olup olmadığını veya belki de aynı hedefi gerçekleştirmenin daha uygun bir yolunun olup olmadığını bilmek istiyorum. Sağladığınız herhangi bir yardım için şimdiden teşekkür ederiz!

+0

Gerçekten sorun değil. Gerçek verilerin FFT'si spektral alanda gereksizdir (olması gerekir ki, sadece N değerlerini koymanız gerekir, 2N değerleri bağımlı olamaz) Negatif frekansların dışarı çıkması, bu negatiflere farklı bir muamele uygulamamanız halinde bilgiyi kaldırmaz. bilgileri tutmak istiyorum. Tüm frekansları IFFT'den önce saklıyorum, ama zorunda değilsiniz. – roadrunner66

+0

@ reoadrunner66 Ancak, gerçek verilerin FFT'si değil. Gerçek verileri, _complex_ data yapan karmaşık sayılarla çarptım. Daha sonra negatif frekansların mutlaka gereksiz olmadığı tam FFT'yi alırım. Daha sonra IRFFT fonksiyonunun IRFFT fonksiyonunun pozitif frekanslarını, negatif frekansların genel olarak _not_ olduğunda, pozitiflerin konjugatları olduğunu varsayar. – jmurray1241

+0

Sadece bir karmaşık sayı ile çarptığınızda (sabit bir aşama), bilgi içeriğini artırmamalısınız. Ama analitik çözüme bakmalıyız. – roadrunner66

cevap

1

Yaptığınız şey gayet iyi. Negatif frekansları, ayrı bir Hilbert dönüşümü ile aynı şekilde karşılamak için analitik sinyal üretiyorsunuz. Bazı ölçekleme sorunlarına sahip olacaksınız - FFT sonuçlarının gerçek frekanstaki tüm DC olmayan ve olmayan Nyquist sinyalleri iki katına çıkarmanız gerekir.

Bazı pratik kaygılar, bu yöntemin pencere ebadının gecikmesini sağlamasıdır, bu yüzden bunu gerçek zamanlı olarak yapmaya çalışıyorsanız, muhtemelen bir FIR Hilbert transformatörü ve uygun toplamları kullanarak incelemeniz gerekir. Gecikme, bu durumda Hilbert transformatörünün grup gecikmesi olacaktır.

Diğer bir endişe konusu ise, sinyalin DC bileşeninin de diğer tüm frekanslarla birlikte kalacağını hatırlamanız gerektiğidir. Bu sayede, verileri kaydırmadan önce (değeri kaydediniz) DC kutucuğunu sıfırlamanızı (veriyi Ftp'de biten herhangi bir frekans bileşenini kaldırmak için) sıfırlamanızı tavsiye ederim. Sonunda sinyal seviyeleri.

+0

Harika! Doğru olamayacak kadar çok endişeliydim. Ölçekleme konusunda, gerçek frekanslardaki iki faktörden emin misiniz? Benim düşünceme göre, rfft/irfft aynı hesaplama yapar ve sadece negatif frekansların pozitif olanlarla eşleştiğini ve buna göre pozitif frekansları/gerçek değerleri döndürdüğünü varsayın. – jmurray1241

+0

Gecikme süresine gelince, fft'imin pencere boyutuna eşit bir zaman gecikmesi mi? Hilbert trafosu buna karşı mıdır? Ayrıca, mutlak genliğe ihtiyaç duymazsanız DC bileşen önemlidir, yani eğer bir RF sinyalini modifiye edecekseniz? – jmurray1241

+0

Sadece pozitif frekansları koruyorsanız, enerjinizin yarısını atıyorsunuz. Yani faktör 2 haklı. Daha önce söylediğim gibi, bilgiyi atmıyorsunuz. Sadece gerçek bir sinyalin analitik FFT'sini yapın, kosinüs ve sinüs parçalarına bölün, simetri kurallarını uygulayın (kosinüs simetrik, sinüs antisimetrik) ve neden iyi olduğunu, ne yaptığını yaptığınızı kanıtlayabilirsiniz. – roadrunner66

İlgili konular