PHP ve formlar. PHP ve formlar Giriş tipi radyo php değeri alır

  • 03.11.2019

google.com'u kullanarak nasıl arama yapılır

Herkes muhtemelen Google gibi bir arama motorunun nasıl kullanılacağını biliyor =) Ama özel yapılar kullanarak doğru bir arama sorgusu oluşturursanız, aradığınız sonuca çok daha verimli ve hızlı bir şekilde ulaşacağınızı herkes bilmiyor =) Bu yazıda Bunu ve doğru arama yapmak için nasıl yapmanız gerektiğini göstermeye çalışacağım

Google, google.com'da arama yaparken özel anlamı olan birkaç gelişmiş arama operatörünü destekler. Tipik olarak, bu operatörler aramayı değiştirir ve hatta Google'a tamamen farklı türde aramalar yapmasını söyler. Örneğin, tasarım bağlantı:özel bir operatördür ve sorgu bağlantı: www.google.com size normal bir arama yapmayacak, bunun yerine google.com'a bağlantıları olan tüm web sayfalarını bulacaktır.
alternatif istek türleri

önbellek: Sorguya başka kelimeler eklerseniz, Google, önbelleğe alınan belgede dahil edilen kelimeleri vurgulayacaktır.
Örneğin, önbellek:www.web sitesiönbelleğe alınmış içeriği "web" kelimesi vurgulanmış olarak gösterecektir.

bağlantı: yukarıdaki arama sorgusu, belirtilen sorguya bağlantılar içeren web sayfalarını gösterecektir.
Örneğin: bağlantı: www.web sitesi http://www.site bağlantısı olan tüm sayfaları görüntüler

ilişkili: Belirtilen web sayfasıyla "ilgili" web sayfalarını görüntüler.
Örneğin, ilgili: www.google.com Google ana sayfasına benzer web sayfalarını listeler.

bilgi: Bilgi İste: Google'ın istenen web sayfası hakkında sahip olduğu bazı bilgileri sağlar.
Örneğin, bilgi:web sitesi forumumuzla ilgili bilgileri gösterecektir =) (Armada - Yetişkin web yöneticilerinin forumu).

Diğer bilgi talepleri

tanımlamak: define: sorgusu, bundan sonra yazdığınız kelimelerin çeşitli çevrimiçi kaynaklardan derlenmiş bir tanımını sağlayacaktır. Tanım, girilen tüm ifade için olacaktır (yani, tam sorgudaki tüm kelimeleri içerecektir).

hisse senetleri: Hisse senetleri ile bir sorgu başlatırsanız: Google, sorgu terimlerinin geri kalanını hisse senedi sembolü olarak değerlendirir ve bu semboller için hazırlanmış bilgileri gösteren bir sayfaya bağlantı verir.
Örneğin, hisse senetleri: intel yahoo Intel ve Yahoo hakkında bilgi gösterecektir. (Şirket adını değil, son dakika haberlerini yazdırmanız gerektiğini unutmayın)

İstek Değiştiriciler

alan: Sorgunuza site: eklerseniz, Google sonuçları o etki alanında bulduğu web siteleriyle sınırlar.
Ayrıca ru, org, com vb. gibi bireysel bölgeleri de arayabilirsiniz ( site:com site:ru)

allintitle: allintitle: ile bir sorgu çalıştırırsanız, Google sonuçları başlıktaki tüm sorgu sözcükleri ile sınırlandırır.
Örneğin, allintitle: google arama resimler, Blog vb. tüm Google arama sayfalarını döndürür

Başlık: Sorgunuza intitle: eklerseniz, Google, sonuçları başlığında o kelimeyi içeren belgelerle kısıtlar.
Örneğin, başlık:İş

allinurl: allinurl ile bir sorgu çalıştırırsanız: Google, sonuçları URL'deki tüm sorgu sözcükleri ile sınırlandırır.
Örneğin, allinurl: google arama google ile belgeleri döndürecek ve başlıkta arayacaktır. Ayrıca, bir seçenek olarak, kelimeleri bölü (/) ile ayırabilirsiniz, böylece eğik çizginin her iki tarafındaki kelimeler aynı sayfa içinde aranacaktır: Örnek allinurl: foo/bar

