Özetler İfadeler Hikaye

Salınımlar. Harmonik titreşimler

Harmonik mekanik titreşimlerin uyarılması

Animasyon

Tanım

Salınım sistemi herhangi bir şekilde dengeden çıkarılır ve sonra kendi haline bırakılırsa, sistemde sürtünme olmaması ve potansiyel enerjinin ikinci dereceden genelleştirilmiş koordinata (sözde) bağlı olması koşuluyla harmonik salınımlar gerçekleştirecektir. serbest veya doğal salınımlar). Bir sistemi denge durumundan çıkarmak için ona enerji verilmesi gerekir. Bunu yapmak için sistemi denge konumundan çıkarmak, biraz hız vermek veya her ikisini aynı anda yapmak gerekir. Newton tipi viskoz sürtünmenin varlığında, salınım sistemi de harmonik salınımlar gerçekleştirebilir, ancak yalnızca harmonik bir itici kuvvetin etkisi altında (zorlanmış salınımlar olarak adlandırılır).

Serbest hareketi şu fonksiyonla tanımlanan mekanik bir salınım sistemini ele alalım:

x(t) = A cos (w t + a) . (1)

Böyle bir sisteme denir harmonik osilatör. Fonksiyon (1), harmonik salınımlar olarak adlandırılanları açıklamaktadır. Burada A pozitif değerine salınım genliği denir, w ise dairesel veya döngüsel frekanstır. İşlev

j = w t + a (2)

salınım fazı olarak adlandırılır ve a değerine başlangıç ​​fazı denir. Salınımların periyodu, ilişkiyle frekanslarıyla ilişkilidir.

T = 2 p/w. (3)

Fonksiyon grafiği Şekil 2'de gösterilmektedir. 1.

Harmonik salınımlar için koordinatların zamana bağlılığı

Pirinç. 1

Fonksiyon (1) çözümdür diferansiyel denklem ikinci emir

d 2 x /dt 2 + w 2 x = 0, (4)

