Odzyskiwanie reprezentacji sygnału analogowego z sygnału skwantyzowanego

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()
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

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ąć?

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.

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

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

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".

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 :)

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