Esiste una distorsione non lineare a banda limitata?


12

Quindi, se si genera un'onda quadra semplicemente commutando un segnale tra due valori, ai confini del campione, produce una serie infinita di armoniche, che alias e producono toni al di sotto del proprio fondamentale, il che è molto udibile. La soluzione è la sintesi a banda limitata , che utilizza una sintesi additiva o passaggi a banda limitata per produrre forme d'onda uguali a quelle che avresti limitato la banda all'onda quadra matematica ideale prima di campionarla:

http://flic.kr/p/83JMjT

inserisci qui la descrizione dell'immagine

Ma mi sono appena reso conto che se si applica una grande amplificazione a un'onda sinusoidale digitale e poi la si taglia in modo digitale, produrrà la stessa forma d'onda quadra, senza increspature del fenomeno di Gibbs. Quindi produce anche prodotti di distorsione con alias, giusto? Quindi qualsiasi distorsione non lineare nel dominio digitale che produce armoniche al di fuori dei limiti di Nyquist produrrà prodotti di distorsione con alias? (Modifica: ho fatto alcuni test e confermato che questa parte è vera.)

Esiste una distorsione limitata dalla banda, per simulare (nel dominio digitale) gli effetti della distorsione (nel dominio analogico) prima della limitazione della banda e del campionamento? Se così, come fai a farlo? Se cerco "distorsione a banda larga" trovo alcuni riferimenti ai polinomi di Chebyshev, ma non so come usarli o se funzionano solo per le onde sinusoidali o cosa:

Questo strumento non tenta di generare distorsioni limitate dalla banda. Coloro che sono interessati alla distorsione limitata dalla banda dovrebbero studiare l'uso dei polinomi di Chebyshev per generare l'effetto. Distorsione Tangente Iperbolica

 

"Polinomio di Chebyshev" - le funzioni di modellatura con l'importante proprietà di essere intrinsecamente limitate dalla banda, cioè non introducono armoniche spettrali spurie a causa della sovrapposizione ecc. Wave Shaper


Non sono sicuro di quello che stai chiedendo. Se esegui un'operazione che causa la generazione di contenuti in frequenza al di fuori della regione di Nyquist in cui stai operando, vedrai un aliasing, indipendentemente da come hai generato tali contenuti. Che tipo di distorsione analogica stai cercando di simulare? Un approccio potrebbe essere quello di campionare prima il segnale a una frequenza di campionamento sufficientemente elevata, quindi utilizzare la regione di Nyquist più ampia per eseguire l'elaborazione del segnale. È quindi possibile ricampionare indietro alla frequenza originale al termine.
Jason R,

@JasonR: Sì, per generare onde quadrate, puoi fare un metodo veramente limitato in termini di banda come la sintesi additiva, oppure puoi approssimare eseguendo prima il ricampionamento, generando l'onda quadra in modo ingenuo e poi il downsampling (ma ci sarà ancora alcuni aliasing, solo a un livello inferiore). Allo stesso modo, puoi approssimare la distorsione come hai detto prima eseguendo il ricampionamento, ma c'è un modo per generarla direttamente, con alias zero, analogo al metodo di sintesi additiva per la generazione di onde quadrate?
endolith,

@JasonR: Sto chiedendo una distorsione non lineare, in generale, ma qualcosa come emulare i circuiti di distorsione di un amplificatore per chitarra analogica sarebbe un buon esempio. Se ho capito bene, facendo ingenuamente nel dominio digitale produrrebbe prodotti di distorsione che non esistono quando distorto nel dominio analogico, alcune delle quali potrebbero essere chiaramente udibile a frequenze più basse rispetto alla fondamentale, ecc
endolith

2
I polinomi di @endolith Chebyshev potrebbero essere quello che vuoi.
datageist

@datageist: puoi scrivere una risposta su come usare i polinomi di Chebyshev? Anche breve.
endolith

Risposte:


5

L'applicazione di una funzione non lineare introdurrà sempre armoniche e la miscelazione di funzioni non lineari con versioni campionate di segnali continui aggiunge la grinza che si nota sopra (dove le armoniche ad alta frequenza sono aliasate alle basse frequenze).