inurl: Sorgunuza inurl: eklerseniz, Google sonuçları URL'de o kelimeyi içeren belgelerle sınırlar.
Örneğin, Animasyon inurl:web sitesi

metin: sadece sayfanın metninde belirtilen kelimeyi arar, bağlantıların başlığını ve metinlerini ve ilgili olmayan diğer şeyleri görmezden gelir.Bu değiştiricinin bir türevi de vardır - tüm metin:şunlar. ayrıca, sorgudaki tüm kelimeler sadece metin içinde aranacaktır, bu da önemli olan, bağlantılarda sık kullanılan kelimelerin göz ardı edilmesidir.
Örneğin, metin:forum

tarih aralığı: zaman dilimlerinde arama yapar (tarih aralığı:2452389-2452389), tarihler Jülyen biçiminde belirtilir.

Peki, ve her türlü ilginç istek örneği

Google için sorgu derleme örnekleri. spam gönderenler için

inurl:control.guest?a=işaret

Site:books.dreambook.com "Ana sayfa URL'si" "Sign my" inurl:sign

Site:www.freegb.net Ana Sayfa

Inurl:sign.asp "Karakter Sayısı"

"Mesaj:" inurl:sign.cfm "Gönderen:"

inurl:register.php “Kullanıcı Kaydı” “Web Sitesi”

Inurl:edu/misafir defteri “Ziyaretçi Defterini İmzala”

Inurl: "Yorum Gönder" "URL" gönder

Inurl:/archives/ “Yorumlar:” “Bilgiyi hatırlıyor musunuz?”

“Script ve Ziyaretçi Defteri Oluşturan:” “URL:” “Yorumlar:”

inurl:?action=“phpBook” “URL” ekle

Intitle:"Yeni Hikaye Gönder"

dergiler

inurl:www.livejournal.com/users/mode=reply

inurl greatjournal.com/mode=reply

Inurl:fastbb.ru/re.pl?

inurl:fastbb.ru /re.pl? "misafir defteri"

Bloglar

Inurl:blogger.com/comment.g?”postID”"anonim"

Inurl:typepad.com/ “Yorum gönder” “Kişisel bilgileri hatırlıyor musun?”

Inurl:greatestjournal.com/community/ “Yorum gönder” “anonim posterlerin adresleri”

“Yorum gönder” “anonim posterlerin adresleri” -

Intitle:"Yorum yayınla"

Inurl:pirillo.com “Yorum gönder”

Forumlar

Inurl:gate.html?”name=Forumlar” “mod=yanıtla”

inurl:”forum/posting.php?mode=reply”

inurl:”mes.php?”

inurl:”üyeler.html”

inurl:forum/üye listesi.php?”

(PHP 4 >= 4.3.0, PHP 5, PHP 7)

msg_receive- Bir mesaj kuyruğundan mesaj alın

Tanım

msg_receive (kaynak $ kuyruğu , int $istenenmsgtype , int &$mesaj türü , int $maksimum boyut , karışık&$mesaj [, bool $ unserialize = DOĞRU [, int $bayraklar = 0 [, int &$hata kodu]]]): bool

msg_receive() istenen msgtype tarafından belirtilen türdeki belirtilen kuyruktan ilk mesajı alacaktır.

parametreler

mesaj kuyruğu kaynak tanıtıcısı

İstenenmsgtype

İstenen msgtype 0 ise, kuyruğun önünden gelen mesaj döndürülür. İstenen msgtype 0'dan büyükse, o türdeki ilk mesaj döndürülür. İstenen msgtype 0'dan küçükse, istenen msgtype mutlak değerinden küçük veya eşit bir türe sahip kuyruktaki ilk mesaj okunur. Kriterlerle eşleşen hiçbir mesaj yoksa, betiğiniz kuyruğa uygun bir mesaj gelene kadar bekler. Belirterek komut dosyasının engellenmesini önleyebilirsiniz. MSG_IPC_NOWAIT bayraklar parametresinde.

mesaj türü