Söz konusu sistemin davranışını belirleyen bazı fiziksel yasaları ifade eden bu yasa (genellikle Newton'un ikinci yasası veya eğrisel genelleştirilmiş koordinatların kullanılması durumunda bunun Euler-Lagrange denklemleri veya Hamilton denklemleri gibi sonuçları). Salınımların genliği ve başlangıç ​​aşaması başlangıç ​​koşullarından bulunabilir.

x(0) = xo; d x(0) /dt = v o ,

t = 0 anındaki salınım sisteminin durumunu belirler. Bu koşullar altında xo ve vo keyfi sabitlerdir. Başlangıç ​​koşulları aşağıdaki formüllere yol açar:

A = sqrt (x Ö 2 + (v Ö / k) 2 ) ; tg a = - v o / w x o .

Salınım sistemi üzerindeki dış etki, azaltılmış kuvvet f = f (t) ile açıklanabilir. İçin bahar sarkaç azaltılmış kuvvet f = F(t)/m, burada F dış kuvvettir. Bu durumda x = x(t) fonksiyonu aşağıdaki denklemi sağlayacaktır:

d 2 x /dt 2 + 2 b dx /dt + w o 2 x = f(t) . (5)

Bu denklemin sol tarafındaki ikinci terim, sürtünmenin hareket eden bir cisim üzerindeki etkisini tanımlar. Bu durumda vücudun serbest titreşimleri harmonik olmayacaktır. İndirgenmiş kuvvet f = f(t) zamanın harmonik bir fonksiyonu olsun; Kanuna göre zamana bağlıdır:

f (t) = f m çünkü W t,

burada f m itici kuvvetin genliğidir,

W, değişimin sıklığıdır.

Bu durumda zorlanmış salınımlar aşağıdaki fonksiyonla açıklanacaktır:

x (t) = Bir cos (W t + a),

onlar. itici kuvvetin W frekansı ile harmonik salınımları temsil edecektir. Zorunlu salınımların genliği A, aşağıdaki formüle göre W frekansına bağlıdır:

A(W) = f m / sqrt ((w o 2 - W 2 ) 2 + 4 b 2 W 2 ) .

Zorunlu salınımların başlangıç ​​aşaması a formülle belirlenir

a = - arctg (2 bW / (w o 2 - W 2 )).

Zamanlama özellikleri

Başlatma süresi (-3 ila 1 arasında oturum açın);

Ömür boyu (13'ten 15'e kadar log tc);

Bozunma süresi (log td'yi -4'ten -3'e);

Optimum gelişme zamanı (log tk'yi -3'ten -2'ye).

Başlangıç ​​fazının seçimi, harmonik salınımları tanımlarken sinüs fonksiyonundan kosinüs fonksiyonuna geçmemizi sağlar:

Diferansiyel formda genelleştirilmiş harmonik salınım:

Harmonik kanuna göre serbest titreşimlerin meydana gelebilmesi için, cismi denge konumuna döndürmeye çalışan kuvvetin, cismin denge konumundan yer değiştirmesi ile orantılı olması ve yer değiştirmenin tersi yönde yönlendirilmesi gerekir:

salınan cismin kütlesi nerede.

Harmonik salınımların olabileceği fiziksel sisteme denir harmonik osilatör, ve harmonik titreşimlerin denklemi harmonik osilatör denklemi.

1.2. Titreşimlerin eklenmesi

Bir sistemin aynı anda birbirinden bağımsız iki veya daha fazla salınımlara katıldığı durumlar sıklıkla vardır. Bu durumlarda, salınımların üst üste bindirilmesiyle (eklenerek) oluşturulan karmaşık bir salınım hareketi oluşur. Açıkçası, salınımların eklenmesi durumları çok çeşitli olabilir. Bunlar yalnızca eklenen salınımların sayısına değil aynı zamanda salınımların parametrelerine, frekanslarına, fazlarına, genliklerine ve yönlerine de bağlıdır. Salınımların eklenmesiyle ilgili olası tüm durum çeşitlerini gözden geçirmek mümkün değildir, bu nedenle kendimizi yalnızca bireysel örnekleri ele almakla sınırlayacağız.

Bir düz çizgi boyunca yönlendirilen harmonik salınımların eklenmesi

Aynı periyodun aynı yönde yönlendirilmiş ancak başlangıç ​​fazı ve genliği farklı olan salınımlarının toplandığını düşünelim. Eklenen salınımların denklemleri aşağıdaki biçimde verilmiştir:

yer değiştirmeler nerede ve nerede; ve – genlikler; ve katlanmış salınımların başlangıç ​​aşamalarıdır.

İncir. 2.

Ortaya çıkan salınımın genliğini, genlik vektörlerinin ve açılarda ve eksene eklenen salınımların çizildiği bir vektör diyagramı (Şekil 2) ve paralelkenar kuralına göre genlik vektörünü kullanarak belirlemek uygundur. toplam salınım elde edilir.

Bir vektör sistemini (paralelkenar) eşit şekilde döndürürseniz ve vektörleri eksene yansıtırsanız , daha sonra projeksiyonları verilen denklemlere uygun olarak harmonik salınımlar gerçekleştirecektir. Karşılıklı düzenleme vektörler ve aynı zamanda değişmeden kalır, bu nedenle ortaya çıkan vektörün izdüşümünün salınım hareketi de harmonik olacaktır.

Buradan toplam hareketin belirli bir döngüsel frekansa sahip harmonik bir salınım olduğu sonucu çıkar. Genlik modülünü belirleyelim A ortaya çıkan salınım. Bir köşeye (paralelkenarın zıt açılarının eşitliğinden).

Buradan,

buradan: .

Kosinüs teoremine göre,

Ortaya çıkan salınımın başlangıç ​​aşaması şu şekilde belirlenir:

Faz ve genlik ilişkileri, ortaya çıkan hareketin genliğini ve başlangıç ​​fazını bulmamızı ve denklemini oluşturmamızı sağlar: .

Vuruşlar

Toplanan iki salınımın frekanslarının birbirinden çok az farklı olduğu durumu ele alalım ve genliklerin aynı ve başlangıç ​​aşamalarının aynı olduğunu varsayalım;

Bu denklemleri analitik olarak toplayalım:

Haydi dönüşelim

Pirinç. 3.
Yavaş yavaş değiştiği için niceliğe kelimenin tam anlamıyla genlik denemez (genlik sabit bir niceliktir). Geleneksel olarak bu değere değişken genlik denilebilir. Bu tür salınımların bir grafiği Şekil 3'te gösterilmektedir. Eklenen salınımlar aynı genliğe sahiptir, ancak periyotlar farklıdır ve periyotlar birbirinden biraz farklıdır. Bu titreşimler toplandığında vuruşlar gözlemlenir. Saniyedeki vuruş sayısı, eklenen salınımların frekanslarındaki farka göre belirlenir;

Frekanslar ve titreşimler birbirine yakınsa, iki diyapazon sesi duyulduğunda vuruş gözlemlenebilir.

Karşılıklı dik titreşimlerin eklenmesi

İzin vermek maddi nokta aynı anda iki karşılıklı dik yönde eşit periyotlarla meydana gelen iki harmonik salınımlara katılır. Dikdörtgen bir koordinat sistemi, orijini noktanın denge konumuna yerleştirerek bu yönlerle ilişkilendirilebilir. C noktasının sırasıyla ve eksenleri boyunca ve boyunca yer değiştirmesini gösterelim. . (Şekil 4).

Birkaç özel durumu ele alalım.

1). Salınımların başlangıç ​​aşamaları aynıdır

Zamanın başlangıç ​​noktasını her iki salınımın başlangıç ​​fazları sıfıra eşit olacak şekilde seçelim. Daha sonra eksenler boyunca yer değiştirmeler aşağıdaki denklemlerle ifade edilebilir:

Bu eşitlikleri terime bölerek C noktasının yörüngesine ilişkin denklemleri elde ederiz:
veya .

Sonuç olarak, karşılıklı iki dik salınımın eklenmesi sonucunda C noktası, koordinatların orijininden geçen düz bir çizgi parçası boyunca salınır (Şekil 4).

Pirinç. 4.
2). Başlangıç ​​faz farkı :

Bu durumda salınım denklemleri şu şekildedir:

Nokta yörünge denklemi:

Sonuç olarak, C noktası koordinatların orijininden geçen, ancak ilk duruma göre farklı kadranlarda yer alan bir düz çizgi parçası boyunca salınır. Genlik A her iki durumda da ortaya çıkan salınımlar şuna eşittir:

3). Başlangıç ​​faz farkı .