Posso pensare ad alcuni modi per procedere:

  1. È possibile utilizzare un fattore di sovracampionamento sufficientemente elevato da catturare le armoniche extra (fino a una precisione arbitraria, ad esempio il rumore di fondo),
  2. È possibile utilizzare una funzione di ritaglio "più morbida" (vedere, ad esempio, qui ) che presenta armoniche che si estinguono prima dell'hard clipper. Questo è più facile da modellare, ma introduce la propria distorsione alle basse frequenze.
  3. Basandoti sull'approccio che hai suggerito sopra, interpola il tuo segnale campionato (ad esempio usando un interpolatore di Lagrange o Chebyshev) per costruire un modello a tempo continuo. Quindi, applica l'hard clipper e passa-basso in un dominio di tempo continuo simulato. Campiona il risultato.

È possibile combinare (1) e (2). Il terzo approccio è complesso, ma offre il miglior controllo sulla quantità di distorsione da ammettere e probabilmente ridimensionerà in base a requisiti di fedeltà molto elevati.

f(x)

f(x)=n=0[f(n)(0)n!xn]

f(x)x=g(t)g(t)xng(t)nnnnvolte quella del tuo segnale. Per completare il quadro, è necessario capire l'ampiezza associata a ciascun termine e decidere quanti termini nella somma sono rilevanti.

(Con una piccola riflessione, potresti anche essere in grado di utilizzare questo modulo direttamente per approssimare la non linearità filtrata. Ciò richiederebbe una buona rappresentazione in serie per il clipper.)


Per chiarire, # 3 non è solo il sovracampionamento con l'interpolazione, sta trovando i parametri di un polinomio di Chebyshev continuo che si adatta ai punti campionati e quindi lavorando con quei parametri e un modello del polinomio?
endolith

1
Sto immaginando una sequenza di interpolatori polinomiali che sono ciascuno attivo su un breve intervallo di campioni. Quindi, quando arriva un lotto di nuovi campioni, costruiresti un interpolatore che è attivo solo in un intervallo definito. L'approssimazione a tempo continuo del segnale campionato è costituita da questi polinomi. (Sto pensando a Lagrange, ma Probabilmente Chebyshev è la stessa cosa. Non ricordo se gli interpolatori di Chebyshev corrispondano esattamente ai punti campione. In caso contrario, otterresti discontinuità quando passi da un interpolatore all'altro.)
Graeme,

4

Alcuni approcci alla distorsione non lineare priva di alias (in ordine crescente di difficoltà):

  1. fs2NffN+1

  2. N2N

  3. f:RRf:RNRMNM>N

  4. Vincola il design algebrico : nell'articolo precedente, hai visto che la distorsione non lineare antialias porta a filtri non lineari. Naturalmente, non tutti i filtri non lineari sono privi di alias, ma alcuni potrebbero esserlo. Quindi la domanda ovvia è che un criterio renda tale filtro rigorosamente privo di alias e come progettarlo. A quanto pare, un'affermazione equivalente all'essere privi di aliasing è che il filtro non lineare commuta con traduzioni di sottocampioni. Quindi devi assicurarti che non faccia differenza se prima traduci e poi filtri o prima filtri e poi traduci. Questa condizione comporta vincoli di progettazione molto rigidiper i filtri non lineari, ma dipende da come realizzi la traduzione del segnale. Ad esempio, la traduzione ideale richiederebbe infiniti coefficienti per il filtro non lineare. Quindi devi approssimare la traduzione del segnale in ordine finito per ottenere un filtro non lineare finito. Scala alias-freeness con l'approssimazione che usi, ma hai un ottimo controllo su di esso. Dopo aver studiato la matematica di questo approccio, puoi progettare qualsiasi funzione di trasferimento non lineare (non solo fluida) come un modello digitale quasi ideale sotto forma di filtro non lineare. Non posso proprio disegnare i dettagli qui, ma forse puoi trovare qualche ispirazione da questa descrizione.


y[t]=x[t]k