Alınan mesajın türü bu parametrede saklanacaktır.

maksimum boyut

kabul edilecek maksimum mesaj boyutu maxsize tarafından belirlenir; kuyruktaki mesaj bu boyuttan daha büyükse işlev başarısız olur (aşağıda açıklandığı gibi bayraklar ayarlamazsanız).

İleti

Alınan mesaj, mesajı alırken hata olmadıkça mesajda saklanacaktır.

seri hale getir

olarak ayarlanırsa DOĞRU, mesaj, oturum modülüyle aynı mekanizma kullanılarak seri hale getirilmiş gibi değerlendirilir. İleti serileştirilmeyecek ve ardından komut dosyanıza döndürülecektir. Bu, diğer PHP betiklerinden veya WDDX serileştirici kullanıyorsanız, herhangi bir WDDX uyumlu kaynaktan dizileri veya karmaşık nesne yapılarını kolayca almanızı sağlar.

seri hale getirme ise YANLIŞ, mesaj ikili güvenli bir dize olarak döndürülür.

İsteğe bağlı bayraklar, bayrakları düşük seviyeli msgrcv sistem çağrısına geçirmenizi sağlar. Varsayılan olarak 0'dır, ancak aşağıdaki değerlerden bir veya daha fazlasını belirtebilirsiniz (birlikte ekleyerek veya ORing yaparak).

msg_receive için bayrak değerleri
MSG_IPC_NOWAIT İstenen msgtype mesajı yoksa hemen geri dönün ve beklemeyin. İşlev başarısız olur ve karşılık gelen bir tamsayı değeri döndürür. MSG_ENOMSG.
MSG_HARİÇ Bu bayrağı 0'dan büyük bir istenen msgtype ile birlikte kullanmak, işlevin istenen msgtype değerine eşit olmayan ilk mesajı almasına neden olur.
MSG_NOERROR Mesaj maxsize değerinden daha uzunsa, bu bayrağın ayarlanması mesajı maxsize olarak kısaltır ve bir hata sinyali vermez.
hata kodu

İşlev başarısız olursa, isteğe bağlı hata kodu sistem errno değişkeninin değerine ayarlanacaktır.

Dönüş Değerleri

İadeler DOĞRU başarı üzerine veya YANLIŞ başarısızlık üzerine.

Mesaj kuyruğunun başarıyla tamamlanmasının ardından veri yapısı aşağıdaki gibi güncellenir: msg_lrpidçağıran işlemin işlem kimliğine ayarlanır, msg_qnum 1 azaltılır ve msg_rtime geçerli saate ayarlanır.

(PHP 4 >= 4.3.0, PHP 5, PHP 7)

msg_receive- Bir mesaj kuyruğundan mesaj alma

Tanım

bool msg_receive (kaynak $ kuyruğu , int $istenenmsgtype , int &$mesaj türü , int $maksimum boyut , karışık&$mesaj [, bool $ unserialize = DOĞRU [, int $bayraklar = 0 [, int &$hata kodu ]]])

msg_receive() Queue parametresi tarafından belirtilen mesaj kuyruğundan ilk mesajı, istenen msgtype tarafından belirtilen tipte alır.

Parametre Listesi

İstenenmsgtype

İstenen msgtype 0 ise, kuyruktaki ilk mesaj döndürülür. İstenen msgtype 0'dan büyükse, belirtilen türe sahip ilk mesaj döndürülür. İstenen mesaj türü 0'dan küçükse, istenen mesaj türünde belirtilenden küçük veya mutlak değere eşit bir türe sahip ilk mesaj döndürülür. Kriterlerle eşleşen mesaj yoksa, komut dosyanız kuyrukta görünmelerini bekler. belirterek bu davranışı değiştirebilirsiniz. MSG_IPC_NOWAIT bayraklar parametresinde.

mesaj türü

Bu parametre alınan mesajın türünü saklar.

maksimum boyut

Alınan mesajın maksimum boyutu maxsize tarafından verilir; kuyruktaki mesaj bu boyuttan daha büyükse, işlev başarısız olur (aşağıda açıklandığı gibi bayraklar ayarlamazsanız).

