Şuradaki adam ilginç bir yöntemle efektif değer hesaplamış. (http://www.cncdesigner.com/wordpress/?p=6656)
Karekök falan almadığını iddia ediyor.
Şurdaki adam "Z" hoca
Arkadaş yeni
@sadogan hocam :) z'yi tanımıyor
@Zoroaster 'ın üslubu , mesajlarından anlaşılan uzmanlık alanı ve forumda ikili tartışmalara girdiği üyeler de göz önüne alındığında pek de yeni bir
arkadaşımıza benzemiyor ve hatta bu kadar ip ucundan sonra çok da yabancı gelmiyor da hadi neyse :)
Hesabı inceledim, karekök almamış ama karekök etkisi yaratacak bir çarpan bulmuş ve her bir iterasyonda tek tek RMS değeri hesaplamış
"oradaki adam".
Millet hala çakozlamamış Zoroaster bildiğiniz "z". Başlık açışındaki ustalıktan (!) (İlk harf büyük diğerleri küçük harf) anlaşılıyor. Her neyse yönetim buna el atar.
İşlem için floating point işlem yapmak gereken anlar çıkabiliyor. İşlemin başlangıcı 0 ile başlarsa 0.99 gibi rakam çıkıyor. Integer kullanırsanız V=0 olur başınız derde girebilir. V'nin 1'in altına düşmemesi gerekiyor gibi geldi. Newton/Rapson gibi bir şey olabilir.
Bu arada aşağıdaki işlem daha çok hoşuma gidiyor.
https://en.wikipedia.org/wiki/Fast_inverse_square_root
Gıcık oldum bu z'ye. Fakat adamın yöntemine hemen çamur atmışsın. Yok floating point gerekirmiş yok efekttif değer 1'in altına inerse sorun çıkarmış.
10 numara bir yöntem.
Bunalmış hoş geldin ,daha ilk mesajından anlamıştım...
Benim bildiğim forumda iki kullanıcı adıyla kişiler var olmamaları gerekiyordu, forum kurallarına bakmak lazım.
Ben de şüphelenmistim gectigimiz gunlerde.
Artik emin oldum. 😊
Alıntı yapılan: LukeSkywalker - 01 Kasım 2016, 15:51:37
Ben de şüphelenmistim gectigimiz gunlerde.
Artik emin oldum. 😊
Forum iyice esrarengiz olmaya başladı,
bakalım katil kim çıkacak. :)
Z or oaster
Tamam tamam itiraf edeyim. Z'yi öldürdüm ve yerine geçtim. Yönetimin bir şey yapmasına gerek yok çünkü Z artık mesaj yazamayacak.
Algoritma, dalga şeklinden bağımsız mı çalışıyor?
Ne verirsen ver.
Hatta klasik karelerin toplamının .... karekökü yönteminde dalga şeklini önceden bilmediğiniz sinyallerin efektif değerini hesaplayamazsınız. Daha doğrusu efektif değer hesaplayan MCU çok kolay yanılır. Ama benim algoritmam yanılmaz.
Mesela aşağıdaki dalga şekli klasik algoritmanızı şaşırtır.
(http://i.hizliresim.com/yV7VnN.png) (http://hizliresim.com/yV7VnN)
Peki örnekleme frekansı ne olmalı?
Şebeke akım ve gerilim ölçümü düşünüyordum bu aralar, true rms araştırırken acaba bu olayımı denesem diye düşünüyorum şimdi.
Alıntı yapılan: mihri - 02 Kasım 2016, 08:34:15
Peki örnekleme frekansı ne olmalı?
En az hata için olabildiğince yüksek tut.
Bu işte bir terslik var, hatam varsa düzeltin. Bırakın daha sinüsü daha DC RMS hesaplayamıyor bu formül. Bir de işlemcim float işlerle uğraşmak zorunda kalacak.
Benim ADC'den gelen değerim sürekli DC 10 count olsun. RMS'i 10'counttur. Yalnız bu formülü binlerce kez işletmem lazım doğru sonuca varmak için. Bir sıkıntı var. Benim kafama yatmadı, yatırtabilir misiniz
@Zoroaster ? Bu işlemin doğru sonuca ulaşması için bir çok kez öteleme gerekecek, hız kazanımı nerede o halde?
(http://i.hizliresim.com/oEDVBQ.jpg)
char adcvalues[ ]={3,5,7,9,11,3,5,7,9,11,3,5,7,9,11,3}; // 16 değer var
bu değerlerin verdiğin algoritmaya göre rms'ini hesaplatan bir program yazar mısın?
veya ben aşağıya programı yazdım, bir kontrol et,
Hata yoksa sonuç 1.05 çıkıyor, oysa 7.34 gibi bir değer çıkması gerekiyordu, hem de sonucun 3 den küçük çıkması imkansız.
char adcvalues[ ]={3,5,7,9,11,3,5,7,9,11,3,5,7,9,11,3};
int main(int argc, char** argv) {
float Ve=1.0;
int Cnt;
for(Cnt=0;Cnt<sizeof(adcvalues);Cnt++){
Ve= (((adcvalues[Cnt] * adcvalues[Cnt] / Ve) + (Ve * 16383)) / 16384);
}
printf("Rms Value : %f" , Ve);
return 0;
}
Alıntı yapılan: CLR - 02 Kasım 2016, 15:06:32
char adcvalues[ ]={3,5,7,9,11,3,5,7,9,11,3,5,7,9,11,3}; // 16 değer var
bu değerlerin verdiğin algoritmaya göre rms'ini hesaplatan bir program yazar mısın?
veya ben aşağıya programı yazdım, bir kontrol et,
Hata yoksa sonuç 1.05 çıkıyor, oysa 7.34 gibi bir değer çıkması gerekiyordu, hem de sonucun 3 den küçük çıkması imkansız.
char adcvalues[ ]={3,5,7,9,11,3,5,7,9,11,3,5,7,9,11,3};
int main(int argc, char** argv) {
float Ve=1.0;
int Cnt;
for(Cnt=0;Cnt<sizeof(adcvalues);Cnt++){
Ve= (((adcvalues[Cnt] * adcvalues[Cnt] / Ve) + (Ve * 16383)) / 16384);
}
printf("Rms Value : %f" , Ve);
return 0;
}
excel 1,050103 çıkartıyor.
Bu algoritma son derece kusursuz ve çok sağlam matematik alt yapıya sahip. Sonsuz bir döngüde işletilir.
MCU ADC dönüşümü yapar bu algoritmaya göre hesaplama yapılır ve ramda efektif değeri saklayan değişkene sonuç yazılır. Dolayısı ile bu rutini ADC interrupt rutinine ilave edeceksiniz.
Siz efektif değeri bilmek istediğinizde gider ve o değişkeni okursunuz.
Böylece algoritma girişteki sinyalin an ve an efektif değerini hesaplar.
İşin püf noktası burada. Zaten web sitemde verdiğim algoritmada döngü dışına çıkmaktan hiç bahsetmedim.
-----------
@CLR16 değer için hesapladıktan sonra tekrar başa dön tekrar hesapla tekrar hesapla......
@FxDev Hız kazanımı nerde?
Güzel soru.
Hız kazanımı algoritmayı kodlamadaki ustalığınızda gizli ve işlemciye getireceğin yük tamamen yazacağın kodun kalitesi ile ilgili.
---------------------
Bildiğiniz gibi sistemler uyarıldığında ilk başlarda geçici rejim baskındır. Bu rejim bittikten sonra sürekli rejim cevabı aradığınız cevabı verir. Aynı durum bu algoritma için de geçerli. Bu algoritma bir sistemin matematiksel modeli.
--------------------
Peryodunu bilmediğiniz bir sinyalin efektif değerini nasıl hesaplarsınız?
Fakat benim algoritmam hesaplar. Bu algoritma ile gürültü sinyalinin dahi efektif değerini hesaplayabilirsiniz.
--------------------
Kusura bakmayın ben kod yayınlamam. Kalitesiz kodlarımı gözler önüne serip kendimi rezil etmek istemem.
sizce kaç sample sonra doğru değeri gösterecek
@Zoroaster yukardaki 3-5-7-9-11 değerlerinde ?
@Zoroaster: Kusura bakma ama bu kod hiç de efektif değil. Karekökten kurtulacağız diye iki adet float bölme ile uğraşıyoruz. En büyük problem burada. ARM ya da FPU birimine sahip olan işlemcilerde problem değil ama gariban 8bit işlemcilerin halini düşünemiyorum. Tekrar ve tekrar, tekrar ve tekrar. Sabit 10 sayısı verdim. Kaç iterasyon sonra gerçek değeri yakaladı biliyor musun; yaklaşık 1600 cycle sonrasında. 20kHz ile ADC ölçümleri aldığını düşün, ~0.1 saniye sonra nihayi sonuca ulaşıyorsun bir de sinyal oynaksa vay halimize. 3 fazla uğraşan arkadaşlara şimdiden geçmiş olsun, 3 adet LN, 3 adet LL ve 3 adet de akım okuyacaksanız RMS olarak vaylar ki vaylar. Şu an benim bu 9 adet RMS'i hesaplamam 5us sürüyor, bir de kalibrasyonu, ortalaması vs. de var.
Fluke vb. makineler sizce frekans vs. biliyorlar mı? Hayır. Sadece örnek zamanlarını çoğaltıyorlar. Yoksa her sinyalde başka sonuç arama işine girecekler.
1600 adet örnek alıp, bu örnekler üzerine çalışarak frekansı bilmediğin sinyalin RMS değerini hesaplamaya çalışıyorsun. Eh bir zahmet hesapla.
Herkesin derdi başka tabi, ben şebekede yarım cycle içerisinde RMS değer ne oluyor ne bitiyor bilmeliyim, sen 1Hz ile atıyorum 1MHz arasındaki sinyalin RMS'ini hesaplamak istiyorsun.
Evet doğruluğu kanıtlanmış süper bir algoritma (!).
Bunu hiç dert etmeyin. MCU'ya elektriği verdiğiniz andan itibaren algoritma zaten hesap yapmaya başlıyor. Size efektif değer lazım olunca hesap falan yapmıyorsunuz sadece Veff değişkenindeki değeri okuyorsunuz.
Olayı şöyle düşünün.
ADC peryodik olarak int çakmakta. Algoritma hesap yapıp int rutinininden çıkılmakta.
ADC mesela her 50us de int çakıyor.
Sonuçta beklediğiniz doğruluk, efektif değeri alınan sinyalin frekansına göre ADC sample sürelerini ayarlarsınız.
Bu bir peryodik int rutini.
ben 3-5-7-9-11 değerlerini verdim. 7,54 e 50000 (ellibin) iterasyonda ulaştı.
Ne güzel işte. Amaç efektif değeri hesaplamak değilmiy di.
50000'inci interupt palsına kadar geçici rejim devam etmiş biraz daha devam edecek görünüyor. Demekki bundan sonra giriş sinyalini çok yakından takip etmeye başlayacak.
Aslında bu süreyi çok aşağılara çekebilirsiz. Fakat algoritmanın şu anki halinin kimseye zararı yok.
10 değerini verdim, tam 10 değerine ulaşması 131949 (132 bin yaklaşık) iterasyonda oldu.
Ya
@Zoroaster şöyle güzel algoritma, böyle mükemmel matematik diyeceğine işin mantığını anlatsan.
Şimdi
@muhittin_kaplan 50us'de int çaksa, ki bu demek oluyor ki en fazla 20kHz örnekleme demek. Eh en az 16 data alınsa 1kHz sinyali ölçebilirsin, adam 1kHz sinüsün RMS'ini hesaplamak için 50us*132bin=6.6saniye sonra sonuç alacak. Peki ya kritik bir sinyalse bu ne yapacağız şimdi. 6.6saniyede neler olur benden iyi biliyorsun, adamlar 100 metreyi koşuyor o sürelerde.
Anlaşıldı beğendiremedik.
Peki AC 50Hz ile ark kaynağı yapan makinanın elektrod akımının efektif değerini ölçmek istiyorum. Hadi bakalım MCU ile efektif değeri ölçecek bir kod yazıverin.
@Zoroaster : Senin algoritmada hesaplayamıyor ki onu, elma/armut kıyaslaması yapma şimdi. Akım 0'ken bir anda 100A'e fırladığında hesaplaması 130bin cycle sürecek yine.
Kaç basamağı kaale alacağız bu arada. 00.00 yaparsam 56bin de ulaşıyor
20ms'de 64 sample alsak, bir sample zamanı yaklaşık 300us
cihaz açıldıktan veya adc okumaya başladıktan sonra
50000 * 300us = 15 000 000us = 15sn sonra doğru efektif değere ulaşıyor. Bu değer pek efektif değil ama sonrasında düzgün olduğunu farz edelim yani
response'ına bakalım.
Normal rms hesaplarken 16 sample'da sonuca erişebiliyoruz, sqrt'siz ise 50000 sample'da
sqrt'li(normal) rms için 17. sample'ı , sqrt'siz içinde 50001'yi hesaplayalım. Okunan adc değeri 50 olsun.
Ve= 7.34; // eski rms değerini doğru kabul ettik ve 50001. sample 50 okundu
Ve= (((50 * 50 / Ve) + (Ve * 16383)) / 16384);
printf("NoSqrt Rms Value\t: %f\n" , Ve);
NoSqrt Rms Value: 7.36
Gerçek rms value : 14.035
Efektif hesaplıyor ama algoritmanın kendisi pek efektif değil gibi duruyor. Ve bu algoritmanın response inanılmaz yavaş.
Elma armut kıyaslaması yok ortada. Elma nerde Armut nerde?
Alıntı YapEfektif hesaplıyor ama algoritmanın kendisi pek efektif değil gibi duruyor. Ve bu algoritmanın response inanılmaz yavaş.
Bu algoritmayı koda döker bir de display takarsanız cihaz son derece kıpraşmasız efektif değer gösterir. Bu algoritmada katsayıları bu amaçla yüksek tuttum. Panoya takarsınız ve panoda stabil bir değer görürsünüz. Amaç da buydu zaten.
Aslında algoritma RC filitre içeriyor ve response time RC değerinin yüksek olmasından kaynaklanıyor.
Ana mantığı 2 derece filitrelerle donatıp response time'ı inanılmaz küçültebilirim. Fakat o zaman algoritmayı burdaki gibi bedava veremem.
Ben sadece ufkunuzu genişletmek istedim.
Alıntı YapNormal rms hesaplarken 16 sample'da sonuca erişebiliyoruz, sqrt'siz ise 50000 sample'da
sqrt'li(normal) rms için 17. sample'ı , sqrt'siz içinde 50001'yi hesaplayalım. Okunan adc değeri 50 olsun....
Normal RMS hesabı diye bir şey yok. O bir matematik teknik. O bir aldatmaca.
Efektif değeri klasik formülle hesaplayan bir program yazın. ADC den ölçüm yapıp sonucu versin.
Deneme amaçlı olarak sin(x) sinyali kullanın.
Nasıl sonuç mükemmel değil mi.
Şimdi de sin(x)+3sin(3x) için aynı programı kullanın ve sonucu hesaplatın.
Sonuç nasıl?
Alıntı yapılan: Zoroaster - 02 Kasım 2016, 16:28:37
...
Peki AC 50Hz ile ark kaynağı yapan makinanın elektrod akımının efektif değerini ölçmek istiyorum. Hadi bakalım MCU ile efektif değeri ölçecek bir kod yazıverin.
Cıks. Biz bu yukarıdakini yapanı bekliyoruz. Artık bedava olur olmaz bilemem.
Şimdi kaçaklara oynamayalım; tepki süresi bu kadar yavaş olursa aşağıdaki sinyalin RMS'ini nasıl hesaplayacağız? Bunları ben iddia etmedim iki şeyi de siz iddia ettiniz. Ben ikisini de yapmanızı bekliyorum. Yoksa boş beleş bir iddia der kaale almam bu formülü.
(http://i.hizliresim.com/yV7VnN.png)
Bu şekilde kimsenin ufku genişlemez...
RC filtreyi modelleyip Z dönüşümünü alarak mı algoritmayı çıkardın? eğer öyleyse bu işlemleri açıklayıp paylaşırsan forumun ruhuna daha uygun olur...
Kuyuya taşı attım. Benden bu kadar.
Birisi forumda bana şöyle demişti. "Her yiğidin bi yoğurt yiyişi vardır. Ben yoğurdu böyle yiyiyorum."
Ben de deneyim bakalım bu yiyiş tarzı iyimiymiş.
Bu arada, algoritmanın nereden geldiğini bulacak adamı gerçekten tebrik ederim.
Alıntı yapılan: Zoroaster - 02 Kasım 2016, 16:51:42
Ana mantığı 2 derece filitrelerle donatıp response time'ı inanılmaz küçültebilirim. Fakat o zaman algoritmayı burdaki gibi bedava veremem.
Bende bedavaya uğraşmam bununla :)
Uğraşmazsan ufkun genişlemez.
Verdiğin örnek mantıklı değil , mesela elinde 1mhz'e(sin (x)) kadar ölçebilen bir frekans ölçer varken 3mhz'i (sin (3x)) doğru ölçsün istiyorsun.
Alıntı yapılan: CLR - 02 Kasım 2016, 17:33:35
Verdiğin örnek mantıklı değil , mesela elinde 1mhz'e(sin (x)) kadar ölçebilen bir frekans ölçer varken 3mhz'i (sin (3x)) doğru ölçsün istiyorsun.
Hayır elimizde 3Mhz'e kadar ölçebilen frekansmetre var ve senden 3Mhz'e akadar olan sinyalleri ölçsün istiyorum.
Efektif değer hesaplayan rutinininle önce 3sin(3x) i hesapla sonra da sin(x) + 3sin(3x) i hesapla.
Alıntı yapılan: FxDev - 02 Kasım 2016, 17:08:40
Yoksa boş beleş bir iddia der kaale almam bu formülü.
Umrumda değil.
Algoritmanın çıkış noktasını bulmaya çalışacaklar için bir kaç ip ucunu vereyim.1) Bir sinyalin efektif değerini bulmak demek, bu sinyalin yapacağı işe eşdeğer iş yapan DC voltajınn değerini bulmak demektir.
2) Tamdalga doğrultucu dahi yapsanız AC sinyaller doğrultulduğunda rıpıl oluşur.
3) Bu rıpılın genliğini büyük değerli RC filitre ile çok küçültebilirsiniz.
4) Eğer RC filitreleme ile rıpıl genliğini düşürmek amacıyla RC çarpanını büyük tutarsanız RC filitrenin zaman sabiti basamak cevabını yavaşlatır.
@Zoroaster hâlâ aşağıdaki gibi bir şeklin RMS'ini sizin algoritmanız nasıl oluyor da hızlı bir şekilde buluyor kavrayamadım? Klasik RMS'ten avantajının aşağıdaki şekildeki gibi hızlı tepkilere cevap vereceğini söylediniz, hatta ve hatta kaynak akımı dediniz, çözümünü bekliyoruz.
(http://i.hizliresim.com/yV7VnN.png)
Neyi anlamadın mesela? MCUnun ADC'si var. ADC girişine ıvır zıvır devre ekledin ve grafikteki sinyali girdin. Efektif değeri nasıl hesaplayacaksın?
Al işte algoritmayı verdim o algoritma ile hesapla.
Neresini anlamadın?
İterasyonla çok vakit kaybı oluyor. Şebeke sinyalini düşünelim, 10ms yarım dalga olsun 1 ms çöküntü oluştu. 20us ADC int gelsin, iterasyon 100bin cycle sonra sonuç veriyor hızlı değil. Bunu anlamıyorum.
Üç kağıtçı seni. Şebekenin dalga şekli sinüstür diyorsun en kötü ihtimalle atıyorsun bir zero cross dedector
Sıfır noktasını yakalıyorsun bakıyorsun + alternasdasın örnek alıyorsun sonra bir sıfır daha geliyuor gene örnekler alıyorsun sonra bir sıfır daha geliyor tekrar + alternans oldu diyorsun sonra tamam 1 tam peryod için verileri topladım bunların karelerini alır toplar terim sayısına böler karekök alır ve efektif değeri hesaplarım diyorsun.
Yada zero cross kullanmadan sinyalin değerlerinin işaretine bakarak alternanslar burda başladı burda bitti diyorsun. PEryodu yakalıyorsun. Ama bak hep sinyalin sinüs olduğu varsayımı var.
Eeee bu ne perhiz ne lahana turşusu? Daha en baştan sinüs dalga için hesap yapmaya karar verdin. Bir alternansda iki sıfır vardır kabülü yaptın. Peki dalga şeklin kargacık burgacık bir şeyse ne olacak? Sinyalin peryodu nerde başlıyor nerde bitiyor nasıl bileceksin?
Yada DC üzerine binmiş bir sinüs sinyal hiç sıfırı kesmeyip salınıyorsa nasıl efektif değer hesaplayacaksın?
İşte bu durumda şöyle yaparsın.
Sinyalimin peryodunu bilmiyorsam efektif değeri sonsuza dek hesaplarsın yani 10 .. 20 terim gibi sample değerleri ile değil her aldığın sample'ı efektif değer hesabında kullanırsın.
Mesela True RMS voltmeter her türlü sinyalin efektif değerini ölçebiliyor bunu nasıl yapabiliyor?
Benim algritmaya çamur atmak yerine kağıt kalem alıp biraz kafa yorun.
Kubilay ne diyordu? Okulda hocalarınız sizi şartlandırıyor halbuki ben olaylara geniş alandan bakıyorum.
Aynı durum var. Efektif değer hesaplama için çok şartlanmışsınız.
Algoritma yavaş çalışıyor falan diyorsunuz da ben onu süper hızlı olsun cevabı çok hızlı olsun diye yazmadım.
Eğer gerçekten algorritma ilginizi çektiyse ve hızlı versiyonu lazım olursa mail atın yeter. Sözleşme metnini yollarım.
Yahu yapmayın etmeyin acaip basit bir algoritma. At gözlüklerinizi çıkarıp atın geniş açıdan bakın. Algoritmayı sizler de hızlandırabilirsiniz.
En azından algoritma neden sağır onun sebenini siz bulun. Aslında bir sürü ip ucu verdim.
Mesela kaynak akımı gibi iğrenç bir akımın efektif değerini nasıl hesaplayacaksın. Verdiğim algoritma tıkır tıkır hesaplar.
Güzel algolar istersen bende mevcut.
STM için acaip algoritmalarım var. Mis gibin asm kokuyor üstelik.
@Zoroaster maalesef ama maalesef tekrar yazıyorum maalesef benim RMS hesaplamalarımda zero cross detection yok. Hatta zero gelmese de hesaplayabiliyorum RMS'i. Algoritmana tek bir açıdan ilgimi çekmişti, hızlı dediğin için. İlgimi kaybetti. Kolay gelsin.
Bu arada algoritma yazmak için çakal olmak lazım. Ben de burda acaip bir çakallık yaptım.
Mesela çok sevdiğim bir 1/karekok(x) algoritması var demiştin. o algo da çok çakalca yazılmış. O algoritmayı anladın mı?
Alıntı yapılan: FxDev - 02 Kasım 2016, 22:00:37
@Zoroaster maalesef ama maalesef tekrar yazıyorum maalesef benim RMS hesaplamalarımda zero cross detection yok. Hatta zero gelmese de hesaplayabiliyorum RMS'i. Algoritmana tek bir açıdan ilgimi çekmişti, hızlı dediğin için. İlgimi kaybetti. Kolay gelsin.
Eğer yazdığın algoritma ark kaynak makinesinde elektroddan akan akımın efektif değerini hesaplayabiliyorsa yada şebekede 50/60 Hz vs frekans ayrımı yapmıyorsa yada 100 + 10sin(wt) için efektif değeri hesaplıyabiliyorsan helal olsun. Aferim.
@Zoroaster hocam çalışmalarınızı takip ediyorum. Matematik ile farklı teknikler geliştiriyorsunuz. Bunları hiç ieee, sciencedirect gibi hakem onayı ile makale yayınlayan yerlere göndermeyi düşündünüz mü ? Hem literatüre katkı olur hem de burada tartışma konusu değil inceleme konusu olur diye düşünüyorum.
Benim çalışmalar ne ki? Ciddi şeyler değil.
Forumda
@fatih6761'den umutluyum. Görün bakın o yöntemin altındaki çakallığı çakacak.
@Zoroaster atış serbestse ben de atabilir miyim? Newton Raphson sqrt. Esitligi biraz kurcaladim ama emin değilim.
Alıntı yapılan: Zoroaster - 02 Kasım 2016, 17:40:28
Hayır elimizde 3Mhz'e kadar ölçebilen frekansmetre var ve senden 3Mhz'e akadar olan sinyalleri ölçsün istiyorum.
Efektif değer hesaplayan rutinininle önce 3sin(3x) i hesapla sonra da sin(x) + 3sin(3x) i hesapla.
Çok ilginç bir yaklaşım, Frekans Response'u çok yavaş algoritma ile yüksek frekans üzerinden hava atmaya çalışıyorsun. Algoritma yüksek frekansa karşı duyarsız yani algoritmayı rms hesaplıyor diyerek, yanlış anlatıp yanlış kullanıyorsun. Bu algoritma geçmişe bakıp rms'den çok büyük değerli samplelarda bile küçük değişimlerle azalıyor artıyor.
İspatlarım diyorsan, yaz bir program algoritmanın güzelliğini görelim, vay be güzelmiş diyelim. Program yazıp örneklendirmeyeceksen, uygulamaya dökmeyeceksen, benim açımdan bu topic'te harcayacak başka zamanım yok.
Algoritmanın hızlandırılmış versiyonunu STM'ye yükleyip video çekeyim tamam.
Uygulamasını yapacaksan stm'ye gerek yok, c'de veya c++'da bir program yaz, girdi olarak bir sinx veya istediğin fonksiyonu kullan, program çalışırken sample sayısını, çarpma bölme sayısını, rms değerini adım adım print et veya görelim, standart rms hesabi ile karşılaştıralım. Merak etme kendi adıma haklıysan hakkını veririm.
Yok demo amaçlı panel metre yapacağım giriş gerilimini ayrı ayrı sinüs, yarımdalga sinüs, yapıp efektif değeri hem usb'den PC ye atıp PC ekranından hem de true rms voltmetreden kameraya alıp izleteceğim.
Bakalım bakalım kaç saniyede refresh edecek. Yoksa voltmetre kadar atik mi olacak?
Elin gavuru True RMS voltmeter yapıyor da Zoroaster mi yapamayacak. Hemi de STM32 ile.
Güldürmeyin ağalar. Elimde ASM gibi bir güç var.
Algoritmada çok az oynayıp PC'de delphi ile sinüs fonksiyonunu 4300 çevrim bitiminde sonuç 0.707 olarak hiç oynamayacak şekilde hesaplıyorum.
50us aralıklarla sample alırsam yaklaşık 0.2 sn de ekranı refresh edebilirim demektir. Zaten panelmetrede 0.2 sn refresh pek arzu edilmez yarım saniyede 1 refresh fena olmaz. Algoritmayı yavaşlatsam mı ne?
@CLR şimdiden kolay gelsin.
@X-Fi 'ye selamlar :)
Hızlı algoritma bu mu? 10ms'de 64 veya 128 adc sample'ı gereken çıktı için
* 4300 adc okuması yapıp,
* bu kadar işlem için işlemci clock hattını meşgul edip,
* 4300* X tane fazladan asm komutunun işlemesini sağlayıp,
* frekans response'nu 20 kat yavaşlatıp (200ms/10ms) ,
sqrt kullanmadım ve asm kullandım diye kendini avantajlı sayıyorsun.
Neyse, daha önce söylediğim gibi benden bu kadar.
Hız görecelidir...
Yahu sanki MCU ile True RMS metre yapabiliyorlarda konuşuyorlar işte.
Alıntı YapHızlı algoritma bu mu? 10ms'de 64 veya 128 adc sample'ı gereken çıktı için
Adamın kafa 50Hz'e takılmış. Efektif değer diyince sadece şebeke geliyor aklına.
Z derdimiz true rms metre yapmak olsaydi 1us de bir data alir ornek sayisini da 262.144 adet yapar islemciye hesaplatir olayi cozerdik. Mis gibi de zerre oynamazdi. Hatta moving rms sekline donusturur her 1 us de o 262.144 adeti bir kere kaydirip RMS alirdik. F4 kullandik miydi da tadindan yenmezdi. Üstüne 1MIPS'te örnek aldığımı için bir de FFT çakardık, 3.8Hz çözünürlükte 500Khz'e kadar da FFT açılımı yapardın. Sonra ana frekansını girer THD'de hesaplardın amma derdimiz bu değil.
Derdimiz isin hizli olmasi, 0.2 saniye cooook uzun bir sure şebeke için 10 alternans gecisi demek örneğin. Şebeke için RMS derdimiz oluyor genelde çünkü millet buradan ekmek yiyor. Şimdi ben şebekede hata algılamak istesem bunu senin algoritmanla 1 alternansta nasıl yaparım hala cevap yok.
Sen hizli algoritma diyorsun ben hiz goremiyorum
@CLR gibi.
Konuyla ilgili son mesajim olsun.
0.707'ye 4300 sample'da eşitledim dediğin için onu örnek verdim, sen her sinyalde 0.707'yi kullanıyorsan orasını bilmem
@CLRhttps://youtu.be/n6obTpAATzk
Umarım kafandaki soru işaretleri kalkar.
Toplam sembolü ile verdiğin RMS hesabındaki N poryot anlamına gelmiyor ki orda peryodu bilmek te şart değil...
Nasıl aynı anlama gelmiyor? Toplamın önündeki N, bir peryod aralığında aldığınız sampların sayısı.
Eğer peryodu bilmek istersen Peryod=N x Delta T
Video çekerken dil sürtçmeleri olabiliyor.
iyi de sinyalin peryodunu bilmek gerekiyor anlamına gelmiyor ki. Kaç adet örnekleme alırsan o sayıyı ifade ediyor örnekleme aralığı ile N'i çarparsan sinyala baktığın pencereyi bulursun bu pencereden de efektif değeri peryodu bilmeden hesaplarsın
RC filtreyi modelleyip s domeninden z domenine geçmişsin anladığım çok abartılacak bişey olmasa gerek.
Sinyalin peryodunu bilmezsen kaç sample alacağını nasıl bileceksin?
Tamam 50 sample alacam diye yol çık.
Bu kez de sampla alma süren (Delta T) ne olacak? Elim mahkum gene peryodu bileceksin.
DT=Peryod/N
Peryod bilinmezse hiç bir şey hesaplayamazsın. Karelerin toplamından yola çıkıp hiç bir şey yapamazsın.
Çünkü efektif değer ifadesinde peryod var.
Alıntı yapılan: Zoroaster - 03 Kasım 2016, 15:13:43
Karelerin toplamından yola çıkıp hiç bir şey yapamazsın.
Başından beri demek istediğiniz bu muydu hocam? Karelerin toplamı değilse nedir?
50uS de örnekleme alıyorum diyorsun belki 20Khz frekanslı sinüs dalgasıyla senkronize oldun sürekli 0 noktasındaki gerilimi ölçüyorsun senin yöntemde hatalı ölçer o zaman.
RMS almak için her zaman ölçülen sinyalin bileşenlerinden daha fazla frekansta örnekleme yapmak lazım.
yani ölçülen sinyal içindeki ana harmonik 50Hz ise 100'üncü harmoniği de hesaba katmanın anlamı yok yada 1000000'ci.
(http://i.hizliresim.com/byzmJZ.jpg)
@mihri +1500
Zaten bu yolla ancak periyottan bağımsız RMS hesabı yapabiliyoruz/m. Pencereyi büyüttükçe de doğruluğun artar. İşin olayı da güzelliği de bu, böylelikle sinyalin frekansından bağımsız olursun. Örnekleme periyodunu ve pencereni arttırdıkça sonucunun doğruluğu artar.
Şebekede çalışırken böylelikle çok az örnek bile iş görür, bir de önceki örneklerle ortalama alınırsa atıyorum yeni örneğin %80'i eskinin %20si gibi low pass filtrede yaparsın.
Bak yukarıdaki kağıda iki dkda çizdim. Ben 1. alanın 2. alanın 3. alanın RMS'ini tık bu yolla hesaplarım.
Artı bir şey daha, benim algoritmam float işlemler barındırmıyor. Örnek sayımı ikinin katları seçerek basit kaydırma işlemleriyle olayı hallediyorum. 16324 gibi rakamlara bölmeye de gerek yok. Düşük güçteki işlemcilerde deneyin bir de bu işlemleri, bilgisayarda yapması bebek oyuncağı bilmemkaç bit float hesabı var.
Onun için diyorum işleminiz doğru sonuç veriyordur bu beni ilgilendirmez, benim ilgilendiğim konu hızlı olması.
Ayrıca birileri integral bilmiyor, 0-T aralığında integral demek, 0-T aralığındaki sinyalin fonksiyonunu işletmek demek. Yani RMS integralini o aralıkta işletiyorsun demek. Periyodun o demek değil. Biz şebekede işler daha iyi hesaplansın diye, RMS peryodu ile şebeke peryodunu birbirine eşitliyoruz ki RMS değerlerimizin hesaplama penceresi hep aynı olsun ve RMS değeri birbirine yakın çıksın.
Tekrar ediyorum, formüldeki 1/T sinyalin frekansı demek değil, türevin alınacağı aralık demek.
İntegralin tepesine yazıyorsun 0'dan T'ye kadar diyorsun. Bu ne demek 0 ile T aralığın, integral içerisindeki formülü işlet demek. Bir nevi alan hesaplama. Burada sinyalin frekansı yok ki, frekans bileşeni yok. Senin oraya yazdığın delta_T örnekleme periyodun, N'de örneğin. Yani bir pencereyi tanımlıyorsun yine.
Anlık RMS değeri olamaz, belirli bir sürenin RMS değeri olur olay bununla ilintili.
20Khz sinyalin efektif değerini ölçmek istersem örnekleme peryodunu 50us alacak kadar enayimiyimki?
Piyasadaki efektif değer ölçen pano tipi voltmetereleri Amerikaya götür muhtemelen yanlış çalışır.
Efektif değeri 50Hz için hesaplayan algoritma yazarsan girişe de 50Hz uygulamak zorunda kalırsın frekansı değiştiremezsin.
Fakat o zaman buna sadece 50Hz de çalışan efektif değer ölçen ölçü aleti denir.
Verdiğim algoritmada frekansı istediğin gibi değiştir yanlış hesap yapmaz.
İstediğin gibi değiştir derken ustruplu değiştir tabiki.
Alıntı Yapyani ölçülen sinyal içindeki ana harmonik 50Hz ise 100'üncü harmoniği de hesaba katmanın anlamı yok yada 1000000'ci.
50 Hz den başka frekans bilmezmisiniz?
Peryodunu bilmediğin bir sinyal için 10000'inci harmonic varmıdır yokmudur bilemezsin.
Bu yüzden en azından benim algoritmam frekansını bilmediği bir sinyali çok kısa aralıklarla örneklemek zorunda.
Alıntı yapılan: Zoroaster - 03 Kasım 2016, 15:32:52
20Khz sinyalin efektif değerini ölçmek istersem örnekleme peryodunu 50us alacak kadar enayimiyimki?
Yani senin yöntemde de ölçülen sinyaldeki en yüksek frekansli bileşeni bilmek gerekiyor öyle mi? Ya da peryodu...
z RMS formülü frekanstan bağımsızdır. Frekans bileşeni yok bir kere. Sadece formülün işletileceği alan tanımlı. Dolayısı ile RMS formülünün kendisi frekanstan bağımsız.
BU İŞLERE İLK BAŞLAYACAK ARKADAŞLAR. SÜPER YÖNTEM BULDUM DİYE BU OLAYA DİREK ATLAMAYIN. KOCAMAN BİR LOW PASS FİLTREDEN BAŞKA BİR ŞEY DEĞİL YÖNTEM.
Kolay gelsin.
Dip not: Forum yöneticlerinden isteğim mesaj onayının kaldırılması. Benim cevabım onaylanıncaya kadar olay soğuyor.
Alıntı yapılan: Cemre. - 03 Kasım 2016, 15:17:11
Başından beri demek istediğiniz bu muydu hocam? Karelerin toplamı değilse nedir?
Artık laf olsun torba dolsun diye mesaj yazdığınıza inanacam nerdeyse.
Bak burada anlatmışım. http://www.cncdesigner.com/wordpress/?p=3189
Bu yazıyı yazan adam
karelerin toplamından yola çıkıp bir şey yapamazsın derken ne demiş olabilir acaba?
Peryodu bilmiyorsan kare almakla bir şey yapamazsın diyorum.
Tamam okumuş mezun olmuş adamlar baz şeyleri unutmuştur da sen yapma.
Alıntı yapılan: mihri - 03 Kasım 2016, 15:41:31
Yani senin yöntemde de ölçülen sinyaldeki en yüksek frekansli bileşeni bilmek gerekiyor öyle mi? Ya da peryodu...
Onu mu anlamak istiyorsun?
Ben olsam şöyle sorardım.
Sample alma peryodumuz T ise;
Frekansı bilinmeyen bir sinyalin efektif değerini hesaplamak istiyorsak sinyalden T aralıklarla alınan örneklerle efektif değer hesaplıyorsak %1 hata nın üstünde hata yapmaya başladıysak sinyalimizin frekansı nedir?
Bu soru daha güzel değil mi? Hem de biraz gıcık soru.
Fakat sizin sorular teknik anlamda gıcık değil de okuyanı gıcık ediyor.
Yani bunu zaten biliyorumda senin iddan senin yönteminle frekans bilgisi olmadan da RMS hesaplanacağı yönündeydi...
Şimdi bu iddanı biraz modifiye edip örnekleme frekansı sinyal içindeki en yüksek frekanslı harmonikten daha fazla yapmak gerekir demen gerekir.
O zaman karelerinin toplamının ortalamasının karekökü de aynı şey olur.
Gıcık olma sen benim abimsin :) ufkumuzu genişletiyoruz.
Algoritma orada merak eden inceler.
Evet benim algoya parametre olarak bak şu frekansı ölçecen diye bir baştan şey demiyoruz. 5 Hz veriyoruz ölçüyor. 20 Hz veriyoruz ölçüyor. 55 Hz veriyoruz gene ölçüyor.
Haa eğerki algoritma hata yapmaya başladı ise bilin ki örnekleme frekansınız artık ölçmeye çalıştığınız sinyal için yetersiz kalmaya başlamıştır.
Her ölçü aletinin bir ölçüm sınırının olması çok doğal.
Algoritmada da 4. maddede ne demişim. Biraz bekleyin. İsterseniz hiç beklemeyin.
Orta noktayı bulucaz diye hissediyorum...
Aynı örnekleme frekansında aynı sayıda örneği kullanarak klasik yöntemle RMS hesaplarsak senin yöntemle aynı sonucu elde ederiz doğru mu?
Eğer doğruysa senin yöntemin +'si ne?
Yahu hocam beni niye fırçaladın şimdi. Videoyu izlerken de ilk 7-8dk dayak yiyorum sandım. Hocam sinir kötü birşey, yapma etme.
Forumda bir süredir "tartışma"nın anlamı farklılaştı. İnsanlar birbirine kızıyor küsüyor, yahu konuştuğumuz şey 4 işlemden ibaret. Neyin kavgası bu? Neyse.
Hocam şimdi cümlemi yanlış anlamışsınız, aslında ben sizin dediğinizi yanlış anlamışım da o şekilde sormuşum hata bende, haklısınız.
Ben konuyu açtığınızdan beri RMS nasıl hesaplanır konusunda denemeler yapıyorum. MCU'yu programladım, 20kHz örnekleme ile 50Hz sinüs sinyali üretiyorum. Bunu 10k 100nF R-C filtreden geçirip ADC'ye giriyorum. ADC'yi de her pulse'te bir kez okuyorum. (Burası biraz tricky çünkü sinyalin peryodu ile ilgili bir ipucu gibi oluyor, sinyali ben ürettiğim için)
Nette bu hesabı yapan bir kod parçası buldum, bakalım becerebilecek miyim diye de bu deneyi yaptım, olmadı. Kod parçası aşağıda. Gerisi söylediğim gibi, belkide sinüs üretirken hata yaptım bilemiyorum scop yok şuanda.
Ben yazdığınız eşitliğin doğruluğunu tartışmıyorum, elbet doğrudur, zaten video'da 70,71'i görmek bana yetti. Ben altında yatan şeyi merak ediyorum.
Şimdi öyle cümleler kuruyorsunuz ki RMS değer sinyalin karelerinin ortalamasıdır amma ben öyle yapmıyorum der gibi. Benim de haliyle kafam karışıyor ve yukarıdaki soruyu soruyorum, bu adam ne demek istiyor diye, kızma yani.
Neyse kod aşağıda, belki biri incelemek ister;
#define INITIAL 1 /* Initial value of the filter memory. */
#define SAMPLES 400
uint16_t rms_filter(uint16_t sample)
{
static uint16_t rms = INITIAL;
static uint32_t sum_squares = 1UL * SAMPLES * INITIAL * INITIAL;
sum_squares -= sum_squares / SAMPLES;
sum_squares += (uint32_t) sample * sample;
if (rms == 0) rms = 1; /* do not divide by zero */
rms = (rms + sum_squares / SAMPLES / rms) / 2;
return rms;
}
Tamam işte algoritmanın özü yerine geçecek bir program bulmuşsun.
Verdiğim algoritmada sinyalin karesi görülmüyormu?
Benim iddia ettiğim tek ne var? Peryodu bilmem gerekmiyor. Fakat karelerin toplamından giderseniz bunu terim sayısına bölmeniz gerekir ve algoritmam o yüzden farklı diyorum.
Bu yüzden de örnek dalga şekli verdim kaynak akımını örnek verdim.
@Zoroaster tamam hocam anlaştık. Karesi görülüyor, sunuş şekliniz beni aldatıyor :D
Alıntı yapılan: mihri - 03 Kasım 2016, 16:15:40
Orta noktayı bulucaz diye hissediyorum...
Aynı örnekleme frekansında aynı sayıda örneği kullanarak klasik yöntemle RMS hesaplarsak senin yöntemle aynı sonucu elde ederiz doğru mu?
Eğer doğruysa senin yöntemin +'si ne?
+ yanıt bekliyoruz.
Tamam anlaştıysak.
O zaman barışalım.
Bu da barış sorusu olsun.
Sinyalin mutlak değerinin 1 peryod boyunca ortalaması ne anlama gelir?
Tamamdır farklı birşey bulmuşsun benimle de anlaştın.
Misal, sinüs sinyali. Koy 4 tane diyot, alsana mutlak değeri. Sonuç hep pozitif bölgede yani tam dalga doğrultulmuş sinüs.
1 Peryot boyunca ortalaması alacağım diyorsunuz. Eee, ortalama değer işte? Mutlak almasaydınız sinüs için 0'dı. Mutlak aldınız, yarım peryot sinüsün ortalama değerini buldunuz. Başka birşey mi sormaya çalışıyorsunuz? Çok mu basite indirgedim.
Alıntı yapılan: Zoroaster - 03 Kasım 2016, 16:37:49
Sinyalin mutlak değerinin 1 peryod boyunca ortalaması ne anlama gelir?
mutlak değer burada sinyalin karesini alıp tekrar karekök almaktan kurtarıyor sanırsam. Çünkü karesini alınca da pozitif oluyor mutlak değer alınca da. tek fark genliği büyük.
@Zoroaster hocam doğru mu gidiyorum ? :) doğru gidiyorsam aklımda gerisine dair tahminlerim var :)
Soruyu Cemreye barış sorusu niyetine sormuştum.
Mutlak değerden yola çıkıp efektif değere ulaşabilir misin?
Aklından ne geçiyor?
tahminimi kağıda döktüm birkaç işlem sonrasında çok da mantıklı bir sonuç çıkmadı. o yüzden ben iptal :)
KOCAMAN BİR LOW PASS FİLTREDEN BAŞKA BİR ŞEY DEĞİL YÖNTEM.
Demiş fxdev halklıda. Zoroasterin yaptığı en büyük hata ise bu filtrenin RMS değerini verdini iddia etmesi.
Bu filtre bazı durumlar haricinde RMS değerini vermez.
Bedavaya da bunu ıspatlamam🙂
Alıntı yapılan: mihri - 03 Kasım 2016, 18:27:00
KOCAMAN BİR LOW PASS FİLTREDEN BAŞKA BİR ŞEY DEĞİL YÖNTEM.
Demiş fxdev halklıda. Zoroasterin yaptığı en büyük hata ise bu filtrenin RMS değerini verdini iddia etmesi.
Bu filtre bazı durumlar haricinde RMS değerini vermez.
Bedavaya da bunu ıspatlamam🙂
Matematik asla yalan söylemez.
Verdiğim algoritma her durumda RMS değeri hesaplar. Yeterki sample alma frekansınız adam gibi olsun.
Verdiğim algoritmanın yanılacağı tek bir dalga formunu bile örnek gösteremezsiniz. İşkembeden sallamayın.
Bu arada günaydın. Sistemin RC filitre içerdiğinin ip uçlarını taa ne zaman vermiştim zaten.
Gözümüze soka soka
RC filitre demenin alemi varmı?
https://www.picproje.org/index.php/topic,66113.msg515470.html#msg515470
https://www.picproje.org/index.php/topic,66113.msg515486.html#msg515486
Matematik yalan söylemezde sen hata yapabilirsin ki hatanın kaşı gözü yarılmış durumda :)
Tamam algoya hata yaptıracak örnek sinyalini görelim o zaman.
MCU'da beceremeyince MATLAB ile deneyeyim dedim, yine beceremedim. Sizce ben mi hatalıyım yoksa kod mu?
MATLAB fonksiyonum
function rms_value = RMS_Calc(sample)
INITIAL = 1;
SAMPLES = 400;
rms_value = INITIAL;
sum_squares = 1*SAMPLES*INITIAL*INITIAL;
sum_squares = sum_squares - (sum_squares/SAMPLES);
sum_squares = sum_squares + sample*sample;
if rms_value == 0
rms_value = 1;
end
rms_value = (rms_value + (sum_squares/SAMPLES)/rms_value) / 2;
Script'im
x = 0:0.00005:0.04;
for p = 1:1:801
k(1,p) = sin(2*pi*50*x(1,p));
m(1,p) = RMS_Calc(k(1,p));
end
subplot(2,1,2), plot(m);
subplot(2,1,1), plot(k);
Sonuç
(https://s11.postimg.cc/sznjvgh83/Ekran_Al_nt_s.jpg) (https://postimg.cc/image/khe3r4apb/)
Matlab bilmiyorum.
Fonksiyonu matematiksel yazsan yeterli.
Haaa bir dakika. O algo benim algo değilki. Onu Cemre verdi. Benle alakası yok o algonun.
Ben sadece özü aynı dedim.
Alıntı yapılan: Zoroaster - 03 Kasım 2016, 19:16:10
Tamam algoya hata yaptıracak örnek sinyalini görelim o zaman.
Daha önce de dediğim gibi... şimdi freelance bir tasarım yapıyorum iban göndereyim kabul edersen?
İban ile birlikte banka giriş kodlarını da göndereceksen anlaştık.
Tamam, matlab'da hesabı yaptım. Benim verdiğim kodda ufak bir değişiklik yapmam gerekti ama şuan çalışıyor.
@Zoroaster 'in tek satırlık kodu ile grafikleri karşılaştırdığımda (aynı verileri girerek iki ayrı grafiği kendim elde ettim) 50Hz sinus dalgasına verdikleri cevaplar çok yakın. Çok yakın olduğunda benim verdiğim kodun sample alma sayısı 9600 sample. 50us'de bir sample alıyorum. 480ms (24 tam peryot) boyunca sample alıp
@Zoroaster 'in koduna yaklaşık dalgalılıkta bir sonuç elde edebiliyorum. Sample sayısını 400'e düşürdüğümde ise (1 tam peryot) 0.74 ile 0.68 arasında geziyor değer. (0.7071 olmalı)
Bir de MCU'da iki kodu koşturup hesabın kaç uS tuttuğuna bakılırsa bence güzel bir karşılaştırma olabilir.
Anlaşılır olmadıysa grafikleri de paylaşabilirim.
@Zoroaster hocam 50Hz sinüs 20kHz'de örneklenmiş sinyal için sample sayısı 400 olan halini paylaşabilirseniz onu da karşılaştırmak isterim.
(https://s17.postimg.cc/tb5gr96u7/Ekran_Al_nt_s.jpg)
İlk grafik sinüs.
İkinci grafik 400sample ile benim verdiğim kod.
Üçüncüsü
@Zoroaster 'in kodu.
yahu
@z sen ne ara ise gidiyon ne ara bu islerle ugrasmaya vakit buluyon vallahi performansina hayranim, ben seni takip etmekten yoruldum inan, bagamlilik gibi bisi oldun.
@Zoroaster , Hocam sample alma sıklığımı 5uS'ye düşürdüğümde verdiğim kod sizinkine kıyasla daha az salınımlı bir sonuç veriyor. Bu durumda sizin kodun tek avantajı (şuan görünen avantajı) daha az satırda işin halledilmiş olması. Verdiğim kod optimize edilirse sizinki gibi tek satıra indirilebilir mi? Bilmiyorum. MCU ne kadar vakit harcıyor her iki kodu koştururken bunu da bilmiyorum. Geriye birtek bunların karşılaştırılması kalıyor. Onun dışında
@mihri hocamın dediği gibi bir durum varsa, yani spesifik bir sinyal bu hesabı delebiliyorsa zaten sorun çok daha büyük demektir.
Hiiç korkma.
O kadar sağlam taş gibi bir matematik alt yapısı varki asla ve asla sistemi göçertemeyiz.
Kullanacağınız filitreleme fonksiyonuna göre sistem tepkisi degişir, rıpıl değişir. Fakat her zaman sonuç eli mahkum efektif değere yakınsar.
Puf artık komik bile olmaktan çıktı.
Bari şu foruma yanlış bilgi verme, zavallının biri inanıp bunu kullanacak sonra saç baş yolacak gariban, insanlar bu yüzden ekmeklerinden bile olabilir. 100 kere tartmalıyız bir şeyi paylaşırken forumda bu yüzden.
Alıntı yapılan: Zoroaster - 03 Kasım 2016, 21:59:21
Hiiç korkma.
O kadar sağlam taş gibi bir matematik alt yapısı varki asla ve asla sistemi göçertemeyiz.
Kullanacağınız filitreleme fonksiyonuna göre sistem tepkisi degişir, rıpıl değişir. Fakat her zaman sonuç eli mahkum efektif değere yakınsar.
Hocam bence V nin katsayısı 16383 değil 16383.5 olmalı. Haksız mıyım?
Ayrıca bu metod sin(t) için de sin(3*t) içinde çalışmalı. Normal RMS formülünden bir farkı yok aslında.
Ve hatta sample edilen değer V ye bölünmek yerine 2*V ye bölünürse daha şık sonuçlar veriyor.
Hesap hatalı. Öncelikle, RMS hesabı için işaretin periyodik olması veya sıfır geçiş yakalanması gerekmiyor. Herhangi bir "waveform" un belirli bir süre boyunca harcadığı enerjiye karşı düşen enerjiyi harcatan bir DC voltaj bulunabilir. R=1 alınarak kolaylaştırılır.
Belirli bir zaman diliminde RMS bulmak için o zaman dilimindeki toplam enerjinin bulunması gerekir. Bulduğunuz toplam enerjiyi enerjinin harcandığı süreye bölüp ortalama güç bulursunuz. Pavg=Vrms^2 dir.
Elde bir Vrms ve yeni gelen bir V değeri var ise RMS şöyle bulunur: Toplam enerji nedir, T*Vrms^2 + dt*V^2 dir. Burada T mevcut Vrms in ne kadar süredir(10 saniyelik mesela) hesaplandığı dt de bir örnek için geçen süre. Bu enerjiyi T+dt ye bölerseniz Pavg bulursunuz, bunun da kökünü alırsanız doğru RMS değeri bulursunuz.
Yani şu ifadenin kökü: (T*Vrms^2 + dt*V^2)/(T+dt)
Sizin formül şu: Ve(n)*Ve(n-1)= [16383*Ve(n-1) *Ve(n-1) + V(n)*V(n)]/16384;
Diyorsunuz ki ben toplam enerjiyi bulurken geçmişe 16383 ağırlık yeni gelen enerji dilimine 1 ağırlık vererek ortalama gücü bulurum. Halbuki burada gerçek değerleri kullanmak gerekiyordu. Bu değerler(T ve (T+dt)) her örnekte değişir. Bu değerler ile tepki süresini ayarlıyorum diyemeyiz, RMS değeri geçmişin birikimi, bu ağırlıklandırmada oranlar geçen süre ve örnek süresidir. RMS değeri aynı seyreden bir "waveform" da, sinüs mesela, bu hata ortaya çıkmaz.
Toplam enerjiyi bulunca kök alınması gerekirken en son bulunan RMS e bölüp doğru RMSe yakın ancak hatalı bir RMS buluyorsunuz ki bu hata artarak doğru RMS den iyice uzaklaşabilirsiniz, aşağıda örneği var.
Yöntemin hata yapacağı "waveform" istiyorsak şu 16383 e 1 alınan orandan görebiliriz, örnek uzunluğu 16383 ün üzerinde mesela 50000 veya daha üzeri örnek olsun ve bu sürede genlik ramp fonksiyonuyla değişsin. Yöntemin doğru ve yanlış sonuç verdiği örnek:
(https://s15.postimg.cc/5wmg1i9dz/image.jpg) (https://postimg.cc/image/5wmg1i9dz/)
(https://s15.postimg.cc/eg5tz9hqf/image.jpg) (https://postimg.cc/image/eg5tz9hqf/)
close all
clc
per=20;
t=0:0.5e-3:per;
x=(linspace(1,100,length(t))).*sin(2*pi*t);
subplot(1,2,1)
plot(t,x);
ylim([-150 150])
xlabel('t(saniye)');
ylabel('Voltaj(V)');
% sum(abs(x))*1e-3
y=zeros(1,length(x));
%Ve(n)= [Ve(n-1) * 16383 + V(n)*V(n)/Ve(n-1)] /16384;
new_rms=1;
for k=1:length(x)
new_rms=[new_rms*16383+x(k)*x(k)/new_rms]/16384;
y(k)=new_rms;
end
new_rms
subplot(1,2,2)
plot(y,'b')
hold on
y2=zeros(1,length(x));
total_energy=0;
for k=1:length(x)
total_energy=total_energy+x(k)*x(k)*t(2)-t(1);
avg_power=total_energy/[t(k)-t(1)];
vrms=sqrt(avg_power);
y2(k)=vrms;
end
vrms
plot(y2,'r')
legend('ZoroasterRMS','TrueRMS')
xlabel('t(saniye)');
ylabel('Vrms(V)');
@ferdem hocam şu an matlab erişim imkanım yok da bir zahmet şunu deneyebilir misiniz?
[latex]V \leftarrow \frac{1}{N} \left( \left( N - \frac{1}{2} \right) V + \frac{v_{in}^2[n]}{2V} \right)[/latex]
new_rms = (1.0/16384) * (16383.5*new_rms + 0.5*v[k]*v[k] / new_rms)
new_rms_2 yaptım, şu şekilde değil mi:
close all
clc
per=20;
t=0:0.5e-3:per;
x=(linspace(1,100,length(t))).*sin(2*pi*t);
subplot(1,2,1)
plot(t,x);
ylim([-150 150])
xlabel('t(saniye)');
ylabel('Voltaj(V)');
% sum(abs(x))*1e-3
y=zeros(1,length(x));
%Ve(n)= [Ve(n-1) * 16383 + V(n)*V(n)/Ve(n-1)] /16384;
new_rms=1;
new_rms_2=1;
for k=1:length(x)
new_rms=[new_rms*16383+x(k)*x(k)/new_rms]/16384;
new_rms_2 = (1.0/16384) * (16383.5*new_rms_2 + 0.5*x(k)*x(k) / new_rms_2);
y(k)=new_rms;
y2(k)=new_rms_2;
end
new_rms
subplot(1,2,2)
plot(y,'b')
hold on
plot(y2,'g')
y2=zeros(1,length(x));
total_energy=0;
for k=1:length(x)
total_energy=total_energy+x(k)*x(k)*t(2)-t(1);
avg_power=total_energy/[t(k)-t(1)];
vrms=sqrt(avg_power);
y2(k)=vrms;
end
vrms
plot(y2,'r')
legend('ZoroasterRMS','6761oneri','TrueRMS')
xlabel('t(saniye)');
ylabel('Vrms(V)');
(https://s15.postimg.cc/mchqf99o7/image.jpg) (https://postimg.cc/image/mchqf99o7/)
Alıntı yapılan: ferdem - 04 Kasım 2016, 02:28:50
new_rms_2 yaptım, şu şekilde değil mi:
close all
clc
per=20;
t=0:0.5e-3:per;
x=(linspace(1,100,length(t))).*sin(2*pi*t);
subplot(1,2,1)
plot(t,x);
ylim([-150 150])
xlabel('t(saniye)');
ylabel('Voltaj(V)');
% sum(abs(x))*1e-3
y=zeros(1,length(x));
%Ve(n)= [Ve(n-1) * 16383 + V(n)*V(n)/Ve(n-1)] /16384;
new_rms=1;
new_rms_2=1;
for k=1:length(x)
new_rms=[new_rms*16383+x(k)*x(k)/new_rms]/16384;
new_rms_2 = (1.0/16384) * (16383.5*new_rms_2 + 0.5*x(k)*x(k) / new_rms_2);
y(k)=new_rms;
y2(k)=new_rms_2;
end
new_rms
subplot(1,2,2)
plot(y,'b')
hold on
plot(y2,'g')
y2=zeros(1,length(x));
total_energy=0;
for k=1:length(x)
total_energy=total_energy+x(k)*x(k)*t(2)-t(1);
avg_power=total_energy/[t(k)-t(1)];
vrms=sqrt(avg_power);
y2(k)=vrms;
end
vrms
plot(y2,'r')
legend('ZoroasterRMS','6761oneri','TrueRMS')
xlabel('t(saniye)');
ylabel('Vrms(V)');
(https://s15.postimg.cc/mchqf99o7/image.jpg) (https://postimg.cc/image/mchqf99o7/)
Evet hocam doğru bu şekilde. İlginçtir ki pythonda küçük bir program yazıp denediğimde düşük frekanslarda hata yüksek çıkıyor. Yüksek frekanslarda daha yakın sonuçlar alıyorum. Araştırmaya değer bir konu.
Alıntı yapılan: FxDev - 03 Kasım 2016, 22:11:43
Puf artık komik bile olmaktan çıktı.
Bari şu foruma yanlış bilgi verme, zavallının biri inanıp bunu kullanacak sonra saç baş yolacak gariban, insanlar bu yüzden ekmeklerinden bile olabilir. 100 kere tartmalıyız bir şeyi paylaşırken forumda bu yüzden.
Bak Fxdev böyle saçma sapan cevaplarla ancak beni sinirlendirmiş oluyorsun. Bu yaptığının teknik bir tartışma ile yakından alakası yok. Algoritmayı süper anladın prensibinin yanlış olduğunu da buldun sonra da millete hey aman ha bunu sakın kullanmayın diye nasihatta bulunuyorsun öylemi?
Lütfen kendine gel kendine çeki düzen ver.
Madem algoritmanın yanlış olduğundan bu kadar eminsin bunu saygın bir teknik adam olarak
matematiksel yöntemlerle açıkla.
A: Bu efektif değer algoritmasını kullanmayalım.
B: Neden?
A: Fxdev öyle diyor
Git işine. Biraz matematik öğren gel.
Ben bu algoritmanın matematiksel temeli olduğunu kaç kez söyledim. Sadece özünde ne olduğunu söylemedim.
Bu durumda senin algoritmayı çürütebilmen için matematiksel yaklaşman gerekir.
Fxdev ne ya?
Böyle yapmayın şöyle yapın ne bu matematiksellik mi? Bilimsellik mi?
Z öyle diyoruz anlamıyorsun, böyle diyoruz hayır diyorsun. Whatssup üzerinden yazdım, buradan yazdım, bir önceki mesajımda belirttim. Bizim yazdıklarımızı okumuyor, bir şey bilmemekle itham ediyorsun (videodan bahsediyorum). Olay böyle olunca da kusura bakma kaçtığını hissediyorum. (Şimdi hiddetlenme hemen). Artı diyorsun ki matematik ağzı ile konuş bana; videondaki hataları aşağıdaki mesajda belirttim. En basitinden 1/T gördüğünde "bu periyodun tersidir, öyleyse bu frekansla ilintili" dersen her gördüğün sakallı ile dede ile ilgili sözü hatırlatırım.
Aşağıda yazdığıma cevap verdin mi, hayır, demedin ki öyle değil böyle değil. Ha diyorsan ki seni sallamıyorum, o zaman sonraki mesajlarımı da sallama.
Alıntı yapılan: FxDev - 03 Kasım 2016, 15:21:13
(http://i.hizliresim.com/byzmJZ.jpg)
@mihri +1500
Zaten bu yolla ancak periyottan bağımsız RMS hesabı yapabiliyoruz/m. Pencereyi büyüttükçe de doğruluğun artar. İşin olayı da güzelliği de bu, böylelikle sinyalin frekansından bağımsız olursun. Örnekleme periyodunu ve pencereni arttırdıkça sonucunun doğruluğu artar.
Şebekede çalışırken böylelikle çok az örnek bile iş görür, bir de önceki örneklerle ortalama alınırsa atıyorum yeni örneğin %80'i eskinin %20si gibi low pass filtrede yaparsın.
Bak yukarıdaki kağıda iki dkda çizdim. Ben 1. alanın 2. alanın 3. alanın RMS'ini tık bu yolla hesaplarım.
Artı bir şey daha, benim algoritmam float işlemler barındırmıyor. Örnek sayımı ikinin katları seçerek basit kaydırma işlemleriyle olayı hallediyorum. 16324 gibi rakamlara bölmeye de gerek yok. Düşük güçteki işlemcilerde deneyin bir de bu işlemleri, bilgisayarda yapması bebek oyuncağı bilmemkaç bit float hesabı var.
Onun için diyorum işleminiz doğru sonuç veriyordur bu beni ilgilendirmez, benim ilgilendiğim konu hızlı olması.
Ayrıca birileri integral bilmiyor, 0-T aralığında integral demek, 0-T aralığındaki sinyalin fonksiyonunu işletmek demek. Yani RMS integralini o aralıkta işletiyorsun demek. Periyodun o demek değil. Biz şebekede işler daha iyi hesaplansın diye, RMS peryodu ile şebeke peryodunu birbirine eşitliyoruz ki RMS değerlerimizin hesaplama penceresi hep aynı olsun ve RMS değeri birbirine yakın çıksın.
Tekrar ediyorum, formüldeki 1/T sinyalin frekansı demek değil, türevin alınacağı aralık demek.
İntegralin tepesine yazıyorsun 0'dan T'ye kadar diyorsun. Bu ne demek 0 ile T aralığın, integral içerisindeki formülü işlet demek. Bir nevi alan hesaplama. Burada sinyalin frekansı yok ki, frekans bileşeni yok. Senin oraya yazdığın delta_T örnekleme periyodun, N'de örneğin. Yani bir pencereyi tanımlıyorsun yine.
Anlık RMS değeri olamaz, belirli bir sürenin RMS değeri olur olay bununla ilintili.
Aşağıdaki mihri'nin sorusuna yanıtı bir türlü vermedin mesela. Güzelce tanımlıyoruz, cevap yok.
Alıntı yapılan: mihri - 03 Kasım 2016, 16:15:40
Orta noktayı bulucaz diye hissediyorum...
Aynı örnekleme frekansında aynı sayıda örneği kullanarak klasik yöntemle RMS hesaplarsak senin yöntemle aynı sonucu elde ederiz doğru mu?
Eğer doğruysa senin yöntemin +'si ne?
Bunun yanında terimlerin yanlış. Bak
@ferdem ne demiş: "Hesap hatalı. Öncelikle, RMS hesabı için işaretin periyodik olması veya sıfır geçiş yakalanması gerekmiyor....." Hani buna cevabın nerede?
Tek söylediğin 3-4 gündür papağan gibi, bu yöntem kanıtlandı, öyle harika, böyle süper, şöyle hızlı, böyle manyak. Buradaki amatörleri kandırırsın ancak bu laflarla beni değil.
Sen dedin ki bu yöntem süper, frekanstan bağımsız vs. Biz de diyoruz ki ki RMS hesabının kendisinde frekansla ilintili bir şey yok. Baktık cevap vermiyorsun bunlara, gittin bu işe yeni başlamış arkadaşlara bir şeyler söyledin.
Sonra dedim ki haa öyle mi. Bari bu işe yeni yeni başlayan insanların kafası karışmasın, ben forum için görevimi yerine getireyim. En azından 2-3 sene sonra buraları okuyanlar, bu adam yöntem önermiş, birileri de yanlış olduğunu söylemiş, öyleyse körü körüne inanmayım desin. Gayem maksadım bu.
Yoksa sana önceki mesajlarımda da belirttim, ben de RMS hesaplıyorum, frekanstan bağımsız vs. Ama benim yöntemimde herhangi bir magic trick yok. Euler o muhteşemliği yıllar önce yapmış zaten bizim yerimize.
------------------------------------------------------------------------------------
Z aslında sen anlamıyorsun ama sana garezim yok, sana gıcıklığım yok, aynı alanda çalışan bir elin parmağı kadar adamız şurada. Birbirimizin ağzına bakmamız lazım. Sıkıntı seni büyüğü olarak görüp, her dediğine koşulsuz inanan, bir grup, bir zümre var forumda. Hatta o kadar ki alnına Z bandanası asıp gezebilecekleri tanıyorum. Olası yanlış bilgi vermende bu insanlar senin dediğini doğru kabul edip çok zaman kaybedecekler. O yüzden senin gibi bir adamın çok daha tartılı konuşması lazım, bir misyonun var bu forumda, bunun farkına var.
Ha bu arada alnına bandana asıp gezenler seni çok sevdiğinden sanma, her şey çıkar bu işlerde benden daha tecrübelisin bilirsin.
Alıntı YapHesap hatalı. Öncelikle, RMS hesabı için işaretin periyodik olması veya sıfır geçiş yakalanması gerekmiyor. Herhangi bir "waveform" un belirli bir süre boyunca harcadığı enerjiye karşı düşen enerjiyi harcatan bir DC voltaj bulunabilir. R=1 alınarak kolaylaştırılır.
Belirli bir zaman diliminde RMS bulmak için o zaman dilimindeki toplam enerjinin bulunması gerekir. Bulduğunuz toplam enerjiyi enerjinin harcandığı süreye bölüp ortalama güç bulursunuz. Pavg=Vrms^2 dir.
Ferdem çok haklısın. Fakat efektif değer ölçen ölçü aletleri için malesef ama malesef sinyalin peryodik olma şartı olmasa bile sürekli olma zorunluluğu var. Bu benim algoritmam için de geçerli.
Örneğin termik prensiple çalışan bir true RMS ampermetrenin doğru değer gösterebilmesi için, içinden akım akıtıp ısı oluşturmasını beklemek zorundasın. Her ölçü aletinin bir tepki süresi vardır. Öyle değil mi? İbreli bir ölçü aletinin doğru değeri gösterebilmesi ibrenin konum değiştirip sabit kaldığı ana kadar ölçü aletini sinyal uygulamak gerekir.
Böyle yapmadığımız için okuyacağımız yanlış değer ölçü alatinin hatası olarak değerlendirilemez.
*******************************************************
Kağıt kalemi alsaydın ve kağıda peryodik olmayan bir sinyal çizip bunun efektif değerini hesaplarmısın deseydim. Hiç sorunsuz hesaplardın.
Fakat MCU'lar bizim kadar akıllı değiller. Kağıda baktığın anda fonksiyonun peryodunu anında anlarsın değilmi?
(http://i.hizliresim.com/zndmNY.png) (http://hizliresim.com/zndmNY)
Resimdeki sinyale bakıp efektif değeri hesapla dersem nasıl hesaplarsın?
Peryod hakkında ne diyebilirsin?
Hiç bir şey diyemezsin.
Algoritmam matematikçi değil. Kağıda bakarak kağıdın en sağında binlerce sample sonra gelecek sinyal değişimini bilemez.
Algoritmaya yanlış yaptıracağım diye elektrik tekniğinde kullanılmayan çok absürt sinyaller gireceğinizi bilseydim algoritmadaki filitreyi absürt sinyalinize göre seçerdim.
Yani ne demek istiyorum?
Kontrol teoriden hatırlayın. 1. derece sistemin basamak cevabında hata sıfıra gider.
Fakat rampa sinyaline cevabında hata olur. Parabolik sinyal cevabında hata devamlı artar.
Olay aynı şey. Algoritmamım verdiğiniz sinyal için de doğru ölçüm yapmasını sağlayabilirim.
Ama ben olsam algoritmanın doğruluğunu ispatlamaya çalışırdım.
Alıntı yapılan: fatih6761 - 04 Kasım 2016, 01:40:29
Hocam bence V nin katsayısı 16383 değil 16383.5 olmalı. Haksız mıyım?
Ayrıca bu metod sin(t) için de sin(3*t) içinde çalışmalı. Normal RMS formülünden bir farkı yok aslında.
Ve hatta sample edilen değer V ye bölünmek yerine 2*V ye bölünürse daha şık sonuçlar veriyor.
Buradaki 16383 sihirli bir sayı değil.
Bunun değeri şu olmalı daha iyi olur diyemezsiniz. Fakat çok şık sonuçlar vermesi için o rakam, sample alma süresi ve ölçüm yapılacak sinyal frekensına göre çok titiz hesaplanabilir.
Genel amaçlı olsun çarpma ve bölme işlemi basitçe shift ile yapılabilsin diye 16383 ve 16384 rakamlarını verdim. 8181 ve 8182 de yazabilirdim.
Algoritmamım bu kadar tartışılacağını inanın bilemezdim.
Eninde sonunda algoritmayı çözeceğiz. Zaten çözemezseniz ben sabredemem algoritmanın alt yapısını anlatırım.
Şu anda bilmece sormuş bir çocuğun gelen yanlış cevaplar üzerine ne zor bilmece sormuşum sevincini yaşıyorum.
Kafaları zorlayıp düşünmeye sevk ettiğim için de mutluyum.
@Zoroaster: Ayrıldığımız noktayı son mesajında anladım. Buradaki bir çok arkadaş gibi özel sektörde çalışıyoruz ve sonuç odaklı iş yapma durumunda kalıyoruz; bazı günler günü kurtarıyoruz. Sen ise bunu hobi olarak yapıyorsun, işin zevkine varmak istiyorsun. Kısacası ben özelde çalışan bir mühendis, sen okulda çalışan bir hoca kıvamındasın.
Kendi içimnde senin müdahil olduğun konulardan uzakta kalacağım.
Kolay gelsin.
@FxDev Şimdi alogoritmam iyi mi kötümü?
Algoritma doğru mu çalışıyor, yanlış mı?
Endüstriyel bir cihazda kullanılabilirmi kullanılamazmı?
Bu algoritmayı foruma Zoroaster değil de ünlü bir çip üreticisinin mühendisi firmanın çıkarttığı bir uygulama notunda yazsaydı aşağıdaki cevabı yazarmıydın yazmaymıydın?
Alıntı yapılan: FxDev - 03 Kasım 2016, 22:11:43
Puf artık komik bile olmaktan çıktı.
Bari şu foruma yanlış bilgi verme, zavallının biri inanıp bunu kullanacak sonra saç baş yolacak gariban, insanlar bu yüzden ekmeklerinden bile olabilir. 100 kere tartmalıyız bir şeyi paylaşırken forumda bu yüzden.
Bana bu 4 sorunun cevabını dürüst şekilde vermeni bekliyorum.Aslında alıntı yaptığım kısımın anlamı gayet açık. Yalan yanlış aptal bir algoritma bu bunu kullanmayın. İşinizden bile olursunuz.
Haksızmıyım?
Demekki bu algoritmayı matematiksel olarak çürüttün ve milleti uyarıyorsun.
Ben de diyorum ki lütfen matematiksel ispatını istiyorum. Benim algoritmama bu şekilde mesnetsiz saldıramazsın aşağılayamazsın.Alıntı yapılan: FxDev - 04 Kasım 2016, 12:12:50
Z öyle diyoruz anlamıyorsun, böyle diyoruz hayır diyorsun. Whatssup üzerinden yazdım, buradan yazdım, bir önceki mesajımda belirttim. Bizim yazdıklarımızı okumuyor, bir şey bilmemekle itham ediyorsun (videodan bahsediyorum). Olay böyle olunca da kusura bakma kaçtığını hissediyorum. (Şimdi hiddetlenme hemen). Artı diyorsun ki matematik ağzı ile konuş bana; videondaki hataları aşağıdaki mesajda belirttim. En basitinden 1/T gördüğünde "bu periyodun tersidir, öyleyse bu frekansla ilintili" dersen her gördüğün sakallı ile dede ile ilgili sözü hatırlatırım.
Aşağıda yazdığıma cevap verdin mi, hayır, demedin ki öyle değil böyle değil. Ha diyorsan ki seni sallamıyorum, o zaman sonraki mesajlarımı da sallama.
Aşağıdaki mihri'nin sorusuna yanıtı bir türlü vermedin mesela. Güzelce tanımlıyoruz, cevap yok.
Bunun yanında terimlerin yanlış. Bak @ferdem ne demiş: "Hesap hatalı. Öncelikle, RMS hesabı için işaretin periyodik olması veya sıfır geçiş yakalanması gerekmiyor....." Hani buna cevabın nerede?
Tek söylediğin 3-4 gündür papağan gibi, bu yöntem kanıtlandı, öyle harika, böyle süper, şöyle hızlı, böyle manyak. Buradaki amatörleri kandırırsın ancak bu laflarla beni değil.
Sen dedin ki bu yöntem süper, frekanstan bağımsız vs. Biz de diyoruz ki ki RMS hesabının kendisinde frekansla ilintili bir şey yok. Baktık cevap vermiyorsun bunlara, gittin bu işe yeni başlamış arkadaşlara bir şeyler söyledin.
Sonra dedim ki haa öyle mi. Bari bu işe yeni yeni başlayan insanların kafası karışmasın, ben forum için görevimi yerine getireyim. En azından 2-3 sene sonra buraları okuyanlar, bu adam yöntem önermiş, birileri de yanlış olduğunu söylemiş, öyleyse körü körüne inanmayım desin. Gayem maksadım bu.
Yoksa sana önceki mesajlarımda da belirttim, ben de RMS hesaplıyorum, frekanstan bağımsız vs. Ama benim yöntemimde herhangi bir magic trick yok. Euler o muhteşemliği yıllar önce yapmış zaten bizim yerimize.
------------------------------------------------------------------------------------
Z aslında sen anlamıyorsun ama sana garezim yok, sana gıcıklığım yok, aynı alanda çalışan bir elin parmağı kadar adamız şurada. Birbirimizin ağzına bakmamız lazım. Sıkıntı seni büyüğü olarak görüp, her dediğine koşulsuz inanan, bir grup, bir zümre var forumda. Hatta o kadar ki alnına Z bandanası asıp gezebilecekleri tanıyorum. Olası yanlış bilgi vermende bu insanlar senin dediğini doğru kabul edip çok zaman kaybedecekler. O yüzden senin gibi bir adamın çok daha tartılı konuşması lazım, bir misyonun var bu forumda, bunun farkına var.
Ha bu arada alnına bandana asıp gezenler seni çok sevdiğinden sanma, her şey çıkar bu işlerde benden daha tecrübelisin bilirsin.
Alıntı yapılan: Zoroaster - 04 Kasım 2016, 12:29:08
Buradaki 16383 sihirli bir sayı değil.
Bunun değeri şu olmalı daha iyi olur diyemezsiniz. Fakat çok şık sonuçlar vermesi için o rakam, sample alma süresi ve ölçüm yapılacak sinyal frekensına göre çok titiz hesaplanabilir.
Genel amaçlı olsun çarpma ve bölme işlemi basitçe shift ile yapılabilsin diye 16383 ve 16384 rakamlarını verdim. 8181 ve 8182 de yazabilirdim.
Algoritmamım bu kadar tartışılacağını inanın bilemezdim.
Eninde sonunda algoritmayı çözeceğiz. Zaten çözemezseniz ben sabredemem algoritmanın alt yapısını anlatırım.
Şu anda bilmece sormuş bir çocuğun gelen yanlış cevaplar üzerine ne zor bilmece sormuşum sevincini yaşıyorum.
Kafaları zorlayıp düşünmeye sevk ettiğim için de mutluyum.
@Zoroaster hocam eğer 16383.5 sizin için bir önem ifade etmediyse ben sizin bulduğunuzdan farklı bir metod üretmişim demektir.
Kendim nasıl yaptığımı özetleyeyim kısaca:
- 0-T integralin alınacağı aralık olmak üzere Veff değerini T nin bir fonksiyonu gibi düşündüm.
- Veff(T) fonksiyonunu T ye göre türevleyerek Veff(T) ve Vin(T) ye bağlı bir ifade elde ettim.
- Sonra dT yi sampling time yani 1 kabul edip dVeff / dT nin yerine delta Veff = Vnew - Vold deyip Vold'u karşıya attım.
- N şu anda bulunduğumuz sample numarası olmak üzere [latex]V_{new} \leftarrow V_{old} + \frac{1}{N} \left(\frac{v_{in}^2[N]}{2V_{old}} - \frac{V_{old}}{2} \right)[/latex] oldu.
- Bu formülü sık karşılaşılan periyodik sinyallerle (sin, square, sawtooth, white noise etc.) besleyince bir miktar oturma zamanı sonra RMS değerlerine yakın (bazen %1 den küçük hatayla) sonuçlar elde ettim.
Zaten farklı bir şey olduğunu sezmiştim, metodunuzda RC filtreden bahsetmişsiniz, ben sadece matematiksel türetme yaptım.
Benim yaptığım işlemlerden de kullanışlı bir şeyler çıkarmı çıkmazmı merak ediyorum.
@Zoroaster.
Sorularına yanıt vermeden yaptığım uygulamayı anlatayım. UPS tasarlıyorum, PFC kısmındayız, 3 faz şebeke ile çalışıyorum, şebekede bir sorun olduğunu 1ms altında anlayıp, aküye geçiyorum. Ve klasik UPS'lerdeki gibi PFC DC barasına akülerim asılı değil, akü sayım az. Bu yüzden algılama yapıp, hızla akülerden boost işlemi yapmam çok mühim. Hatta interleaved falan çalışmam lazım karmaşıklığı düşünebilirsin. Güç değerim 120kW.
Şimdi sorularına gelelim:
1) Algoritman kötü. Neden mi, hızlı dedin algoritman için, söylediğinle yaptığı birbirini tutmadığı için kötü. RMS hesaplamaya bir katkısı yok, response time çok yavaş. Tek bir avantajı olabilirdi, o da sqrt'den kurtarmak, ama binlerce iterasyondan sonra sonuç alacaksam bunun da bir artısı kalmıyor.
2) Algoritman doğru sonuç veriyor olabilir yalnız mikrodenetleyiciler için çok da uygun değil. Floating point işleme ve bölme işlemleri hiç kullanmıyorum ben RMS işlemlerimde. Dahası öncede söyledim, RMS'in genel kullanıldığı yer, hepimiz de biliyoruz, şebeke ile çalışmalardır. Senin algoritmanın düzgün çalışabilmesi için çok fazla iterasyona ihtiyacın var. Oysa benim şebekeyi örnekleyip hemen hesaplama yapmam lazım.
3) Endüstriyel bir cihazda kullanmam, yaptığım cihaz endüstriyel zaten. Dediğim gibi tepki süresi benim için çok yavaş.
4) Benim için kişi fark etmiyor yukarıda da dediğim gibi yine, yazardım, yazıyorum hatta yüz yüze tartışıyorum da zaten. Her gün ST/Microchip/Fairchild (Şimdi ON Semi oldu)/NXP/Mitsubishi/Semikron/Vincotech/Fuji/Nichicon vs vs vs (daha sayayım mı) firmaların FAE'leri ile, bazı durumlarında yöneticileri ile tartışıyorum, tartışıyoruz. Sen hiç hayatında silikon die tasarlattın mı? Ya da Nichicon gibi bir firmayla kafa kafaya verip kapasite tasarlattın mı. Bunları söyleyince kızarsın, bana böyle gelme diye. Her neyse, ben üretici taraftayım, gerçek olaylara dokunuyorum, sen bunu görmezden gel.
Matematiksel ispatını arkadaşlar yaptı daha önceki mesajlarda bu kadar mesaim olsa ücretimi senden almam lazım. Artı daha önceki mesajlarımda da söyledim, ben hız olayına takmıştım, baktım, benim klasik RMS hesabım bile bundan daha iyi sonuç veriyor, hem de STM8S003 gibi dünyanın en ucuz işlemcisinde. Şimdi diyeceksin ki yaptığım RMS ölçümün doğruluğuna nereden emin olacağız. Arçelik'te yapılan onlarca testten biliyorum. Şimdi
@Zoroaster'in ne üdü belirsiz formülüne mi güveneyim; bir çok testten geçmiş kendi koduma mı? Sen olsan ne yaparsın, başkasının test edilmemiş koduna mı güvenirsin.
Eğer binde bir doğrulukta RMS doğruluğu verecek bir cihaz yapacak olsam, daha önceki mesajlarımda yine belirttim ne yapabileceğimi. Hatta sana ekstra FFT, THD falan da çıkarttım, es geçtin.
Ama olay hızlı, %1 keskinlikte RMS hesabı ise senin algoritman yavaş. Bu kadar NET!
Ben senin sorularını yanıtladım, şimdide sen aşağıdaki soruyu bir yanıtla bakalım.
"Aynı örnekleme frekansında aynı sayıda örneği kullanarak klasik yöntemle RMS hesaplarsak senin yöntemle aynı sonucu elde ederiz doğru mu?
Eğer doğruysa senin yöntemin +'si ne?"Başka sorun var mı?
Ayrıca yöneticilerden istihramım, şu mesaj onaylama olayını kaldırabilirler mi? Eğer kaldırılmayacaksa tekrar yazı yazma olayım askıya alınabilir.
@FxDev.
Forumun değiştirilmeden önce ekranın en tepesinde hani chat yapma ekranımız vardı.
Orda RMS değer hesaplamak için yöntem varmı diye soruyordun. Ben de RMS için karekök almak zorundasın dediğimde o klasik yöntemi biliyorum onu istemiyorum diyordun.
Unuttunmu?
Sırf senin için bu gece video hazırlayacağım.
Matematiksel ispat için mesai ücretini bendenmi talep ediyorsun?
Geç bunları. Sen kim matematiksel ispat kim? Forumda matematiksel tek bir ispat verdiğin konu verdin mi ki? Hep hazır formül. Hep hazır formül.
Acaba mesele mesai parası değil de matematiğin 3 numara büyük gelmesi olabilir mi?
Bu tartışma bitsin, algoritmanın özünü açıklayayım Fxdev bile cihazlarında bu algoritmayı kullanacak emin olabilirsiniz.
Video falan uğraşma, çektiğin her videoda onlarca hakaret yemek zorunda değilim ben, aşağıdakine adam akıllı cevap ver ben sana helal olsun diyeceğim.
"Aynı örnekleme frekansında aynı sayıda örneği kullanarak klasik yöntemle RMS hesaplarsak senin yöntemle aynı sonucu elde ederiz doğru mu?
Eğer doğruysa senin yöntemin +'si ne?"
@FxDev Seni altetmek gibi amacım yok. Sadece algoritmamı kötülüyorsan matematiksel ispat yaparak kötüle diyorum. Algoritmaya saldırdığın şiddet ölçüsünde ben de savunurum.
Amatör dediğin adamlar sırf bu işten para kazanmıyor diye senden bilgisiz mi oluyor? Yok amatöleri kandırabilirmişim de sen kanmazmışsın? Dur yahu. Sen kimsin?
Çen çen çen laf yetiştiren fakat tek bir matematiksel ifade yazıp da düşüncesini matematiksel olarak savunamayan bir üyesin sadece. Bu yüzden benzeri sözel saldırılara kızıyorum.
Öncelikle bu algoritmayı RMS değer ölçen bir ölçü aletinde kullanılacak diye düşünürsen belki algoritmayı seversin.
1) Algoritma sağır bu yüzden kullanılamaz deniyor.Algoritmaya çok ham bir filitre gömdüm. Neden sağır olduğunu defalarca yazdım dilimde tüy bitti bir daha yazayım ama bir daha yazdırmayın. Algoritmanın özüne ulaştığınızda algoritmayı çok hızlandırabilirsiniz dedim. Nitekim 100 küsür bin iterasyondan sonra ikibinli rakamlara inmiş bir algoritma ile video çektim yayınladım. Hala nasıl sağırlığı bahane edebiliyorsun anlamıyorum.
Kaldıki algoritmayı iyileştirip iterasyon sayısını daha da azaltabilirsiniz de dedim.
Bu algoyu (ister verdiğim haliyle ister modifiye ettiğiniz haliyle) interrupt rutinine yerleştirin demiştim. Böylece işlemci çalıştığı için zaten her ADC ölçümünden sonra bir kere bu hesap yapılmış olacak da demiştim. Herdefasında yüzbin iterasyon yapmayacaksın. Sadece sen her interrupt geldiğinde tek satırlık bir C kodu işleteceksin. hepsi bu kadar.
Eskiden lambalı radyoları/TVleri çalıştırır çalıştırmaz ses vermez bir kaç saniye zaman geçerdi. Evet işlemcinin elektriğini verdiğinde aynı durum var. Ama işlemcinin lambaları bir ısındımı artık tıkır tıkır efektif değeri hesaplar.
Algoritma çok yoğun ağırlık ortalaması almaktadır. Sağırlığın ana nedeni budur. Fakat bu sayede nasıl bir multimetre sabit değer gösteriyorsa (+/- bir kaç değer değiştirmiyorsa) bu algoritma da sabit değer gösterir. Algoritmanın filitreleme yeteneğinden dolayı (moving average) sistemin sağır olması algoritmanın kötü olduğuna gelmez. Filitrelemede sağırlığı çok kaldırırsanız yada filitreyi kötüleştirirseniz çok hızlanır fakat bu kez de efektif değer salınır.
2) "Aynı örnekleme frekansında aynı sayıda örneği kullanarak klasik yöntemle RMS hesaplarsak senin yöntemle aynı sonucu elde ederiz doğru mu?
Eğer doğruysa senin yöntemin +'si ne?"Hayır. Benim böyle bir iddiam yok. Ben sadece efektif değer hesaplayabilmek için peryodu bilmeniz gerektiğini iddia ediyorum.
Her ne kadar siz aksini iddia etseniz de, bu soruyu cevapladan önce efektif değer hesabında neden peryodu bilmek gerekiyor sorusuna cevap vermem lazım. Bunun için video çekmek istiyordum aslında. Eğer bu mesajım yeterince açıklayıcı olmadıysa gene video çekebilirim.
Bir f(t) fonksiyonun herhangi bir zaman aralığında kalan bölgesi için efektif değer hesaplayabiliriz tabiki. t1....t2 aralığında efektif değer hesaplarsak
$$Veff=\sqrt{\frac{1}{t_2-t_1}\int_{t1}^{t2}f(t)^2dt}$$
Şimdi burada $$\frac{1}{t2-t1}=\frac{1}{T}$$ yazarsam buradaki T ye Peryod demeyeceğimden emin olabilirsin. Yani her sakallıya dede demem okey mi?
Eğer bir sinyalin peryodunu bilmeden efektif değer hesaplamaya kalkarsan yanlış yaparız. Neden yaparız? Çünkü aldığımız aralık için efektif değer hesaplamış oluruz ve frekansını bilmediğin bir sinyalde kaç tane örnek alacağını bilemezsin de ondan. Diyorsunuz ya peyodu bilmeye gerek yok efektif değer frekansdan bağımsızdır.
İyi güzel de şeker kardeşlerim;
Tutup ta sinüs sinyalden 0...Pi/8 aralığında istersen 1000 tane sample al efektif değeri hesaplayamazsın ki.
Çünkü bütün dünya bilirki sinüs sinyal, efektif ölçen aletle ölçüllürse efektif değeri budur. $$\frac{V_m}{\sqrt{2}}$$
Şimdi frekans hakkında hiç bilgin yoksa ve 0...Pi/8 aralığında aldığın örneklerle bana efektif değeri klasik yöntemle $$\frac{V_m}{\sqrt{2}}$$ olarak nasıl hesaplayacağını söylermisin?
Benim yöntemin + sı ne mi? İşte peryod yada frekans hakkında bilgimiz olması gerekmiyor? Algoritma sürekli olarak sample alıyor sadece.
Fakat bazı limitler var. Onlara şu anda girmek istemiyorum.
Senin bana sadece yukarıda kalınca yazdığım soruya cevap vermen yeterli.
Alıntı yapılan: fatih6761 - 04 Kasım 2016, 13:57:03
@Zoroaster hocam eğer 16383.5 sizin için bir önem ifade etmediyse ben sizin bulduğunuzdan farklı bir metod üretmişim demektir.
Kendim nasıl yaptığımı özetleyeyim kısaca:
- 0-T integralin alınacağı aralık olmak üzere Veff değerini T nin bir fonksiyonu gibi düşündüm.
- Veff(T) fonksiyonunu T ye göre türevleyerek Veff(T) ve Vin(T) ye bağlı bir ifade elde ettim.
- Sonra dT yi sampling time yani 1 kabul edip dVeff / dT nin yerine delta Veff = Vnew - Vold deyip Vold'u karşıya attım.
- N şu anda bulunduğumuz sample numarası olmak üzere [latex]V_{new} \leftarrow V_{old} + \frac{1}{N} \left(\frac{v_{in}^2[N]}{2V_{old}} - \frac{V_{old}}{2} \right)[/latex] oldu.
- Bu formülü sık karşılaşılan periyodik sinyallerle (sin, square, sawtooth, white noise etc.) besleyince bir miktar oturma zamanı sonra RMS değerlerine yakın (bazen %1 den küçük hatayla) sonuçlar elde ettim.
Zaten farklı bir şey olduğunu sezmiştim, metodunuzda RC filtreden bahsetmişsiniz, ben sadece matematiksel türetme yaptım.
Benim yaptığım işlemlerden de kullanışlı bir şeyler çıkarmı çıkmazmı merak ediyorum.
Hocam y=((a-1)y+ v) / a bağıntısı birinci dereceden bir filitredir.
v sinyalini low pass filitreden geçirip y sinyalini üretir.
a-1 ve a bağıntılarını kafana göre değiştirirsen hala sistem filitre özelliği gösterir fakat köşe frekansı ve filitre kazancı daha doğrusu zayıflatması değişir.
Fakat filitrenin yapısı/özü çok değişmez. Yani hala bir low pass filitredir. Daha iyi değerler alıyorum demenin sebebi köşe frekansı kaymış ve filitre edilen sinyaldeki rıpıl azalmıştır. İncelemek lazım.
Benim verdiğim ham algoritmada a=16384 Bu da 50uS sample lar altında RC=0.8 sabitine denk gelir. Yani bir hayli alçak frekansda bir alçak geçiren filitre ekledim ve dediğim gibi bu değeri öylesine verdim. Pek ala a=8192 de iş görür. Bu durumda sadece köşe frekansı kayar.
Arkadaşların gözlemlediği hantallığın sebebi RC=0.8 dir. $$\frac{1}{2\pi{0.8}}=0.2Hz$$
Eee hantal olması çok doğal. Fakat sistemi hızlandırmak için önlerinde şöyle bir engel var. Köşe frekansını ileri iterlerse sistem hızlanır bu kez rıpıl artar.
Sadece saksıyı iyi kullanmak gerekiyor.
Eğer hem fikir isek bir sonraki yazımda özünü yazayım artık.
(https://s22.postimg.cc/yhhjhhps1/Ekran_Al_nt_s.jpg)
@Zoroaster hocam en alttaki sinyal sizce response time kötü diyenlerin işini görür mü? Öyleyse ben de iban vereyim :P
Şaka bir yana, bahsettiğim kodu sadece basit bir birinci derece low pass filtre'den geçirip elde ettim ben de. Galiba aynı şeyi yapıyoruz sizinle.
Haksız mıyım?
İki gündür işi gücü bıraktım RMS hesabı yapıyorum :( Vizelerde anahtarlı relüktans makinası soracak hocaya da RMS hesabı anlatacağım :(
Yav Zoro Usta,yazda bitsin bu çile:)
Hala seni ve FxDev'i bekliyoruz.Hani Şu Flayback,bobin,smps konulu odada.
Odadaki arkadaşlar sizi beklemekten sıkıldı,Tavla oynuyorlar dersi kaynatıyorlar.
Bende kızıyorum onlara,Tavla oynayacağınıza Satranç oynayında Kafanız çalışsın diye.
Ama dinleyen kim?:)
$$\frac{v^2}{vef}$$ değerini low pass filitreye girip, filitreden çıkan sinyale veff deyip bunu iterasyon haline getirirseniz efektif değeri hesaplamış olursunuz.
Response time kötü diyenlere, aman kullanmayın işinizden olursunuz, sizi kandırıyor, ben kül yutmam diyenlere belki sen beğendirirsin.
Fakat bütün dünya bu algoritmayı çok beğeniyor biliyormuydunuz? Bi bizim forumda bir iki kişi beğenemedi hatta birisi RobinHood'luğa soyunup
aman ha bu adam sizi kandırıyor ben sizi uyarıyorum diye geleceğe mesaj bile bıraktı.
Evet arkadaşlar bu algoritmayı çok çok çok ünlü bir lineer çip üreticisinin üretimini yaptığı analog efektif değer ölçen çipin çalışma presibinden ortaya çıkarttım. Yani Zoroasterin
işkembeden salladığı bir algoritma değil.
Benim yaptığım tek şey, çipin analog devrelerinin yaptığı işi ayrıklaştırıp web sitemde ve forum sayfamızda yayınlamak sadece.
Kim bu çok çok çok ünlü firma derseniz Lineer Technology.
Olaya bak.
Ters köşe olmak,Top kaleye giderken olduğun yerde çakılıp kalmak bu.
Bu algoritmayı Linear Tecnology geliştirmişse laf yok,çok çok iyidir.Ama Zoro geliştirmişse
Berbattır Nokta:)
Hiç şaşırmadım zaten Bülent hoca böyle bir algoritmayı kendi başına bulup geliştiremezdi.
Olay tamamen kişiselleşmiş bende kötü polis olayım o zaman :)
@Cemre. hocam uniform random data ve linear increasing amplitude ( t*sin(t) ) de yanıt nasıl sizin metodun?
[latex]V_{eff}[n+1] = \frac{1}{2n} \left( (2n-1) \cdot V_{eff}[n] + \frac{v_{in}^2[n]}{V_{eff}[n]} \right)[/latex]
şeklinde bir metodla deneyebildiğim bütün dalga şekilleri ve frekanslarda truerms le neredeyse aynı yanıtı aldım.
Yani settling time olarak normal kareli köklü rms hesabından farksız çıkıyor sonuç.
Daha da ötesi
@ferdem hocamın matlab testine de bu formülü koyunca trueRMS hesabıyla birebir aynı sonucu aldım.
Hatta öyle ki trueRMS ile bu hesabın grafiği üst üste bindiğinden tek çizgi gibi gözüküyor.
@Zoroaster hocam pratikte kullanımı olur mu sizce bu formülün performans açısından ? :)
Zoroaster ne yaptı biliyormusunuz Lineer Technology'nin analog olarak yapamayacağı bir filitreyi RC filitre yerine yerine koymak oldu.
Hala Zoroasterin yayınlamayıp şu anda kendine sakladığı filitreleme algoritması ile ilgilenen varmı?
Dünya devi analog firmaları,
analog devrelerle benim bu filitremi yapamaz.
Bu iddiamı tartışmak isteyen varmı?
@fatih6761 pratikte çok güvenerek kullanabilirsin tabiki.
Yapılan iş gene efektif değer hesabı.
Tabiki bu yöntem filitre esasına dayandığından ve çok uzun moving averaj yaptığından sinyaldeki ani değişimin çıkışa yansıması zaman alır. Bu ölçü aletleri için güzel bir özelik olmasına rağmen sinyalin bir sonraki peryodunda efektif değerdeki değişime bakarak ne bileyim tristörün faz açısını belirleyecekseniz bu yöntem bu uygulamada işinize yaramaz tabiki.
Fakat bu, yöntemin efektif değer ölçmediği anlamına gelmez.
@fatih6761 Bir benzerlik görebiliyormusun? http://www.cncdesigner.com/wordpress/?p=3591
@fatih6761 Hocam uniform random data için matlab'da bir kısayol var mı? Ben daha o kadar takla attıramıyorum bu merete :D
Lineer artış için bir sorun yok gibi gözüküyor.
@Zoroaster Hocam. Üşengeçliği bırakıp verdiğim kodu formülize ettim. Bir de ne göreyim. Sizin formülün birebir aynısı :o
[latex]V_{RMS}(n)=\frac {V_{RMS}(n-1)\times(2\times Sample-1)}{2\times Sample}+\frac{V^2(n)}{2\times Sample \times V_{RMS}(n-1)}[/latex]
Bunu bir de birinci dereceden RC filtreden geçirdikmiydi, fişek gibi oluyor. Onun formülasyonunu da
@Zoroaster hocam verdi zaten.
Sample değeri için örnek isterseniz,
50Hz sinus için 20kHz örnekleme aldığımızı varsayalım. Sinyalin her bir tam peryodundan 400 sample alacağız demektir. Sample = 400 diyip 50hz sinüs'ü hesaba sokunca ikinci 400'de şak diye veriyor sonucu. Tabi bunlarında hepsi hata yapmadığım koşullarda geçerlidir.
Konu benim açımdan faydalı bir hale dönüştü.
@Zoroaster hocam sizin moving average algoritmasını siz yazmadan 5dk önce hatırlayıp bakmıştım ancak anlamadığım tek nokta var.
Moving average da (n-1) ile çarpıp eski toplamı elde ediyoruz ve yeni değeri toplama ekleyip n e bölüyoruz.
Ancak burada n-1 yerine n-1/2 ile çarpıyor olup hatasız değerler elde etmem kafama takıldı.
@Cemre. hocam rand(1000, 1) derseniz [0, 1] aralığında 1000 elemanlı random bir vektör verir. Bunu periodicity ve response time için sormuştum özellikle.
@fatih6761 cevap şu şekilde.
(https://s18.postimg.cc/ldg1tao7p/Ekran_Al_nt_s.jpg) (https://postimg.cc/image/ldg1tao7p/)
Alıntı yapılan: fatih6761 - 04 Kasım 2016, 21:29:30
@Zoroaster hocam sizin moving average algoritmasını siz yazmadan 5dk önce hatırlayıp bakmıştım ancak anlamadığım tek nokta var.
Moving average da (n-1) ile çarpıp eski toplamı elde ediyoruz ve yeni değeri toplama ekleyip n e bölüyoruz.
Ancak burada n-1 yerine n-1/2 ile çarpıyor olup hatasız değerler elde etmem kafama takıldı.
Moving average demissem çok aldırma onun da türevleri var. Aslen yaptığımız şey 1 dereceden filitrenin parametreleriyle oynamak.
Bizi ilgilendiren öyle ya da böyle filitreye uygulanan sinyal nereye gidiyor?
Tabiki efektif değere.
Çünkü $$Vef=\frac{V^2}{Vef}$$ eşitliğini yakalamaya çalışıyoruz.
Öyle bir V DC sinyali arıyoruz ki bunun karesi giriş sinyalimizin efektif değerinin karesi olsun.
Bunu bulduğumuzda Giriş sinyalinin efektif değerine eşit DC geriimi bulmuş oluyoruz. İşte bu arayışın tanımı da zaten efektif değer tanımın ta kendisi.
En sonunda baklayı çıkardın Z!Öncelikle geç yazdığım için kusura bakma, sansürlerden anca kurtulabildim.
Çok uzatmaya gerek yok benim açımdan olayı özetleyeyim:
1) Algoritmanın anlık değişikliklere çok uygun olmadığını kabul edildi en sonunda!
2) LTC'nin RMS to DC entegrelerinin formülüzasyonlarına benziyor yapılar, bu konuda bir ara ilgili araştırmayı özel olarak yapacağım. O yüzden alkışı Lineer'e gönderiyorum. Robin Hood'luğu bırakıyorum. Dolayısı ile Lineer'den uyarladığın algoritman düzgün sonuç veriyor! Bu konuda da yiğidin hakkını yiğide veriyoruz!
@Zoroaster 'i tebrik ediyoruz.
3) Hız olayı benim için çok önemli olduğundan bu algoritma maalesef hala işime yaramıyor.
4) Bunun yanında kaydırmalı ve çok fazla örnekli (0,5saniyede, 50us'de bir örnekli) RMS değeri hesabının da yaklaşık sonuçlar verebileceğini düşünüyorum, hesaplamadım, boş zamanımda deneyip sonucu karşılaştırmalı vermeye çalışırım.
5) Formülün en büyük problemi hala bölmeler olarak gözüküyor. Bu şekilde küçük işlemcilerde kullanılması zor.
6) Bu formülü
@Zoroaster'in dediği gibi ölçümcülere öneririm, endüstride çoğu uygulamada formül yavaş kalır. Yavaş kalmasının altında nedenler var, yavaş olmazsa bu sefer değerler çok oynayacaktır dediği gibi.
En azından şu iddianın da kanıtını bekliyorum.
Birileri efektif değer hesabında frekansı ya da peryodu bilmeye gerek yok diyordu?
İspat lütfen.
Şebekenin saf sinüs olduğu varsayımı ile efektif değerinin Vm/Kök2 olduğunu gösterilmesini bekliyorum.
Yalnız bu ispatın peryodun bilinmeden yapılmasını istiyorum.
Genel konuştum fakat sorunun sahibi kendisini çok biliyor.
Bakalım üstüne alınacak mı?
Benim ters düştüğüm nokta şurası oldu:
RMS değer hesabı için, kavramın tanımı uyarınca gözlem süresi boyunca alınan tüm örnek(V^2) değerlerinin ortalaması alınmalıdır, "cumulative average".
Sizin öneri V^2 lerin ortalamasını almak yerine bu değerleri bir "lowpass" filtreye sokuyor. Burada "lowpass"(LP) filtreyi "recursive" gerçeklemenin pratikliği ve karekök içermemesi avantaj olarak görülüyor ancak "settling time","ripple" gibi dezavantajlar da beraberinde geliyor. Doğru seçilmiş bir köşe frekansı ile çok kullanışlı olduğu yerler olabilir, o kısma yorumum yok.
Alıntı YapŞebekenin saf sinüs olduğu varsayımı ile efektif değerinin Vm/Kök2 olduğunu gösterilmesini bekliyorum.
Yalnız bu ispatın peryodun bilinmeden yapılmasını istiyorum.
Frekansı bilmeyeceğiz ancak yeterince sık ve yeterince uzun(>10xperiyot süresi gibi) örnek alma garantisi vermelisin. Böylece yeterince uzun örnek alındığında sinüzoidal bir işaretin RMS değerinin Vp/kok(2) ye yakınsadığını gösterebiliriz.
V=A*cos(2pi*x*t) olsun, x bilmediğimiz frekans.
Vrms^2=(1/T) integral (0 dan T ye) A^2*cos^2(2*pi*x*t)
=(1/T) integral (0 dan T ye) A^2*(0.5+0.5*cos(4*pi*x*t))
=(1/T)*A^2*T/2 + (1/T) integral (0 dan T ye) 0.5*cos(4*pi*x*t)
T arttıkça sağdaki integralin 0 a gittiği görülür ve geriye (1/T)*A^2*T/2 den A^2/2 kalır. Buradan da sinüzoidal bir işaretin RMS değerinin A^2/kok(2) ye yakınsadığı görülür.
Başlık bana faydalı oldu, teşekkür ediyorum.
Elbette peryottan çok daha uzun sürede toplanan örneklerle efektif değere ulaşabiliriz. Fakat bunu yapabilmek için bile halâ peryodu bilmemiz gerekiyor? ((>10xperiyot süresi gibi demek peryod hakkında fikir sahibi olmak demek)
Sinüs sinyalinde biraz sihir var ve bu sihir kabaca 0..pi/8 aralığında bozuluyor. Dolayısı ile 0.. (2pi+pi/8) aralığında da de de işler bozuluyor. bu aralığı genişletirsek tekrardan v/kök2 ye yaklaşıyoruz.
Bu arada o kendini bilir dediğim kişi sen değildin.
Tartışılan algoritmadan, 11 sene önce microchip forumlarında "jspaarg" isimli üye bahsetmiş. Araştırma yaparken denk geldim. :)
http://www.microchip.com/forums/FindPost/108983 (http://www.microchip.com/forums/FindPost/108983)
Yalnız orda low pass filitre tartışılmış. Bizim burdaki filitreye giren sinyale biraz dikkat etmen gerekiyor. Fark burada.
Digital Low pass filterer 1947lere kadar gider.
(https://upload.wikimedia.org/wikipedia/commons/thumb/b/be/Ragazzini.PNG/150px-Ragazzini.PNG) (https://upload.wikimedia.org/wikipedia/commons/a/a3/Zadeh-barcelona-1997%4092x115.gif)
Alıntı yapılan: Zoroaster - 03 Kasım 2016, 16:58:11
Mutlak değerden yola çıkıp efektif değere ulaşabilir misin?
Aklından ne geçiyor?
Konuyu azıcık hortlatayım :)
@Zoroaster hocam konu içinde mutlak değer ile rms hesabı konusu geçmişti. bugün bir kitabı karıştırırken ADE çiplerinin kullandığı yöntem ile karşılaştım. Görseller aşağıda
(http://i.hizliresim.com/BvlVpG.png) (http://hizliresim.com/BvlVpG)
(http://i.hizliresim.com/VP4Zqq.png) (http://hizliresim.com/VP4Zqq)
Sinyalin mutlak değerinin ortalaması rms değeri ile doğru orantılı. 2*kök(2)/pi oranı var arada.