Salınım denklemleri şu şekildedir:

İlk denklemi şuna, ikincisini şuna bölün:

Her iki eşitliğin karesini alıp toplayalım. Salınım noktasının ortaya çıkan hareketinin yörüngesi için aşağıdaki denklemi elde ederiz:

Salınım noktası C, yarı eksenli bir elips boyunca hareket eder ve. Eşit genlikler için toplam hareketin yörüngesi bir daire olacaktır. Genel durumda, for , ancak çoklu, yani. Karşılıklı dik salınımları eklerken salınım noktası Lissajous şekilleri adı verilen eğriler boyunca hareket eder.

Lissajous figürleri

Lissajous figürleri– karşılıklı olarak birbirine dik iki yönde aynı anda iki harmonik salınım gerçekleştiren bir nokta tarafından çizilen kapalı yörüngeler.

İlk kez Fransız bilim adamı Jules Antoine Lissajous tarafından incelenmiştir. Şekillerin görünümü her iki salınımın periyotları (frekansları), fazları ve genlikleri arasındaki ilişkiye bağlıdır.(Şekil 5).

Şekil 5.

Her iki periyodun eşitliğinin en basit durumunda, şekiller, faz farkıyla ya düz parçalara dönüşen ve faz farkı ve eşit genliklerle daireye dönüşen elipslerdir. Her iki salınımın periyotları tam olarak çakışmıyorsa, faz farkı her zaman değişir ve bunun sonucunda elipsin her zaman deforme olması sağlanır. Önemli ölçüde farklı dönemlerde Lissajous figürleri gözlenmez. Bununla birlikte, eğer periyotlar tamsayılar olarak ilişkiliyse, her iki periyodun en küçük katına eşit bir süre sonra, hareketli nokta tekrar aynı konuma döner - daha karmaşık bir şekle sahip Lissajous figürleri elde edilir.
Lissajous figürleri, merkezi orijine denk gelen ve kenarları koordinat eksenlerine paralel olan ve her iki yanında salınım genliklerine eşit mesafelerde bulunan bir dikdörtgene sığar (Şekil 6).

Harmonik titreşim denklemi

Harmonik salınım denklemi, vücut koordinatlarının zamana bağımlılığını belirler

Kosinüs grafiği ilk anda maksimum değere sahiptir ve sinüs grafiği başlangıç ​​anında sıfır değerine sahiptir. Salınımı denge konumundan incelemeye başlarsak, o zaman salınım bir sinüzoidi tekrarlayacaktır. Salınımı maksimum sapma konumundan dikkate almaya başlarsak, o zaman salınım bir kosinüs ile tanımlanacaktır. Veya böyle bir salınım, başlangıç ​​fazlı sinüs formülüyle açıklanabilir.

Harmonik salınım sırasında hız ve ivmedeki değişim

Sinüs veya kosinüs kanununa göre zamanla yalnızca vücudun koordinatı değişmez. Ancak kuvvet, hız, ivme gibi büyüklükler de aynı şekilde değişir. Salınım yapan cisim yer değiştirmenin maksimum olduğu uç konumlarda olduğunda kuvvet ve ivme maksimumdur ve vücut denge konumundan geçtiğinde sıfırdır. Ekstrem konumlarda ise hız sıfırdır ve vücut denge konumundan geçtiğinde maksimum değerine ulaşır.