İleti

Alınan mesaj, alınan herhangi bir hata yoksa mesajda saklanır.

seri hale getir

yüklü ise DOĞRU, ileti, oturumlar modülündekiyle aynı mekanizma kullanılarak serileştirilmiş olarak kabul edilir. İleti seri durumdan çıkarılır ve ardından komut dosyanıza döndürülür. Bu, diğer PHP komut dosyalarından veya bir WDDX serileştirici kullanıyorsanız, herhangi bir WDDX uyumlu kaynaktan dizileri ve karmaşık nesneleri kolayca almanıza olanak tanır.

Serileştirme diyorsa YANLIŞ, mesaj ikili güvenli bir dize olarak döndürülür.

İsteğe bağlı bayraklar parametresi, bayrakları düşük seviyeli msgrcv sistem çağrısına geçirmenize izin verir. Varsayılan değeri 0'dır, ancak aşağıdaki değerlerden birini veya birkaçını belirtebilirsiniz (bir araya getirerek veya ikili VEYA işlemi gerçekleştirerek).

hata kodu

İşlev başarısız olursa, isteğe bağlı hata kodu parametresi, errno sistem değişkeninin değerini içerecektir.

Dönüş Değerleri

İadeler DOĞRU başarılı bir şekilde tamamlandığında veya YANLIŞ bir hata durumunda.

Başarı durumunda, mesaj kuyruğu veri yapısı şu şekilde güncellenir: msg_lrpidçağıran işlemin kimliğini içerir, msg_qnum 1 azalır ve msg_rtime geçerli zamana göre ayarlayın.

24.6K

Bir html sayfasının bir siteyle etkileşime girmesinin en yaygın yolunun bir form aracılığıyla olduğu bir sır değil. Form (yani, form etiketi tarafından oluşturulan html öğesi), ücretsiz e-posta hizmetleri, çevrimiçi mağazalar ve diğer birçok site türü tarafından da kullanılır.

PHP ile basit formları işlemek kolaydır. Ancak, sayıları geniş bir aralıkta değişebilmesine ve sayıları önceden bilinmemesine rağmen, zaman zaman aynı türden birkaç alanı içeren bir formun işlenmesine ihtiyaç duyulmaktadır. PHP, bu tür durumlar için aynı türdeki alanların bir dizi değer olarak işlenmesini sağlar.


Farklı alan türleri için seçeneklere daha yakından bakalım.

Metin alanları

Bu makalenin amaçları doğrultusunda, metin alanları, metin tipi parametre değeri ve bir textarea etiketi ile giriş etiketleri tarafından oluşturulan öğelere atıfta bulunur. Bu tür birkaç alandan oluşan bir formun işlenmesini organize etmek en kolay yoldur. Aşağıdaki liste, böyle bir formun html işaretlemesini gösterir.






Listeden de görebileceğiniz gibi, form elemanlarının isimleri PHP açısından dizi elemanlarıdır. Bu nedenle, bu formu işleyecek olan PHP betiği, bu formun birçok metin alanını tek bir dizi olarak ele alacaktır. Aşağıdaki örnekte olduğu gibi, tek tek öğelere dizin yoluyla erişilebilir veya liste ve her komut kullanılarak numaralandırılabilir.

n"; ?>

Anahtarlar

Bu makaledeki onay kutuları (onay kutusu), type parametresinin değeri onay kutusuna eşit olan giriş etiketleri tarafından oluşturulan öğelerdir. Değişken sayıda "anahtar" kullanma formu tamamen aynı şekilde oluşturulmuştur. Belirli bir radyo düğmesi değeri seçiminin (yani, değer özelliğinin değeri) önemli olmadığını unutmayın. Aşağıdaki listede bir örnek gösterilmektedir:






Ancak, böyle bir formun işlenmesi, metin alanları için açıklanan işlemeden farklıdır. Bu durumda, site ziyaretçisinin bir veya başka bir anahtarı etkinleştirip etkinleştirmediğini belirlemek gerekir. Dahil edilirse, dizinin karşılık gelen öğesi vardır, değilse yoktur. Aşağıdaki liste, etkinleştirilen radyo düğmelerini yazdıran örnek bir PHP betiğidir:

