Odzyskiwanie reprezentacji sygnału analogowego z sygnału skwantyzowanego

Odpowiedz Nowy wątek
2014-12-19 18:46
0

Hej,

Czy możliwe jest odzyskanie sygnału analogowego na podstawie: posiadanego sygnału skwantyzowanego, błędu kwantyzacji, liczby bitów konwertera A/D i jego zakresu pomiaru? Powiedzmy, że chciałbym na tych założeniach zbliżyć jak najbardziej discrete signal do analog signal.

figure.png

Poniżej kod generujący powyższy plot:

import numpy as np
import pylab as py
 
def sin(frequency = 1, time = 1, sampling = 128, phi = 0):
    '''
    Sinus function for a given frequency in Hz, length in time,
    sampling frequency, and phase.
    '''
    dt = 1.0 / sampling
    t = np.arange(0, time, dt)
    s = np.sin((2 * np.pi * frequency * t) + phi)
    return s, t
 
s_analog_1, t_analog_1 = sin(frequency = 1, sampling = 1000)
py.plot(t_analog_1, s_analog_1, linewidth = '1.5', color = 'red', label = 'analog signal')
 
s_analog_2, t_analog_2 = sin(frequency = 1, sampling = 10)
py.plot(t_analog_2, s_analog_2, 'o', color = 'red')
 
# Calculate the quantization noise, ie "R/2^N"
s_discrete, t_discrete = sin(frequency = 1, sampling = 10)
N = 3 # Number of bits of A/D Converter
R = 2 # Range of A/D Converter
dy = R/2**N # Quantization error
s_quantized = np.floor(s_discrete / dy) * dy + 0.5 *dy
 
py.plot(t_discrete, s_quantized, color = 'gray', label = 'discrete signal')
py.plot(t_discrete, s_quantized, 'o', color = 'gray')
 
py.legend(loc = 'upper right', fontsize = '10')
 
py.show()

The quieter you become, the more you are able to hear.
edytowany 1x, ostatnio: Gjorni, 2014-12-19 18:56

Pozostało 580 znaków

2014-12-23 12:15
0

tzn w jaki sposób chcesz uzyskać analogowy sygnał w komputerze? bo nie bardzo rozumiem.

Generalnie nie da się po spróbkowaniu odzyskać orginalnego sygnału. Możesz z tego odtworzyć sygnał ciągły z dokładnością do wartości równej częstotliwości próbkowania. Przetworniki cyfrowo analogowe mogą stworzyć (słowo klucz) sygnał analogowy na podstawie spróbkowanego, ale wartości pomiędzy bitami będą średnią bądź wartością stałą bądź jakimś liniowym przekształceniem.

Operacja próbkowania powoduje że gubimy informację o tym co się dzieje pomiędzy próbkami ( kwantyzacja dodatkowo jeszcze potęguje to zjawisko) bo generalnie zakładamy że częstość próbkowania została dobrana tak, że informacji o wyższych czestotliwosciach albo nie ma , albo są nieważne.

Pytanie jest jeszcze co chcesz dzięki temu osiągnąć. Napisz może jest jakiś mądrzejszy sposób.

Natomiast nie kreuję się na jakiegoś wielkiego eksperta w dziedzinie przetwarzania sygnałów także nie musisz się bardzo przywiązywać do tego co piszę :D

Pozostało 580 znaków

2014-12-23 14:52
0

Taki trochę na wyczucie strzał, ale weź sygnał spróbkowany, "zagęść" dziedzinę (czas czy co tam ma być na osi X) i spróbuj zrobić splajnową (spline) interpolację. To będzie oczywiście oszustwo, ale może Ci kształt sygnału "unaturalnić". Generalnie nie widzę tutaj za bardzo wyjścia innego niż "oszukiwanie" przy pomocy interpolacji, czy nawet aproksymacji. Kwestia zasadnicza - co chcesz osiągnąć?

Pozostało 580 znaków

2014-12-23 15:39
tk
0
wojciechmaciejewski napisał(a):

Generalnie nie da się po spróbkowaniu odzyskać orginalnego sygnału.

Ja rowniez nie jestem specem od przetwarzania sygnalów, ale bylbym ostrozny w stawianiu tego typu tez. O ile mi wiadomo w pewnych sytuacjach jest to mozliwe, choc moge sie mylic. Natomiast byc moze warto poczytac o czyms takim jak twierdzenie Shannona Kotielnikowa i o częstotliwości Nyquista bo takie akurat mam skojarzenia zwiazane z tym zagadnieniem. Nie wiem natomiast na ile moje skojarzenia sa sluszne, ale jakby co to zawsze mozna zignorowac moja wypowiedz :) Poszukałbym tez informacji w literaturze na temat przetwarzania sygnałów - może akurat jest na to sposób.