Salınım kosinüs kanunu ile tanımlanırsa

Salınım sinüs kanununa göre tanımlanırsa

Maksimum hız ve ivme değerleri

Bağımlılık denklemlerini v(t) ve a(t) analiz ettikten sonra, trigonometrik faktörün 1 veya -1'e eşit olması durumunda hız ve ivmenin maksimum değerleri aldığını tahmin edebiliriz. Formülle belirlenir

Harmonik salınım, argümana bağımlılığın sinüs veya kosinüs fonksiyonu karakterine sahip olduğu, herhangi bir miktardaki periyodik değişim olgusudur. Örneğin, bir miktar uyumlu bir şekilde salınır ve zamanla aşağıdaki gibi değişir:

burada x değişen miktarın değeridir, t zamandır, geri kalan parametreler sabittir: A salınımların genliğidir, ω salınımların döngüsel frekansıdır, salınımların tam fazıdır, salınımların başlangıç ​​fazıdır.

Diferansiyel formda genelleştirilmiş harmonik salınım

(Bu diferansiyel denklemin önemsiz olmayan herhangi bir çözümü, döngüsel frekansa sahip harmonik bir salınımdır)

Titreşim türleri

    Sistem denge konumundan çıkarıldıktan sonra sistemin iç kuvvetlerinin etkisi altında serbest titreşimler meydana gelir. Serbest salınımların harmonik olması için, salınım sisteminin doğrusal olması (doğrusal hareket denklemleriyle tanımlanır) ve içinde enerji kaybının olmaması gerekir (ikincisi zayıflamaya neden olur).

    Zorlanmış titreşimler, harici bir periyodik kuvvetin etkisi altında meydana gelir. Harmonik olmaları için salınım sisteminin doğrusal olması (doğrusal hareket denklemleriyle tanımlanır) ve dış kuvvetin kendisinin zaman içinde harmonik bir salınım olarak değişmesi (yani bu kuvvetin zamana bağımlılığının sinüzoidal olması) yeterlidir. .

Harmonik Denklem

Denklem (1)

dalgalanan S değerinin t zamanına bağımlılığını verir; bu açık biçimde serbest harmonik salınımların denklemidir. Ancak titreşim denklemi genellikle bu denklemin diferansiyel formda farklı bir temsili olarak anlaşılır. Kesinlik için denklem (1)'i şu şekilde alalım:

Zamana göre iki kez türevini alalım:

Aşağıdaki ilişkinin geçerli olduğu görülebilir:

buna serbest harmonik salınımların denklemi denir (diferansiyel formda). Denklem (1), diferansiyel denklem (2)'nin bir çözümüdür. Denklem (2) ikinci dereceden bir diferansiyel denklem olduğundan, tam bir çözüm elde etmek için iki başlangıç ​​koşuluna ihtiyaç vardır (yani, denklem (1)'de yer alan A ve   sabitlerinin belirlenmesi); örneğin, salınım sisteminin t = 0'daki konumu ve hızı.

Matematiksel bir sarkaç, ağırlıksız, uzayamaz bir iplik üzerinde veya tekdüze bir yerçekimi kuvvetleri alanında ağırlıksız bir çubuk üzerinde bulunan maddi bir noktadan oluşan mekanik bir sistem olan bir osilatördür. Serbest düşme ivmesi g ile düzgün bir yerçekimi alanında hareketsiz olarak asılı duran l uzunluğundaki matematiksel bir sarkacın küçük doğal salınımlarının periyodu şuna eşittir:

ve sarkacın genliğine ve kütlesine bağlı değildir.

Fiziksel bir sarkaç, bu cismin kütle merkezi olmayan bir noktaya veya kuvvetlerin hareket yönüne dik sabit bir eksene göre herhangi bir kuvvet alanında salınan katı bir cisim olan bir osilatördür. bu cismin kütle merkezinden geçiyor.

Merkezde Fourier dönüşümü ve Dijital Sinyal İşleme (DSP) gibi her türlü güzellik hakkında birkaç makale vardı, ancak deneyimsiz kullanıcı için tüm bunlara neden ihtiyaç duyulduğu ve nereye ve en önemlisi nasıl uygulanacağı tamamen belirsizdir. BT.

Gürültünün frekans tepkisi.

