White Noise Üretmek

Başlatan Mucit23, 11 Eylül 2024, 12:07:41

Mucit23

Selamlar.

Windows PC de White Noise üretmeye çalışıyorum. Basit olarak white Noise içereni bir ses dosyasını yükleyip çalmayı denedim. Çalışıyor ama ben play komutu verdiğim anda dosyanın çalması yarım saniye gibi bir gecikme ile oluyor. Yaptığım uygulamada ses verip tepki ölçmem gerekiyor dolayısıyla sesin çok çok küçük bir gecikme ile çalması gerekiyor.

Bunu PC de yapabilir miyim?

Şuan PC de istediğim gibi olmayacağı kanaatine vardığımdan dolayı STM32 MCU üzerinde yapmak istiyorum. DAC ile kullanarak istediğim ses sinyalini üretebilirim. DAC kullanarak ses üretirken yazılımsal olarak volume ayarı da yapmak mümkün mü?

yas

#1
pc de ses sürekli çalıyor durumda olsa, fiziksel olarak sadece sinyal hattını anahtarlasanız daha kolay olmaz mı?

Epsilon

#2
Audacity ile kolayca üretebilirsiniz
Menüsü
Generate/Noise
Açılan pencerede White seçilir Amplitute ve süresini ayarlayabilirsiniz
Ana ekran da play tuşuna bastığınızda  sağdaki hoparlör ikonundan  volum seviyesini'de ayarlabilirsiniz
Ayrıca ses dosyasını biraz sağa itekleyerek ,başlangıcına istediğiniz kadar gecikme ekleyebilirsiniz

Audacity İnd.Linki

Mucit23

Alıntı yapılan: Epsilon - 11 Eylül 2024, 12:34:37Audacity ile kolayca üretebilirsiniz
Menüsü
Generate/Noise
Açılan pencerede White seçilir Amplitute ve süresini ayarlayabilirsiniz
Ana ekran da play tuşuna bastığınızda  sağdaki hoparlör ikonundan  volum seviyesini'de ayarlabilirsiniz
Audacity İnd.Linki

Hocam gömülü bir yazılım olması gerekiyor. Amacım sadece ses üretmek değil.

White noise dediğimiz şey random değerler değil mi? White noise üretmek için DAC ye sadece random değer vermek yeterli değil mi? Eğer öyleyse DAC ve STM32 ile daha basit olur. Dataları kendim ürettiğim için volum ayarı da yapabilirim.

Epsilon

#4
Bu sesler benim bildiğim hoparlör testlerinde kullanılıyor.
TV yayınları 24 saat olmadığı siyah beyaz TV zamanında  yayın yokken bu ses çıkardı
Fazla detayını bilmiyorum

seron

#5
Merhabalar.

Konuyu tam olarak anladığımı söyleyemem ama analog white noise generator devresi kurup istediğinizde besleme verip/keserek çözebilirsiniz belki.

Yazılım tabanlı olacaksa, MCU çıkışını bir transistöre bağlar, transistörü aç/kapat anahtarı olarak kullanabilirsiniz. Böylelikle gecikme de olmaz. Zenerli ve transistörlü beyaz gürültü jeneratörü üç beş parçadan oluşuyor ve kolay kuruluyor.


elektronikhobi

#6
Burada bir arkadaş bitirme tezi olarak yapmıştı.

Burada ise birisi konuyu uygulamalı olarak anlatıyor.
Yaklaşık bir asır önce, askerlerimiz Filistin - Sina Cephesinde Kanal Harekâtında savaşmışlar.

Kore'de birliğimiz düşman çemberini nasıl aştı?

mustafa_cmbz

Şunu anlamadım play dediğinizde bir gecikme oluyor ise ve bu gecikme hep sabit ise ölçüme bu gecikme sonrası başlasanız nasıl olur?

Mucit23

Analog sistemler kullanmak istemiyorum. Aslında bilgisayarda Sesi üretip çıkışı açıp kapamak bir çözüm olabilir. Bunun için Analog multiplexer kullanılabilir. Fakat mcu ile yapmak daha mantıklı gibi. Ölçüm işleri daha kolay oluyor. Volum ayarı daha kolay oluyor.

White noise için DAC ye istenilen örnekleme frekansından random değerler vermek yeterli oluyor. Denedim oldu.

Epsilon

#9
ST nin sitesinde birisi beyaz gürültüyü oluşturamamış
Aşağıda ki cevapda bunun bir sınırıda olduğu da yazıyor.
Belki cevaptaki bir püf noktası programınızın  özelliğini artırabilir
ST Forum Linki

hasankara

Alıntı yapılan: Mucit23 - 11 Eylül 2024, 12:55:14White noise dediğimiz şey random değerler değil mi?
https://www.sciencedirect.com/topics/mathematics/random-noise

Random değerleri dac a göndermek bir gürültü meydana getirebilir ancak white noise elde etmiş olamayabiiriz. White noise, tüm frekanslardan eşit genlikte barındırması beklenmektedir.

