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ą?
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ć. :)
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.
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.
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ą.
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
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ć!
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.
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.
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ć. :-)
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.