edytowany 2x, ostatnio: tk, 2014-12-23 15:41

Pozostało 580 znaków

2014-12-23 15:52
1

@tk każde odtworzenie będzie obarczone błędem. Wynikającym z dyskretyzacji i kwantyzacji. A jak się wgłębisz to wejdziesz jeszcze w efekty aperturowe, dryft parametrów ADC/DAC itd.

Interpolacja to taka klasyka w sumie.

Polecam zajrzeć tu:
http://sine.ni.com/np/app/mai[...]1/sn/n17:mi,n21:42/fmid/3014/
i tu:
http://dsp-book.narod.ru/303.pdf

Panie, kiedy ja niepijący :P - alagner 2014-12-23 15:57
To polac mnie, zamiast jemu :) - tk 2014-12-23 16:01

Pozostało 580 znaków

2014-12-23 15:54
1

nie muszę uważać na takie stwierdzenie bo akurat ono jest prawdziwe. Twierdzenie Shannona Kotielnikowa i częstotliwość Nyquista mówią o użyteczniej części sygnału czyli generalnie o tym że częstość próbkowania musi być co najmniej 2 razy wyższa niż najwyższa częstotliwość w sygnale żeby go idealnie odwzorować.

Więc owszem, wiedząc że warunek Nyquista był spełnione przy próbkowaniu, możemy powiedzieć że sygnał zostanie idealnie odwzorowany

Natomiast jeżeli mamy taką sytuację jak tutaj, to nie wiemy co się dzieje pomiędzy 2 punktami spróbkowanymi, bo nie wiemy jaki miał charakter pierwotny sygnał.

Oczywiście idealne odwzorowanie odwrotne jest możliwe tylko i wyłącznie jak sobie piszemy wzory na kartce :) bo w realnym świecie ( czyt. cyfrowym) to jest to niemożliwe.

Jako że to forum dla programistów a nie studentów teorii sygnałów to się skupiłem raczej na rzeczywistym świecie.

Jeżeli faktyczna mocna pomoc teoretyczna Ci potrzebna proponuję poszukać tutaj :)
http://www.matlab.pl/viewforu[...]91d5b69511b5569bf5ce93997a4ec

OK, nie bede polemizowal poniewaz nie jestem w tej dziedzinie az tak bardzo obeznany :) Moze nawet nie powinienem sie wypowiadac, ale z drugiej strony to przynajmniej sprowokoalem do dyskusji i jakies ciekawe linki sie pojawily :) - tk 2014-12-23 16:03

Pozostało 580 znaków

2014-12-23 16:08
0

Tak mnie jeszcze (mocno spekulacyjnie, ale może będzie to pomocne) natchnęło - czy Autor topica nie stara się tutaj w dziwny sposób pozbyć się przecieku widmowego? Bo patrzę na sygnał spróbkowany i rzeczywisty i widzę, że to ma być sinus... Tyle tylko, że spróbkowany asynchronicznie i przez to takie jaja. Jeżeli to ma lecieć do obróbki w dziedzinie częstotliwości (FFT/DFT/DTFT czy inne wariacje nt. Fouriera) to polecałbym jeszcze zastosować funkcję okna (window function). Jaką - trzeba dobrać do zastosowania, Blackman albo Hamming dobrze działają w ramach prezentacji "z czym to się je", potem mając już tego świadomość dobierze się odpowiednie "nazwisko mądrego faceta".

Sinus jest dlatego, bo to tylko taki "egzampel" :) Generalnie chodzi o zniwelowanie szumu kwantyzacji wynikającego ze skończonej dokładności konwertera A/D. Ostatecznie poszedłem w kierunku odtwarzania sygnału na podstawie "sygnału sąsiadującego" z danego kanału i sygnałów z kanałów równoległych. Wygląda obiecująco. Zobaczymy, gdzie z tym dojdę :) - Gjorni 2014-12-30 16:40

Pozostało 580 znaków

2014-12-24 12:20
0

jeżeli to czysty sinus to nawet nie ma co oknować, bo z prostokąta ładny sinc wyjdzie i widać od razu co to :)

Życie byłoby zbyt piękne, gdyby wszystko składało się tylko z jednego sinusa :< - Gjorni 2014-12-30 16:41

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0