REW bilgisayar uygulaması, ihtiyacınızı doğrudan karşılamayabilir ancak ses konusunda bazı temel kavramların pekiştirilmesi noktasında fayda sağlayabilir. Ses kartı ile yapılabilecek tüm uygulamaları (generator, Scope, Spectrum Analyzer, eq filter, room simulation) bünyesinde barındıran ücretsiz bir yazılım.

Mucit23

Alıntı yapılan: hasankara - 12 Eylül 2024, 05:42:11https://www.sciencedirect.com/topics/mathematics/random-noise

Random değerleri dac a göndermek bir gürültü meydana getirebilir ancak white noise elde etmiş olamayabiiriz. White noise, tüm frekanslardan eşit genlikte barındırması beklenmektedir.

REW bilgisayar uygulaması, ihtiyacınızı doğrudan karşılamayabilir ancak ses konusunda bazı temel kavramların pekiştirilmesi noktasında fayda sağlayabilir. Ses kartı ile yapılabilecek tüm uygulamaları (generator, Scope, Spectrum Analyzer, eq filter, room simulation) bünyesinde barındıran ücretsiz bir yazılım.


Hasan hocam bunun bir matematiksel algoritması var mı? Yada hazır bir lookup tablosu olabilir mi? Evet bir gürültü yaratıyorum. Çıkışına henüz spekturum analyser ile bakamadım ama tahminimce birçok frekans değeri eksik çıkacaktır.

power20

Mcu ile kullanmak üzere bilgisayarda üretilen 100ms süreli beyaz gürültü sinyalini tablo olarak hafızaya alarak sürekli tekrar etmiş olsak nasıl olur? İstediğiniz kadar çalabilirsiniz.

100ms ses sinyali hafızada pek yer kaplamaz. Gerekirse daha kısa olabilir. 


z

Alıntı yapılan: Mucit23 - 12 Eylül 2024, 08:15:36Hasan hocam bunun bir matematiksel algoritması var mı?

Pseudorandom Number Generator (PNG) seklinde arama yaparsan ilgili algoritmalara ulasabilirsin.

PNG sonuclari ses olarak dinlendiginde gurultu olarak duyulacaktir.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Epsilon

#14
@Mucit23 Hocam

Aşağıdaki kodu ChatGPT yazdı önce Phyton da yazdı  ."Ekleyeceğim phyton kodunu STM32 ye uygun hale getirebilirmisin" diye sordum
"Ne demek emrin olur abi "dedi  :)
Phytondan dönüştürdüğü kod
Denemenizde fayda olabilir.(Tabi saçma sapan birşeyler de yazmış olabilir)

#include "main.h"
#include <stdlib.h>
#include <math.h>

#define SAMPLE_RATE 44100  // Örnekleme oranı (44.1 kHz)
#define DURATION 1         // Beyaz gürültü sinyalinin süresi (saniye)
#define MEAN 0.0           // Gaussian dağılımı için ortalama
#define STD_DEV 1.0        // Gaussian dağılımı için standart sapma
#define NUM_SAMPLES (SAMPLE_RATE * DURATION)

DAC_HandleTypeDef hdac1;
TIM_HandleTypeDef htim2;

float white_noise[NUM_SAMPLES];

// Gaussian dağılımlı rastgele sayı üretme fonksiyonu
float generate_gaussian_noise(float mean, float std_dev) {
    float u1 = ((float)rand() / (float)RAND_MAX);  // 0 ile 1 arasında rastgele sayı
    float u2 = ((float)rand() / (float)RAND_MAX);  // 0 ile 1 arasında rastgele sayı
    float z = sqrtf(-2.0f * logf(u1)) * cosf(2.0f * M_PI * u2);
    return mean + std_dev * z;
}

// Beyaz gürültü üretme fonksiyonu
void generate_white_noise(void) {
    for (int i = 0; i < NUM_SAMPLES; i++) {
        white_noise[i] = generate_gaussian_noise(MEAN, STD_DEV);
    }
}

// Timer callback fonksiyonu (DAC'e beyaz gürültü sinyali gönderme)
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
    static uint32_t sample_index = 0;
    
    if (htim->Instance == TIM2) {
        // DAC çıkışına beyaz gürültü sinyalini gönder
        HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, (uint32_t)((white_noise[sample_index] + 1.0f) * 2047.5f)); // Sinyali 12-bit DAC'e uyarlama
        sample_index = (sample_index + 1) % NUM_SAMPLES;  // Sinyali döngüsel yap
    }
}

int main(void) {
    HAL_Init();
    SystemClock_Config();
    MX_DAC1_Init();
    MX_TIM2_Init();
    
    // Beyaz gürültü üret
    generate_white_noise();
    
    // DAC ve timer başlat
    HAL_DAC_Start(&hdac1, DAC_CHANNEL_1);
    HAL_TIM_Base_Start_IT(&htim2);
    
    while (1) {
        // Sürekli olarak beyaz gürültü sinyali üretilecek
    }
}

// DAC ve Timer yapılandırma fonksiyonlarını CubeMX veya CubeIDE'den otomatik olarak oluşturabilirsiniz.