Analogowe przesuwanie częstotliwości

Hej,

Szukam informacji na temat układów przesuwających częstotliwość. W najprostszym przypadku mam sinusoidę o określonej częstotliwości i chcę z niej zrobić (ale nie wykryć i wygenerować ponownie) sinusa o innej, większej lub mniejszej, częstotliwości. Najlepiej byłoby, żeby charakterystyka przesuwania nie była stała, tzn. niskie częstotliwości były przesuwane w górę a wysokie w dół (domyślam się, że można to osiągnąć stosując dwa takie układy i filtry na wejściach). Na jakiej zasadzie takie rozwiązania się opierają?

Reply to
Adam Wysocki
Loading thread data ...

Użytkownik "Adam Wysocki" snipped-for-privacy@nospam.invalid napisał w wiadomości news: snipped-for-privacy@p21.f.n480.z2.fidonet.org...

Trochę to zawęź. Analogowo / cyfrowo, jakie częstotliwości?

Może napisz wprost, co chcesz osiągnąć.

Matematyczny opis zagadnienia znajdziesz w książkach o przetwarzaniu sygnałów. Praktyczny - w książkach o DSP (rozwiązania cyfrowe) oraz technice radiowej i pomiarowej (rozwiązania analogowe).

Analogowo - mnożenie przez funkcję sinusoidalną i filtracja (na tzw. modulatorze - zobacz np. MC1496, można go nawet dyskretnie wyrzeźbić). DSP - transformata Fouriera, dowolne zabawy w dziedzinie częstotliwościowej i odwrotna FT.

Drugi sposób jest jasny, w przypadku pierwszego wystarczy sobie przypomnieć, że: cos(2pi*F1)*cos(2pi*F2)=[cos(2pi*(F1-F2))+cos(2pi*(F1+F2))]/2 (przesunięcia można sobie ładnie wyobrażać na wykresach częstotliwościowych).

Ogólnie, zagadnienie jest częścią innego, szerokiego (tj. przetwarzania sygnałów), jest wykorzystywane praktycznie w co drugiej pralce i wałkowane na uczelniach, więc w materiałach można przebierać. :)

Pzdr, Raf.

Reply to
invalid unparseable

Jeśli naiwnie poprzesuwać prążki w DFT, to rozlecą się zależności między tonami harmonicznymi i sygnał wyjściowy przestanie przypominać wejściowy.

I tu właśnie będzie problem -- na wyjściu pojawią się dwa cosinusy zamiast jednego. Filtry mogą dużo pomóc, ale mogą też zaszkodzić, jeśli sygnał wejsciowy miał dużą gęstość mocy w okolicach niechcianego fragmentu pasma. Można też użyć cyfrowego image rejectora, ale to wymaga przetwarzania w dziedzinie zespolonej.

Pozdrawiam Piotr Wyderski

Reply to
Piotr Wyderski

Użytkownik "Piotr Wyderski" snipped-for-privacy@ii.uni.wroc.pl> napisał w wiadomości news:d8immo$dqf$ snipped-for-privacy@news.dialog.net.pl...

Jeśli pytający chce zrobić to, o co pyta, to innego wyjścia raczej nie ma (ma?). Powyższego powinien się jednak spodziewać (w przypadku ogólnym jest to nie do uniknięcia).

W technice analogowej szeroko wykorzystywany jest jeszcze pomysł przetwarzania pośredniego.

Pzdr, Raf.

Reply to
invalid unparseable

też mi to do głowy przylazło. Zmodulować nośną amplitudowo jednowstęgowo jednocześnie tłumiąc nośną (czyli modulacja J3E) i demodulować mieszając z inną częstotliwością.

Waldek

Reply to
Waldemar Krzok

Analogowo, chociaż jeśli będzie zbyt skomplikowane to pewnie pokuszę się o jakiś mikrokontroler albo dsp. Mimo wszystko wolałbym analogowo.

Częstotliwości - 5-25 Hz chciałbym przesunąć do przodu, a 15-100 kHz do tyłu, tak żeby mieściły się w słyszalnym paśmie.

Usłyszeć infra- i ultradźwięki :) To musi być ciekawe doświadczenie.

Dzięki :) Przyjrzę się temu jutro.

Reply to
Adam Wysocki

Nie możesz usłyszeć infra i ultradzwięków. Nie masz stosownych receprorów. Jak przesuniesz to usłyszysz dzwięki i nie będa miały te doznania nic współnego ze słyszeniem ultradzwięków przez nietoperza. Musisz się przyzwyczaić do Swojej niedoskonałości. Co najwyżej możesz zobaczyć jak wyglądaja na oscyloskopie. Ale nie warto. Nic specjalnego. Tomek

Reply to
Tomek

Adam Wysocki napisał(a):

Jednak lepiej dsp zatrudnic. zrobic FFT sygnalu potem przesunac i zrobic fft ponownie i wpuscic na DAC i bedziesz slyszal fajne rzeczy:)

poszukaj w edw arta o podslychiwaniu nietoperzy. bylo jakies 5 lat temu "podsluchiwacz nietoperzy" sie toto nazywalo.

