[RAQ] Pliki WAV w LTspice: Użycie stereo i szyfrowanie głosu
Artykuł opisuje zaawansowane wykorzystanie plików WAV w oprogramowaniu do symulacji LTspice. Prezentuje importowanie i eksportowanie plików stereo (również o większej liczbie kanałów), a także proste szyfrowanie głosu.
Pytanie:
Czy LTspice pozwala na wykorzystanie stereofonicznych plików audio oraz na szyfrowanie wiadomości głosowych?
Odpowiedź:
If music be the food of love, simulate on.
LTspice posiada wiele ciekawych właściwości, a obsługa plików audio należy do tych bardziej imponujących.
Co prawda interesujące jest samo obserwowanie zachowania obwodu oraz przepływu prądów w układzie na ekranie komputera. Tym niemniej operacje na plikach audio, które można odtworzyć również poza środowiskiem, pozwala inżynierom wykorzystać kolejny zmysł do oceny układu.
Sposób używania plików mono w LTspice jest dość prosty i dobrze znany. W tym artykule opiszemy natomiast sposób wykorzystania plików stereo (o dwóch lub większej liczbie kanałów). Pokażemy też jak zaimportować i wyeksportować dane stereo za pomocą plików WAV. Przedstawimy również kilka wskazówek i trików dotyczących plików WAV, które umożliwią czytelnikowi ich wykorzystanie w bardziej zaawansowany sposób.
Generowanie stereofonicznego pliku WAV
Należy zacząć od wygenerowania danych stereo z sygnału monofonicznego. Rysunek 1 pokazuje obwód, który generuje sygnał sinusoidalny o amplitudzie 1 V i częstotliwości 1 kHz, a następnie dzieli go na dwa kanały, przełączając sygnał pomiędzy nimi na przemian. Ton jest przełączany między kanałami CH1 i CH2 co dwie sekundy.
Rysunek 1. Sygnał sinusoidalny 1 kHz jest przełączany co dwie sekundy między kanałami CH1 i CH2. Wynikowe dane są eksportowane do pliku WAV
Polecenie .wave “C:\export.wav” 16 44.1k V(CH1) V(CH2) digitalizuje każdy kanał z rozdzielczością 16 bitów i częstotliwością 44,1 kSPS, po czym zapisuje rezultat w pliku C:\export.wav. Polecenie to sprawia, że każdy wymieniony po częstotliwości próbkowania sygnał staje się samodzielnym kanałem w pliku WAV. LTspice może zapisać do 65 535 kanałów w pojedynczym pliku audio – wystarczy zgodnie z potrzebą dopisać sygnały do komendy.
Domyślnie polecenie .wave zapisuje pierwszy wymieniony kanał jako lewy, natomiast drugi jako prawy. W naszym przypadku podczas odtwarzania pliku export.wav, kanał CH1 zostanie odczytany jako lewy, a kanał CH2 jako prawy, niezależnie od nazewnictwa węzłów w obwodzie. Warto zauważyć, że domyślnie CH1 i CH2 są przechowywane w pliku .wav odpowiednio jako chan 0 i chan 1. Jest to ważne podczas odczytu pliku.
Import stereofonicznych plików WAV
Wyeksportowany plik stereo można wykorzystać do pobudzenia innego obwodu, na przykład zaprezentowanego na rysunku 2. Wykorzystuje on dwa kanały z pliku export.wav jako sygnały wejściowe.
Rysunek 2. Dwa kanały z export.wav służą do stymulacji dwóch niezależnych obwodów
Sygnały z plików zewnętrznych są przypisywane poprzez przytrzymanie klawisza CTRL i kliknięcie prawym przyciskiem myszy symbolu źródła napięcia. Powoduje to otwarcie okienka Component Attribute Editor przedstawionego na rysunku 3.
Rysunek 3. Sygnały z export.wav są używane jako dane wejściowe dla obwodu na rysunku 2. Oto przypisanie wartości pobieranych z kanału 0 do źródła V1
Jak wspomniano powyżej, podczas generowania pliku WAV w LTspice można zapisać do 65 535 kanałów – wystarczy dopisać odpowiednie kanały na końcu polecenia .wave. Należy pamiętać, że domyślnie LTspice nazywa pierwszy kanał jako Channel 0, następny jako Channel 1 i tak dalej. W naszym przypadku plik export.wav przechowuje napięcie V(CH1) jako Channel 0 oraz V(CH2) jako Channel 1. Aby odtworzyć te kanały za pomocą źródła napięcia, należy określić plik .wav oraz kanał w polu Value konfiguratora źródła napięcia. W tym przypadku komendy wyglądają następująco:
- Aby źródło napięcia V1 odtworzyło kanał V(CH1): wavefile=“C:\export.wav” chan=0
- Aby źródło napięcia V2 odtworzyło kanał V(CH2): wavefile=“C:\export.wav” chan=1
Separacja kanałów audio
W teorii, podczas odtwarzania pliku export.wav w odtwarzaczu multimedialnym powinno następować całkowite przełączanie pomiędzy odtwarzaniem tonu 1 kHz przez lewy głośnik (bądź słuchawkę), a odtwarzaniem przez prawy głośnik. Niemniej jednak nie zawsze można osiągnąć pełną separację kanałów. Zależy ona od jakości odtwarzacza multimedialnego.
Odtwarzanie pliku export.wav na laptopie wykazało, że około 30% lewego kanału pojawiło się na prawym kanale. Zaprezentowano to na oscylogramie (rysunek 4).
Rysunek 4. Lewy (żółty) kanał pokazuje przesłuch około 30% z prawego (niebieskiego) kanału podczas odtwarzania na laptopie
Odtwarzanie tego samego pliku na telefonie komórkowym z ok. 2000 roku dało lepszą separację kanałów. Nie wykazał zauważalnego przesłuchu, a jedynie niewielkie zniekształcenia przy pełnej głośności, jak pokazano to na rysunku 5.
Rysunek 5. Telefon komórkowy z 2000 roku nie wykazywał przesłuchów, a jedynie zniekształcenia przy pełnej głośności
Powtórzenie eksperymentu na telefonie nowej generacji (z 2018 roku) nie wykazało zauważalnego przesłuchu. Osiągnięto pełny sygnał szczytowy 1 V i bardzo niewielkie zniekształcenia, co widać na rysunku 6.
Uwaga: wykresy oscyloskopowe ustawiono z czułością 500 mV/div.
Rysunek 6. Telefon nowszej generacji wykazuje znacznie mniejszy przesłuch oraz niższe zniekształcenia
We wszystkich trzech przypadkach użyto tego samego pliku, co pokazuje, że LTspice generuje plik WAV z pełną separacją kanałów, ale końcowe odtwarzanie zależy w dużej mierze od jakości odtwarzacza.
Szyfrowanie głosu
Obwód na rysunku 7 prezentuje podstawową metodę szyfrowania głosu, w której sygnał audio kodowany jest za pomocą losowej sekwencji liczb, a następnie dekodowany.
Rysunek 7. Korzystanie z losowego źródła napięcia do kodowania i dekodowania pliku audio
Plik voice.wav zawiera oryginalne nagranie. Do wygenerowania losowej sekwencji liczb, które będą zmieniać się co 100 µs, posłużył arkusz kalkulacyjny Excel. Wyniki są kopiowane do pliku tekstowego o nazwie random.txt. Przykładowe dane przedstawiono na rysunku 8.
Rysunek 8. Losowe napięcia generowane przy użyciu Excela i zapisane w pliku tekstowym
Plik random.txt służy do generowania losowo zmieniającego się napięcia V(RAND) przy użyciu źródła napięcia odcinkowo-liniowego (ang. piecewise linear, PWL) w programie LTspice.
V(RAND) jest dodawane do sygnału głosowego za pomocą behawioralnego źródła napięcia B1. Dane wyjściowe są następnie mnożone przez V(RAND), a wynik jest zapisywany w pliku encrypt.wav. Odsłuchanie encrypt.wav pokazało, że oryginalny dźwięk jest praktycznie niesłyszalny.
Rysunek 9 prezentuje w oknie LTspice wykresy: oryginalnego głosu, zaszyfrowanego głosu, a także sygnału odszyfrowanego.
Rysunek 9. Wykresy oryginalnego, zaszyfrowanego i odszyfrowanego sygnału głosowego
Drugie behawioralne źródło napięcia zostało użyte do odszyfrowania oryginalnego sygnału audio. Wynik zapisano w pliku decrypt.wav.
Tworzenie pliku WAV ze źródła napięcia różnicowego
Składnia polecenia .wave nie pozwala na digitalizację napięć różnicowych. Można to jednak łatwo rozwiązać za pomocą behawioralnego źródła napięcia, tak jak to pokazano na rysunku 10.
Rysunek 10. Tworzenie pliku WAV ze źródła napięcia różnicowego
Behawioralne źródło napięcia generuje sygnał równy V(OUT1)-V(OUT2). Taki sygnał można już normalnie użyć w składni polecenia .wave.
Zmienne w funkcji źródła behawioralnego mogą obejmować dowolne napięcia lub prądy w obwodzie. Można nimi też manipulować za pomocą dowolnej funkcji matematycznej dostępnej w LTspice. Wynik można następnie wyeksportować do pliku WAV w normalny sposób, tak jak każdy sygnał.
Podsumowanie
LTspice to potężny symulator, a wyniki jego obliczeń można przetwarzać nie tylko wewnątrz środowiska. Za pomocą polecenia .wave program może z łatwością importować, przetwarzać oraz eksportować pliki audio przeznaczone do odtwarzania w odtwarzaczu multimedialnym.