Şahsen, bu makaleleri okuduktan sonra (örneğin, bu), ilginç ve güzel olmasına rağmen bunun ne olduğunu ve gerçek hayatta neden gerekli olduğunu bana netleştirmedi.
Sadece güzel resimlere bakmak değil, tabiri caizse neyin ve nasıl çalıştığını içimde hissetmek istiyorum. Ses dosyalarının oluşturulması ve işlenmesiyle ilgili özel bir örnek vereceğim. Sesi dinleyip spektrumuna bakıp bunun neden böyle olduğunu anlamak mümkün olacak.
Makale, karmaşık değişkenlerin fonksiyonları teorisini, DSP'yi ve diğer korkutucu konuları bilenlerin ilgisini çekmeyecektir. Daha çok meraklılar, okul çocukları, öğrenciler ve onlara sempati duyanlar için :).

Hemen bir rezervasyon yapayım: Ben matematikçi değilim ve hatta birçok şeyi yanlış bile söyleyebilirim (kişisel mesajla düzeltin), bu makaleyi kendi deneyimlerime ve güncel süreçlere dair kendi anlayışıma dayanarak yazıyorum. Hazırsan gidelim.

Malzeme hakkında birkaç kelime

Okuldaki matematik dersimizi hatırlarsak sinüs grafiğini çizmek için bir daire kullandık. Genel olarak, öyle görünüyor dönme hareketi sinüs dalgasına dönüştürülebilir (herhangi bir harmonik salınım gibi). Bu sürecin en iyi örneği Wikipedia'da verilmiştir.


Harmonik titreşimler

Onlar. aslında sinüs grafiği, aşağıdaki formülle açıklanan vektörün dönüşünden elde edilir:

F(x) = Bir günah (ωt + φ),

A vektörün uzunluğu (salınım genliği), φ vektörün sıfır zamandaki başlangıç ​​açısı (fazı), ω ise dönmenin açısal hızıdır ve şuna eşittir:

ω=2 πf, burada f Hertz cinsinden frekanstır.

Gördüğümüz gibi sinyalin frekansını, genliğini ve açısını bilerek harmonik bir sinyal oluşturabiliriz.

Sihir, kesinlikle herhangi bir sinyalin temsilinin, farklı sinüzoidlerin toplamı (genellikle sonsuz) olarak temsil edilebildiği ortaya çıktığında başlar. Başka bir deyişle Fourier serisi şeklindedir.
İngilizce Vikipedi'den bir örnek vereceğim. Örnek olarak testere dişi sinyalini ele alalım.


Rampa sinyali

Tutarı aşağıdaki formülle temsil edilecektir:

Tek tek toplarsak, önce n=1, sonra n=2 vb. alırsak, harmonik sinüzoidal sinyalimizin nasıl yavaş yavaş testereye dönüştüğünü göreceğiz:

Bu muhtemelen internette bulduğum bir program tarafından en güzel şekilde gösterilmiştir. Yukarıda sinüs grafiğinin dönen bir vektörün izdüşümü olduğu söylenmişti, peki ya daha karmaşık sinyaller? Garip bir şekilde bu, birçok dönen vektörün izdüşümüdür, daha doğrusu bunların toplamıdır ve hepsi şöyle görünür:


Vektör çizim testeresi.

Genel olarak bağlantıya kendiniz gitmenizi ve parametrelerle kendiniz oynamaya çalışmanızı ve sinyalin nasıl değiştiğini görmenizi öneririm. IMHO Anlamak için bundan daha görsel bir oyuncak görmedim.

Ayrıca, Fourier Dönüşümü olarak adlandırılan, belirli bir sinyalden frekans, genlik ve başlangıç ​​​​fazını (açı) elde etmenize olanak tanıyan ters bir prosedür olduğu da unutulmamalıdır.


Bazı iyi bilinen periyodik fonksiyonların Fourier serisi açılımı (buradan)

Bunun üzerinde ayrıntılı olarak durmayacağım ama hayatta nasıl uygulanabileceğini göstereceğim. Kaynakçada materyal hakkında daha fazla bilgiyi nerede bulabileceğinizi önereceğim.

Hadi pratik alıştırmalara geçelim!

Bana öyle geliyor ki her öğrenci bir derste otururken, örneğin matematikle ilgili bir soru soruyor: neden tüm bu saçmalığa ihtiyacım var? Ve kural olarak, öngörülebilir gelecekte bir cevap bulamadığı için maalesef konuya olan ilgisini kaybediyor. Bu yüzden sana hemen göstereceğim pratik kullanım bu bilgi ve bu bilgiye kendiniz hakim olacaksınız :).

Her şeyi kendi başıma uygulayacağım. Elbette her şeyi Linux altında yaptım, ancak herhangi bir ayrıntı kullanmadım; teorik olarak program diğer platformlar altında derlenecek ve çalışacaktır.