Reply to
lukasz sczygiel

From: "Tomek"

Był opis układu chyba EP, nawet ciekawie to wyglądało. Może nie usłyszeć w oryginale, ale jednak słyszeć. Budowa bardzo prosta: oparte ma mieszaczu

Władysław

---------------------------------------------------------------------- Piekne dziewczyny i szybkie auta! >>>

formatting link

Reply to
Władysław Skoczylas

Wpisz w googlach "bat detector". Pozdr. Irek

Reply to
Irek_K

Użytkownik "Adam Wysocki" snipped-for-privacy@nospam.invalid napisał w wiadomości news: snipped-for-privacy@p21.f.n480.z2.fidonet.org...

Pomysł ciekawy, ale obawiam się, że może nic nie wyjść. Po pierwsze, stosując metodę przesuwania częstotliwości usłyszysz coś zupełnie innego - harmoniczne dźwięków przestaną być ich harmonicznymi (przestaną wpływać na barwę dźwięku), a będą stanowiły zupełnie nowe dźwięki.

Jeśli koniecznie chciałbyś przesuwać i to na dodatek metodami analogowymi, to musiałbyś:

- dla 5-25 Hz: filtrować dolnoprzepustowo (stromo) przy fg=25 Hz, przesuwać o kilkaset Hz (Fp), filtrować górnoprzepustowo z fg=Fp (jeszcze bardziej stromo!); to jednak przy założeniu stałego przesunięcia (budujesz stały FGP), jeśli chciałbyś je regulować - konieczne przetwarzanie pośrednie;

- dla 15-30 kHz: filtrować górnoprzepustowo (bardzo stromo) przy fg=15 kHz i modulować częstotliwością od 0 do 15 kHz, czyli wrócić z widmem w zakres słyszalny (końcowa filtracja dolnoprzepustowa inna niż RC jest już raczej zbędna, bo widmo sumacyjne ląduje w zakresie niesłyszalnym).

Dla częstotliwości powyżej 30 kHz przestrajania nie da się osiągnąć w sposób "tak łatwy", jak wyżej. Trzeba byłoby zrobić przetwarzanie pośrednie. Częstotliwość pośrednia musiałaby być ruchoma, a za nią musiałby się znajdować stromy FPP.

Jednym słowem - stado względnie skomplikowanych modułów: generatorów sinusoidalnych, modulatorów i filtrów, z których każdy będzie Ci bruździł nieidealnościami (w szczególności szumiące modulatory, harmoniczne w generowanych sinusach i tępe filtry). Na dodatek robisz to pod strasznie wrażliwy przyrząd pomiarowy, jakim jest reagujące logarytmicznie na natężenie dźwięku ucho, więc słychać będzie wszystko (w tym (głównie?;)) to, czego w przyrodzie nie było).

Przy okazji zauważ, że o ile wysokie częstotliwości będą "rozstrzelone" (zresztą zbytnio, bo nie będzie można słuchać całego ich widma jednocześnie), to niskie będą "ściśnięte". Dla ucha definiuje się rozróżnialność częstotliwościową, która jest tym mniejsza, im wyższe są częstotliwości (subiektywna charakterystyka tonalna jest logarytmiczna, stąd tony w muzyce są rozłożone wykładniczo - ich częstotliwość podwaja się co oktawę). Czyli, o ile pomiędzy 5-25 Hz jest spora różnica względna, to pomiędzy 500 i 525 Hz ucho zauważy jedynie drobne różnice (rozróżnialność przy tej częstotliwości wynosi około 1,5 Hz, jednak u Ciebie nie będzie miała miejsce zmiana pojedynczego tonu, ale wielu na tle wielu innych; miejsce mieć będzie jeszcze ciekawszy problem tzw. maskowania tonów).

Mam nadzieję, że zniechęciłem. ;) Polecam DSP. W końcu to tylko software i jeśli nie musi być real-time, to chyba nie będzie duży problem.

Na zmianę częstotliwości z jednoczesnym rozciągiem / ścieśnieniem widma jest trywialna metoda - nagrywaj szybciej a odtwarzaj wolniej lub odwrotnie (czyli rozstrój częstotliwość próbkowania względem częstotliwości późniejszego wystawiania nagrania na przetwornik C/A). ;-) Dzięki temu efekt będzie bardziej _naturalny_, bo harmoniczne danego dźwięku pozostaną jego harmonicznymi (bo ich częstotliwości zmienią się proporcjonalnie), jednak wszystko będzie się oczywiście działo szybciej / wolniej.

W przypadku DSP taki rozciąg bez utraty własności "real-time" mógłbyś osiągnąć obcinając górną część widma po DFT (zmniejszając liczbę prążków) i interpolując prążkami zerowymi tak, żeby zbiór poddawany IDFT miał pierwotną długość (rozszerzanie widma niskich częstotliwości). Analogicznie, mógłbyś wybierać co drugi prążek, a prążki wyższe dopełnić zerami (ścieśniania widma wyższych częstotliwości).

Jeśli mogę coś jeszcze zasugerować: zainstaluj Matlaba - ma funkcje wczytywania plików .wav jako tablic z wartościami w zakresie <-1,1> - naprawdę jest się czym bawić!