radyo düğmeleri

Radyo düğmelerinin işlenmesini açıklamadan önce, nasıl çalıştıklarını hatırlamak gerekir. Radyo düğmelerinin özü (type parametresinin değeri radio değerine eşit olan giriş etiketleri tarafından oluşturulan öğeler), kullanıcının bir düğmeyi seçerek aynı kümeden başka bir düğmenin seçimini otomatik olarak kaldırmasıdır. Düğmeler çok basit bir şekilde bir kümede birleştirilir: kümedeki tüm düğmeler aynı ada sahiptir.

Fakat setteki butonların değerleri (yani değer parametreleri) farklıdır. Ve seçilen butonun değeri set ismi ile siteye gönderilecektir. Metin alanları ve radyo düğmelerinde olduğu gibi, radyo düğmesi kümesi adları PHP'de dizi öğesi adları olarak biçimlendirilmelidir. Böyle bir formun bir örneği aşağıdaki listede gösterilmektedir:

// ilk buton seti
// ikinci buton seti
// üçüncü buton seti

Radyo düğmelerini işleme, işlemede hem metin alanlarını hem de radyo düğmelerini kullanarak fikirleri birleştirir. Html sayfasının yazarı varsayılan bir değer belirlemediyse ve kullanıcı radyo düğmesi setinde belirli bir düğme seçmediyse, bu öğe dizide olmayacaktır (radyo düğmeleri gibi).

Araba anahtarlığı ve baudline sinyal analizörü ile yapılan deneyler çok heyecan vericiydi (bununla ilgili daha fazla bilgi önceki bir makalede). Şimdi çıkış sinyali bizim için çok değerli olduğunda daha ciddi bir şey yapmaya çalışacağız (araba anahtarlığından gelen sinyal çok değerli değil, çünkü şifre çözmeden sonra aslında büyük bir rasgele sayı alıyoruz).

Araba anahtarlığı ve baudline sinyal analizörü ile yapılan deneyler çok heyecan vericiydi (bu konuda daha fazlası burada). Şimdi çıkış sinyali bizim için çok değerli olduğunda daha ciddi bir şey yapmaya çalışacağız (araba anahtarlığından gelen sinyal çok değerli değil, çünkü şifre çözmeden sonra aslında büyük bir rasgele sayı alıyoruz).

Bu deneyde, deneysel verici, etkileşimli elektronik nesneler oluşturabileceğiniz Arduino platformunda 433 MHz frekansında çalışmaktadır.

Şekil 1: Deneysel verici

Sinyalin 433 MHz frekansında iletildiğini biliyoruz, bu nedenle sinyali (HackRF kullanarak) 435 MHz frekansında yakalayacağız:

$ hackrf_transfer -r 435MHz-ASK-HACKRF-CW-8M.iq -f 435000000 -s 8000000

HackRF sonuçlarını Baudline sinyal analizörüne yükledikten sonra (bunun nasıl yapılacağı, önceki makaleye bakın), aşağıdakileri alıyoruz:

Şekil 2: Baudline Analizöründeki Sinyal

Kabul edilebilir bir sinyal aldık ve şimdi bu verileri GNU Radio Companion'a (GRC) yükleyeceğiz.

GRC, grafiksel bir arayüz kullanarak blok diyagramlar oluşturmanıza olanak tanır. Bu bloklar daha sonra python kodunda derlenir ve GRC'den bağımsız olarak kullanılabilir. Aynı şeyi GNU Radyo blokları ile kod yazarak da elde edebilirsiniz, ancak GRC birçok kullanışlı özellik içeriyor ve yeni başlayanlar için çalışmak daha kolay, ki ben de kendimi arasında sayıyorum. Ancak, GRC grafik kabuğunun bir dezavantajı vardır: bazen doğru bloğu bulmak zor olabilir. Bu durumda, onu adıyla aramayı deneyin.