Öncelikle ses dosyası oluşturacak bir program yazalım. Wav dosyası en basit dosya olarak alındı. Yapısını okuyabilirsiniz.
Kısaca, bir wav dosyasının yapısı şu şekilde açıklanmaktadır: dosya formatını tanımlayan bir başlık ve ardından (bizim durumumuzda) uzunluğu: sample_frequency*t saniye olan 16 bitlik bir veri (işaretçi) dizisi vardır. veya 44100*t adet.

Bir ses dosyası oluşturmak için bir örnek alınmıştır. Biraz değiştirdim, hataları düzelttim ve düzenlemelerimle son hali artık Github'da burada

100 Hz frekansında saf sinüs dalgasına sahip iki saniyelik bir ses dosyası oluşturalım. Bunu yapmak için programı şu şekilde değiştiriyoruz:

#define S_RATE (44100) //örnekleme frekansı #define BUF_SIZE (S_RATE*10) /* 2 saniyelik tampon */ …. int main(int argc, char * argv) ( ... float genliği = 32000; //mümkün olan maksimum genliği alın float freq_Hz = 100; //sinyal frekansı /* tamponu sinüs dalgasıyla doldurun */ for (i=0 ; Ben

Saf sinüs formülünün yukarıda tartıştığımız formüle karşılık geldiğini lütfen unutmayın. 32000 genliği (32767 alınabilirdi), 16 bitlik bir sayının alabileceği değere (eksi 32767'den artı 32767'ye) karşılık gelir.

Sonuç olarak, aşağıdaki dosyayı alıyoruz (hatta herhangi bir ses üretme programıyla dinleyebilirsiniz). Bu audacity dosyasını açalım ve sinyal grafiğinin aslında saf sinüs dalgasına karşılık geldiğini görelim:


Saf tüp sinüsü

Bu sinüsün spektrumuna bakalım (Analiz->Spektrum grafiği)


Spektrum grafiği

100 Hz'de (logaritmik ölçek) net bir tepe noktası görülebilir. Spektrum nedir? Bu genlik-frekans karakteristiğidir. Ayrıca bir faz frekansı özelliği de vardır. Hatırlarsanız yukarıda bir sinyal oluşturmak için frekansını, genliğini ve fazını bilmeniz gerektiğini söylemiştim. Yani bu parametreleri sinyalden alabilirsiniz. Bu durumda, genliğe karşılık gelen bir frekans grafiğimiz var ve genlik gerçek birimlerde değil Desibel cinsindendir.

Programın nasıl çalıştığını anlatmak için hızlı Fourier dönüşümünün ne olduğunu açıklamak gerektiğini anlıyorum ve bu en az bir makale daha.

Öncelikle dizileri tahsis edelim:

C = calloc(size_array*2, sizeof(float)); // dönüş faktörlerinin dizisi = calloc(size_array*2, sizeof(float)); //giriş dizisi çıkışı = calloc(size_array*2, sizeof(float)); //çıkış dizisi

Sadece şunu söyleyeyim, programda verileri size_array uzunluğundaki bir diziye okuyoruz (bunu wav dosyasının başlığından alıyoruz).

While(fread(&value,sizeof(value),1,wav)) ( in[j]=(float)value; j+=2; if (j > 2*size_array) break; )

FFT dizisi bir dizi olmalıdır (re, im, re, im,… re, im), burada fft_size=1<< p - число точек БПФ. Объясняю нормальным языком:
karmaşık sayıların bir dizisidir. Karmaşık Fourier dönüşümünün nerede kullanıldığını hayal etmeye bile korkuyorum ama bizim durumumuzda sanal kısım sıfıra, gerçek kısım ise dizinin her noktasının değerine eşittir.
Hızlı Fourier dönüşümünün bir başka özelliği de yalnızca ikinin katları olan dizileri hesaplamasıdır. Sonuç olarak ikinin minimum gücünü hesaplamamız gerekir:

Int p2=(int)(log2(header.bytes_in_data/header.bytes_by_capture));

Verilerdeki bayt sayısının logaritmasının bir noktadaki bayt sayısına bölümü.

Bundan sonra rotasyon faktörlerini hesaplıyoruz:

Fft_make(p2,c); // FFT için dönüş faktörlerini hesaplama fonksiyonu (ilk parametre ikinin katıdır, ikincisi ise rotasyon faktörlerinin tahsis edilmiş dizisidir).

Ve adil dizimizi Fourier transformatörüne besliyoruz:

Fft_calc(p2, c, giriş, çıkış, 1); //(biri normalleştirilmiş bir dizi elde ettiğimiz anlamına gelir).