Pozdr, Raf.

Reply to
invalid unparseable

Nie pamiętasz może w którym numerze albo jak się nazywał ten układ?

Reply to
Adam Wysocki

Moim zdaniem na przesuwanie analogowe szkoda czasu, to nie są lata siedemdziesiąte. ;-) Przy takich parametrach sygnału wejściowego powinien Ci wystarczyć ARM za 30 zł. z Seguro -- ma przetwornik ADC o fmax 384kHz (więc z powodzeniem Twój sygnał się w tym zmieści) oraz m.in. interfejs szeregowy do kodeków I2S.

W razie potrzeby mogę Ci opisać algorytm bardzo wydajnego i dokładnego generowania (co)sinusa.

Pozdrawiam Piotr Wyderski

Reply to
Piotr Wyderski

From: "Adam Wysocki"

Coś było o pdsłuchiwaniu nietoperzy.... i o możliwości "posłuchania" płomienia (to już w tekscie) ... więcej nie pamiętam :-(

Władysław

---------------------------------------------------------------------- Znajdz swoja milosc na wiosne... >>>

formatting link

Reply to
Władysław Skoczylas

Tu sie raczej FFT przyda. Szczegolnie do "kompresji pasma", takie 10-100kHz upchnac w 1-10kHz. No i "ekspansji' tez.

Swoja droga ciekawe jak to wyjdzie z harmonicznymi ..

J.

Reply to
J.F.

Użytkownik "Piotr Wyderski" snipped-for-privacy@ii.uni.wroc.pl> napisał w wiadomości news:d8mj7f$kcg$ snipped-for-privacy@panorama.wcss.wroc.pl...

Jeśli mogę się wtrącić: masz na myśli jakiś algorytm autorski / mało znany / ciekawy? Jeśli to nie tajemnica, to chętnie bym się sam zapoznał. ;)

Pzdr, Raf.

Reply to
invalid unparseable

Użytkownik "J.F." <jfox snipped-for-privacy@poczta.onet.pl> napisał w wiadomości news: snipped-for-privacy@4ax.com...

Wygląda, że powinno wyjść. ;-) Przed wysłaniem mojego wcześniejszego posta sprawdziłem to na jednym przykładzie. Pod wiadomością wklejam matlabowy m-plik.

Pzdr, Raf.

% PRZYKŁAD KOMPRESJI WIDMA clc; clear; clf;

orygFFT=zeros(1,201); skomprFFT=zeros(1,201);

orygFFT(11)=100+j*50; orygFFT(192)=100-j*50; orygFFT(21)=30+j*100; orygFFT(182)=30-j*100;

skomprFFT(6)=100+j*50; skomprFFT(197)=100-j*50; skomprFFT(11)=30+j*100; skomprFFT(192)=30-j*100;

oryginal=ifft(orygFFT); skompresowany=ifft(skomprFFT);

subplot(221); stem(abs(orygFFT)) title('Sygnal oryginalny - FFT'); subplot(222); plot(real(oryginal(1:200))) title('Sygnal oryginalny - przebieg czasowy'); subplot(223); stem(abs(skomprFFT)) title('Sygnal skompresowany - FFT'); subplot(224); plot(real(skompresowany(1:200))) title('Sygnal skompresowany - przebieg czasowy');

Reply to
invalid unparseable

50MHz -- powinien dać radę.

Pozdrawiama Piotr Wyderski

Reply to
Piotr Wyderski

Autorski, ale mało odkrywczy, choć o wspaniałych parametrach i -- z tego co mi wiadomo -- niezbyt często stosowany. Konkretnie chodzi o interpolację liniową. W jednej pamięci 256x18 bit jest trzymana wartość 2^18*sin(k) zaokrąglona do najbliższej wartości, gdzie k oznacza kolejną próbkę z przedziału [0,pi/2). W drugiej pamięci 256x10 bit są trzymane róźnice miedzy każdymi dwiema kolejnymi próbkami. Teraz wystarczy wziąć 18-bitowe słowo fazowe, dokonać korekcji kąta (na podstawie wzorów redukcyjnych) i znaku oraz interpolować sin na podstawie obu tablic. Wynik jest rewelacyjny, byłem nim bardzo zaskoczony: sygnał użyteczny ma ~17,3 bitu dokładności, a wydajność na FPGA niewiele ustępuje CORDICowi z pełnym pipeliningiem (jest limitowana przez RAMy i na 1C6-6 wynosi 255,9 megapróbki na sekundę), a układ wynikowy jest 5 razy mniejszy niż CORDIC o tej samej dokładności.

Rzut oka na funkcjię błędu pokazuje, że jest duża szansa jeszcze bardziej poprawić dokładność przez zastosowanie odpowiedniego korektora amplitudy, ale ponieważ chciałem mieć 15 bitów dokładności, a za pierwszym strzałem dostałem ponad 17, to nie chciało mi się o tym więcej myśleć. :-)

Pozdrawiam Piotr Wyderski

Reply to
Piotr Wyderski
Reply to
Dariusz K. Ladziak

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.