İlk adım, HackRF günlük dosyasını GNU Radyo tarafından okunabilecek bir biçime dönüştürmektir. HackRF günlükleri, 8 bitlik işaretsiz tamsayılar olarak depolanan IQ çiftleri olan verilerdir (IQ veya dörtlü örnekleme hakkında daha fazla bilgi bulunabilir). GNU Radyo bileşenleri tipik olarak karmaşık IQ verilerine ihtiyaç duyar ve bu nedenle dosyamızı bu biçime dönüştürmemiz gerekir (algoritma aşağıdaki şekilde gösterilmiştir):

Şekil 3: GNU Radyo formatı için sinyal dönüştürme algoritmasının akış şeması

Başlangıçta blok diyagram, dosyayı yüklemek için standart "Dosya Kaynağı" bileşenini kullanır. "UChar to Float" bloğu daha sonra işaretsiz 8 bit tam sayıları kayan nokta sayılarına dönüştürür. "Deinterleave" bloğunda, toplam veri akışı (IQIQIQ) iki ayrı kanala (I ve Q) bölünür, ardından bunlar tekrar birleştirilir, ancak karmaşık bir sayı biçiminde ("Float to Complex" bloğu Bunun için kullanılır). Bu, GNU Radyo tarafından kullanılan formattır.