Çıktıda (re, im, re, im,… re, im) biçimindeki karmaşık sayıları elde ederiz. Karmaşık sayının ne olduğunu bilmeyenler için açıklayacağım. Bu makaleye bir sürü dönen vektör ve bir sürü GIF ile başlamam boşuna değil. Yani karmaşık düzlemdeki bir vektör, gerçek koordinat a1 ve hayali koordinat a2 tarafından belirlenir. Veya uzunluk (bu bizim için Am genliğidir) ve Psi açısı (faz).


Karmaşık düzlemde vektör

Lütfen size_array=2^p2 olduğunu unutmayın. Dizinin ilk noktası 0 Hz (sabit) frekansına, son noktası ise örnekleme frekansına, yani 44100 Hz'ye karşılık gelir. Sonuç olarak, her noktaya karşılık gelen ve delta frekansına göre farklılık gösteren frekansı hesaplamamız gerekir:

Double delta=((float)header.frequency)/(float)size_array; //dizi boyutu başına örnekleme frekansı.

Genlik dizisinin tahsisi:

Çift * ampl; ampl = calloc(size_array*2, sizeof(double));

Ve resme bakın: genlik, vektörün uzunluğudur. Ve onun gerçek ve sanal eksene izdüşümlerine sahibiz. Sonuç olarak, bir dik üçgenimiz olacak ve burada Pisagor teoremini hatırlıyoruz, her vektörün uzunluğunu sayıyoruz ve bunu hemen bir metin dosyasına yazıyoruz:

için(i=0;i<(size_array);i+=2) { fprintf(logfile,"%.6f %f\n",cur_freq, (sqrt(out[i]*out[i]+out*out))); cur_freq+=delta; }
Sonuç olarak şöyle bir dosya elde ediyoruz:

… 11.439514 10.943008 11.607742 56.649738 11.775970 15.652428 11.944199 21.872342 12.112427 30.635371 12.280655 30.329171 12.448883 11.932371 12.617111 20.777617 ...

Hadi deneyelim!

Şimdi ortaya çıkan programı sinüs ses dosyasıyla besliyoruz

./fft_an ../generate_wav/sin\ 100\ Hz.wav formatı: 16 bit, sıkıştırılmamış PCM, kanal 1, frekans 44100, saniyede 88200 bayt, yakalamayla 2 bayt, örnek başına 2 bit, veri yığınında 882000 bayt= 441000 log2=18 size array=262144 wav formatı Maks Frek = 99,928 , amp =7216,136

Ve frekans cevabının bir metin dosyasını alıyoruz. Grafiğini gnuplot kullanarak oluşturuyoruz

İnşaat için senaryo:

#! /usr/bin/gnuplot -persist set terminal postscript eps geliştirilmiş renk katı set çıktı "result.ps" #set terminal png boyutu 800, 600 #set çıktı "result.png" set grid xtics ytics set log xy set xlabel "Freq, Hz" set etiketi "Amp, dB" set xrange #set yrange grafiği "test.txt" kullanarak 1:2 başlık "AFC" with lines linestyle 1 !}

Lütfen koddaki X boyunca noktaların sayısına ilişkin sınırlamaya dikkat edin: set xrange . Örnekleme frekansımız 44100 ve Kotelnikov teoremini hatırlarsak sinyal frekansı örnekleme frekansının yarısından daha yüksek olamaz, bu nedenle 22050 Hz'nin üzerindeki bir sinyalle ilgilenmiyoruz. Neden böyle, özel literatürü okumanızı tavsiye ederim.
Yani (davul sesi), betiği çalıştırın ve şunu görün:


Sinyalimizin spektrumu

100 Hz'deki keskin zirveye dikkat edin. Eksenlerin logaritmik ölçekte olduğunu unutmayın! Sağdaki yün, Fourier dönüşümü hataları olduğunu düşündüğüm şey (burada akla pencereler geliyor).

Hoşgörelim mi?

Hadi! Diğer sinyallerin spektrumlarına bakalım!

Etrafta gürültü var...
İlk önce gürültü spektrumunu çizelim. Konu gürültü, rastgele sinyaller vb. ile ilgilidir. ayrı bir kursa layık. Ama biz buna hafifçe dokunacağız. Wav dosyası oluşturma programımızı değiştirelim ve bir prosedür ekleyelim:

Double d_random(double min, double max) ( return min + (max - min) / RAND_MAX * rand(); )

Verilen aralıkta rastgele bir sayı üretecektir. Sonuç olarak main şöyle görünecek:

Int main(int argc, char * argv) ( int i; float amplitude = 32000; srand((unsigned int)time(0)); //(i=0; i) için rastgele sayı üretecini başlat

Bir dosya oluşturalım (dinlemenizi tavsiye ederim). Cesaretle bakalım.


Cesaret sinyali

Audacity programındaki spektruma bakalım.


Menzil

Ve programımızı kullanarak spektruma bakalım:


Bizim spektrumumuz

Gürültünün çok ilginç bir gerçeğine ve özelliğine dikkatinizi çekmek istiyorum; tüm harmoniklerin spektrumlarını içerir. Grafikten de görülebileceği gibi spektrum oldukça eşittir. Tipik olarak beyaz gürültü, ses ekipmanı gibi bant genişliğinin frekans analizi için kullanılır. Başka gürültü türleri de vardır: pembe, mavi ve diğerleri. Ev ödevi bunların nasıl farklılaştığını bulmaktır.

Peki ya komposto?

Şimdi başka bir ilginç sinyale bakalım: menderes. Yukarıda Fourier serisindeki çeşitli sinyallerin açılımlarının bir tablosunu verdim, siz menderesin nasıl genişletildiğine bakın, bunu bir kağıda yazın ve devam edelim.

25 Hz frekansında bir kare dalga oluşturmak için wav dosyası oluşturucumuzu bir kez daha değiştiriyoruz:

Int main(int argc, char * argv) ( int i; short int meandr_value=32767; /* tamponu sinüs dalgasıyla doldur */ for (i=0; i

Sonuç olarak, hemen cesaretle izlemeniz gereken bir ses dosyası elde ediyoruz (yine dinlemenizi tavsiye ederim)


Majesteleri - sağlıklı bir insanın kıvrımlı veya kıvrımlı hali

Çökmeyelim ve spektrumuna bakalım:


Menderes spektrumu

Ne olduğu henüz çok net değil... İlk birkaç harmoniğe bakalım:


İlk harmonikler

Bu tamamen farklı bir konu! Peki, tabelaya bakalım. Bakın elimizde sadece 1, 3, 5 vs. var, yani. tuhaf harmonikler. İlk harmoniğimizin 25 Hz, sonraki (üçüncü) 75 Hz, ardından 125 Hz vb. olduğunu görüyoruz, bu arada genliğimiz giderek azalıyor. Teori pratikle buluşuyor!
Şimdi dikkat! Gerçek hayatta, bir kare dalga sinyali, daha yüksek ve daha yüksek frekansların sonsuz bir harmonik toplamına sahiptir, ancak kural olarak, gerçek elektrik devreleri, belirli bir frekansın üzerindeki frekansları (izlerin endüktansı ve kapasitansı nedeniyle) geçiremez. Sonuç olarak osiloskop ekranında sıklıkla aşağıdaki sinyali görebilirsiniz:


Sigara içenlerin menderes

Bu resim tıpkı Vikipedi'deki resim gibidir; burada kıvrımlı örnek olarak tüm frekanslar değil, yalnızca ilk birkaçı çekilmiştir.

İlk harmoniklerin toplamı ve sinyalin nasıl değiştiği

Menderes aynı zamanda radyo mühendisliğinde de aktif olarak kullanılmaktadır (bunun tüm dijital teknolojinin temeli olduğu söylenmelidir) ve uzun zincirlerle annenin onu tanımaması için filtrelenebileceğini anlamaya değer. Ayrıca çeşitli cihazların frekans yanıtını kontrol etmek için de kullanılır. Bir başka ilginç gerçek, TV sinyal bozucularının, mikro devrenin kendisi onlarca MHz'lik bir kıvrım ürettiğinde ve daha yüksek harmoniklerinin, tam olarak TV'nin çalışma frekansında yüzlerce MHz frekansa sahip olabileceği zaman, tam olarak daha yüksek harmonikler ilkesine göre çalışmasıdır ve daha yüksek harmonikler TV yayın sinyalini başarıyla bozdu.

Genel olarak bu tür deneylerin konusu sonsuzdur ve artık buna kendiniz devam edebilirsiniz.


Kitap

Burada ne yaptığımızı anlamayanlara veya tam tersi, anlayan ama daha iyi anlamak isteyenlere ve DSP okuyan öğrencilere bu kitabı şiddetle tavsiye ediyorum. Bu, bu yazının yazarı olan aptallar için bir DSP'dir. Orada karmaşık kavramlar bir çocuğun bile anlayabileceği bir dilde açıklanıyor.

Çözüm

Sonuç olarak matematiğin bilimlerin kraliçesi olduğunu söylemek isterim, ancak gerçek uygulama olmadan birçok insan ona olan ilgisini kaybeder. Umarım bu yazı sizi sinyal işleme ve genel olarak analog devreler gibi harika bir konuyu incelemeye teşvik eder (kulaklarınızı tıkayın ki beyniniz dışarı sızmasın!). :)
İyi şanlar!