Oppure, un'altra domanda (forse correlata): se segui l'approccio finito locale che hai menzionato, otterrai una mappa da serie di potenze troncate a serie di potenze troncate. Quando poi provi a passare in basso le serie di potenze troncate, che normalmente sarebbero contorte con una funzione sinc, ottieni qualche semplice espressione per il risultato? Il risultato può essere espresso di nuovo come una serie di potenze troncate e, in tal caso, che aspetto ha?
Mike Battaglia,

1
@MikeBattaglia, forse puoi creare una nuova domanda in modo che io possa dare una risposta approfondita lì. Per rispondere alla tua seconda domanda, non usi un kernel SINC ma nel caso più semplice un kernel boxcar. I kernel di ordine superiore funzionano, ma per ottenere un risultato analitico devi limitarti a determinati kernel.
Jazzmaniac,

Grazie - ho
Mike Battaglia,

2

Tn(x)=cos(narccos(x)).

Tn(x)

(1)Tn(cos(kx))=cos(narccos(cos(kx)))=cos(nkx).

I polinomi stessi possono essere facilmente generati utilizzando la seguente relazione di ricorrenza :

T0(x)=1T1(x)=xTn(x)=2xTn1(x)Tn2(x).

Ecco i primi:

T0(x)=1T1(x)=xT2(x)=2x(x1)=2x21T3(x)=2x(2x21)x=4x33xT4(x)=2x(4x33x)(2x21)=8x48x2+1

(1)T2cos(x)

2cos2(x)1=2(eix+eix2)21=24(ei2x+2eixeix+ei2x)1=(ei2x+ei2x2)+221=cos(2x).

Computando una serie di Chebyshev

f(x)=n=0anTn(x)

nf(x)


Grazie! Per le forme d'onda diverse da una singola sinusoide, cosa succede? Intermodulazione bandlimited o no?
endolith

1
xn

1

@ robert-bristow-johnson lo spiega molto chiaramente su comp.dsp :

devi sovrastampare in misura limitata. se rappresenti la non linearità (senza memoria, presumo) come un polinomio di ordine finito (che si avvicina a qualunque curva tu stia cercando di implementare), qualunque sia l'ordine del polinomio è lo stesso fattore di sovracampionamento necessario e non si verificherà alcun alias. quindi filtro passa-basso (a quella frequenza sovracampionata) per sbarazzarsi di tutti i componenti di frequenza più alti del tuo Nyquist originale, quindi sottocampionare e non avrai aliasing.

In altre parole, se la tua non linearità è un polinomio, la frequenza più alta che può essere prodotta dalla distorsione sarà la frequenza più alta nel segnale moltiplicata per l'ordine N del polinomio. (La non linearità polinomiale sta moltiplicando il segnale per se stessa N volte, quindi il suo spettro viene contorto con se stesso e si diffonde per lo stesso rapporto.)

Quindi conosci la frequenza massima (sia Nyquist o qualche limite inferiore per la tua applicazione) e conosci l'ordine del polinomio, quindi puoi sovrastampare abbastanza da prevenire l'aliasing, fare la distorsione, quindi filtro passa-basso e downsample.

In effetti, puoi ridurre la frequenza di sovracampionamento lasciando accadere alcuni alias, purché sia ​​contenuto nella banda che verrà rimossa prima del downsampling:

un altro piccolo trucco è che non è necessario preoccuparsi dell'aliasing che si ripiega sull'area che verrà estratta da LPF. quindi un polinomio del 5 ° ordine deve solo avere un rapporto di sovracampionamento di 3. quelle prime 2 armoniche potrebbero alias, ma non torneranno nella banda base. quando si esegue il downsampling, si filtrano quelle armoniche con alias. quindi penso che sia la regola dura e veloce

rapporto di sovracampionamento = (ordine polinomiale + 1) / 2


2
NN+12fs

@robert Ho visto e aggiunto quella parte mentre stavi commentando. Se riscrivi questa come tua risposta, la cancellerò e accetterò la tua
endolith

1
Oh caro. per vestire una bella risposta richiede lavoro.
robert bristow-johnson,

@ robertbristow-johnson Bene, gli internet point immaginari sono tuoi se li vuoi
endolith
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.