"Const Ekle" bloğundan geçtikten sonra, veriler 0 civarında ortalanır (HackRF, 0 ile 256 arasında işaretsiz tamsayılar kullandığından, veriler 127 civarında ortalanır). (Bunu Mike Ossman'a bildirmeliydim - Kickstarter'da HackRF'ye kaydolmak için çok iyi bir neden daha - daha iddialı bir hedef belirlenirse, GNU Radyosunda video kursları alacağız)

En son "Trottle" bloğu, bu sinyali kullanan bir sistemin doğru çalışması için örnekleme hızını 8 MHz'e sıkıştırmak için kullanılır. Genel olarak, sinyalin örnekleme hızını sıkıştırmanın mantıklı olduğunu buldum, çünkü aksi takdirde örnekleme hızı ve sinyal bant genişliği arasında rastgele etkileşimler olabilir (IQ verileri durumunda örnekleme hızı ve sinyal bant genişliği birbiriyle ilişkilidir).

Sıkıştırma aşaması, çeşitli sinyaller için frekansı ayarlamanıza izin veren throttle_rate değişkenini (blok şemasının en üstünde) kullanır. İşte bir sürprizle karşı karşıyayız: GRC, sayıları gerçekte kullanıldıkları biçimde göstermez! GRC, normal veya bilimsel biçimde (onaltılı, sekizli veya Python'un desteklediği herhangi bir şey) sayılara izin verir, ancak bu sayılar insan tarafından okunabilir bir biçimde görüntülenir (sayılar bu biçimde belirtilemez). Bizim durumumuzda geçerli değerler 8000000 veya 8e6'dır, ancak 8M sayısı geçersizdir.

Artık dosyayı doğru biçimde yükledik. Sıradaki ne?

İlk adım, sinyalimizi daha ayrıntılı olarak incelemektir. Sinyal sıkıştırmadan hemen sonra hızlı Fourier dönüşümü ile bloğa gönderebiliriz:

Şekil 4: Hızlı Fourier Dönüşüm Bloğu Parametreleri

Dönüştürücünün çıkışında aşağıdaki sinyali alıyoruz:

Şekil 5: Dönüştürücüden sonraki sinyal

Yukarıdaki şekilde, yakalama frekansında (435 MHz) bir tepe noktası ve 433,8 MHz frekansı civarında iletilen sinyalin bir parçası görüyoruz.

Şimdi dönüştürücü ayarlarına bakalım. Varsayılan olarak, GNU Radyo, taşıyıcı frekansı hakkında hiçbir şey bilmez (eğer bir tane ayarlamazsanız, taşıyıcı frekansının sıfır olduğunu varsayar). Bu durumda, sinyalin kendisi -1.2 MHz'de olacaktır. Bu elbette bana uymuyor ve gerçek değerleri belirleyeceğim:

Şekil 6: FFT dönüştürücü parametreleri

"Sample Rate" ve "Baseband Freq" parametreleri, "samp_rate" ve "capture_freq" değişkenlerine karşılık gelir. “Örnek Hızı” parametresi giriş sinyaliyle eşleşmelidir (bizim durumumuzda 8 MHz'dir; örneği sıkıştırdığımız değer). Aksi takdirde dönüştürücü düzgün çalışmayacaktır.

GRC'de değişkenlerle karşılık gelen blokları kullanırız:

Şekil 7: Değişkenli bloklar

Sinyalimizin nerede olduğunu bildiğimiz için, çalışma frekansında zirveyi önlemek için yakalama 435 MHz'lik bir ofset frekansında yapıldı. Ek olarak, ihtiyacımız olandan çok daha fazla veri yakaladık (spektrumun genişliği ile karşılaştırıldığında). Bu sorunların her ikisini de tek seferde çözmek için "Frequency XLating FIR Filter" bloğunu kullanacağız.

Şekil 8: Bir ara FIR filtresi kullanma

Böyle bir filtre kullanmak, aynı anda üç sorunu çözmenize olanak tanır:

  1. Sinyalin taşıyıcı frekansını kaydırın. Sinyalin istenen bölümüne "aşağı kaydırıyoruz".
  2. Sinyalin ihtiyacımız olmayan bölümlerini kaldırmak için bir bant geçiren filtre kullanın. Ayrıca, ölçüm yaptığımızda, radyo gürültüsü safsızlıkları olmadan yalnızca sinyalimizi ölçeceğiz.
  3. Bölünmüş sinyal. Bu, işlem gücünü azaltacak olan spektrum genişliğini ve sinyal örneklerinin sayısını azaltacaktır. Örnekleme hızı azaldığından, sonraki blokları ayarlarken bunu dikkate almalıyız.

Şekil 9: Ara FIR filtresinin parametreleri

Burada yine decimation (veya split) parametresini ayarlamak için değişkenleri kullanıyoruz, çünkü bu yöntem çok daha uygun. Kırılma değerini elde etmek için, girdi örnekleme hızı değerini çıktı değerine bölmemiz gerekir (bizim durumumuzda, çıktı değeri 50 kHz'dir, nispeten keyfi bir değerdir). 50kHz, tüm sinyalimizi kapsayacak kadar geniştir ve sinyal çok güçlü olduğu için ileriye dönük herhangi bir sorun yaşamayacağız. Gerçek hayatta, muhtemelen çok daha küçük bir değer kullanmalıyız. GRC'nin doğru çalışması için sonucu bir tamsayıya çevirmeliyiz (bunun için int Python işlevini kullanıyoruz).

firdes_tap değişkenini “Taps” parametresine bağlayın (bununla ilgili daha fazla bilgi daha sonra). Bu parametre sinyalimizi izole etmemizi sağlar.

Ve son olarak “Merkez Frekans” parametresi ile taşıyıcı frekans ofsetini ayarlıyoruz (yine değişkenleri kullanarak). Sinyalimizi aşağı kaydırmamız gerekiyor, yani kayma yaklaşık 1,2 MHz (veya 435 MHz - 433 MHz). Ofset aşağı doğru olduğundan, değer negatif olmalıdır.

GNU Radyo 3.6 kullanıyorum. Ancak, en son sürüm 3.7'dir ve bazı değişiklikler vardır. Özellikle, "Merkez Frekansı" parametresi, "gerçek" taşıyıcı frekansı olarak değerlendirilir. GNU Radyo 3.7 kullanıyorsanız, eksi işaretini kaldırın. Bu ve diğer değişiklikler yeni sürümde bulunabilir.

[Güncelleme 9 Şubat 2013 - GNU Radyo güncellemesinden sonra, değişikliğin ne olduğundan emin değilim, çünkü olumsuz önyargı iyi çalışıyor, ancak olumlu önyargı çalışmıyor.]

Şekil 10: firdes_tap değişkeninin değerleri

firdes_tap değişkeni, alçak geçiren filtremizi tanımlar. Buradaki anahtar parametreler şunlardır:

  1. Kazanç = 1 - sinyali yükseltmiyoruz.
  2. Örnekleme hızı (samp_rate) - giriş sinyalinin örnekleme hızına karşılık gelir (bizim durumumuzda 8 MHz).
  3. Kesim frekansı = 2000 - Kesim frekansını 2 kHz olarak tanımlıyoruz.
  4. Filtre Geçiş Frekansı = 20000 - Filtrenin geçiş bant genişliğini örnekleme hızının yaklaşık yarısına ayarlar (bizim durumumuzda, son örnekleme hızı 50 kHz'dir, dolayısıyla geçiş frekansı yaklaşık 20 kHz'dir).

WIN_HAMMING ve 6.76 seçenekleri, GNU Radyosuna bir pencere filtresi kullanmasını söyler. Bu parametreler göz ardı edilebilir.

Sinyali filtreden geçirdikten, desimasyondan ve yeniden merkezlemeden sonra, sinyali tekrar Fourier dönüşümünden geçiriyoruz. Çıktı aşağıdaki gibidir:

Şekil 11: Filtre ve dönüştürücüden geçen sinyal

Sinyalin azaltılmış bir spektral genişliğe sahip olduğunu ve düşündüğümüz alanın dışında yumuşattığını unutmayın.

Alçak geçiren filtre için farklı değerler ayarlayarak farklı sonuçlar elde edebilirsiniz (alçak geçiren filtrenin ayarlanması hakkında daha fazla bilgi edinebilirsiniz).

Fourier dönüşümünü ayarlamayı unutmayın:

Şekil 12: Dönüştürücü ayarları

Sinyalimizin (50 kHz'e kadar) örnekleme frekansındaki ve taşıyıcı frekansındaki değişikliğe özellikle dikkat edilmelidir. Böylece, "Sample Rate" ve "Baseband Freq" parametrelerinde karşılık gelen değişkenleri ayarladık.

Artık filtrelenmiş, ortalanmış, dar bantlı bir AM sinyalimiz var. Bunun hakkında ne yapabiliriz?

Genlik modülasyonu ile genlikte bir değişiklik vardır ve bu parametreyi ölçerek benzer bir sinyali tespit edebiliriz:

Şekil 13: Sinyal ölçüm devresi

"Complex to Mag" bloğu, karmaşık IQ sinyalini mutlak bir değere dönüştürür. Sinyalimiz çok güçlü olduğu ve ayrıca bir filtreden geçtiği için genliği hesaplamaya başvurabiliriz. Sinyal filtrelenmemiş olsaydı ve gürültü mevcut olsaydı, bu kadar basit bir yönteme başvurmamız mümkün olmazdı.

"Complex to Mag" bloğundaki "Out" pininin rengine dikkat edin (mavi yerine turuncu). Bu, çıkış sinyalinin bir kayan nokta değeri olduğu ve bu nedenle giriş bloklarının bu tür sinyali kabul etmesi gerektiği anlamına gelir.

Şekil 14: Alınan sinyal tipinin ayarlanması

"Tip" parametresinin açılır menüsünden sinyal tipini ayarlayabiliriz.

Şimdi GRC çalıştırıldığında, çıktı hesaplanan büyüklüktür. Fare tekerleği ile zaman aralığını kaydırırsak, aşağıdaki resmi göreceğiz:

Şekil 15: Hesaplanan sinyal büyüklüğünün grafiksel gösterimi

Yukarıdaki şekildeki sinyal, Baudline analizöründen gelen sinyal gibi harika görünüyor. İkinci durumda, yararlı sinyali izole etmeye ve izole etmeye ve onu bir hesaplanmış büyüklükler dizisine dönüştürmeye başvurduk.

Şekil 16: İki sinyalin karşılaştırılması

Örnek veri dosyasını buradan, GRC dosyasını buradan indirebilirsiniz.

Bir sonraki yazıda, GRC'den gelen sinyali tekrar orijinal örneğe dönüştürmeye çalışacağız.

Mike Ossman'a, Freenode'daki #hackrf kanalındaki herkese ve bu makaleye katkıda bulunan ve geri bildirimde bulunan herkese teşekkürler.