Contenu principal

dsp.DCBlocker

Bloquer le composant DC (offset) du signal d’entrée

Description

Le dsp.DCBlocker System object™ supprime l’offset DC de chaque canal (colonne) du signal d’entrée. L’opération s’exécute en continu afin d’estimer et de supprimer en permanence l’offset DC.

Pour bloquer le composant DC du signal d’entrée :

  1. Créez l’objet dsp.DCBlocker et définissez ses propriétés.

  2. Appelez l’objet avec des arguments, comme s’il s’agissait d’une fonction.

Pour en savoir plus sur le fonctionnement des System objects, veuillez consulter Que sont les System objects ?

L’objet supporte la génération de code C/C++ et la génération de code SIMD sous certaines conditions. Pour plus d’informations, veuillez consulter Génération de code.

Création

Description

dcblker = dsp.DCBlocker crée un bloqueur DC System object, dcblker, afin de bloquer le composant DC de chaque canal (colonne) du signal d’entrée.

exemple

dcblker = dsp.DCBlocker(PropertyName=Value) définit des propriétés à l’aide d’un ou de plusieurs arguments nom-valeur. Par exemple, pour définir la bande passante normalisée d’un filtre passe-bas IIR ou CIC sur 0,004, configurez NormalizedBandwidth sur 0,004.

exemple

Propriétés

développer tout

Sauf indication contraire, les propriétés ne sont pas ajustables. Autrement dit, vous ne pouvez pas modifier leurs valeurs après avoir appelé l’objet. Les objets sont verrouillés lorsque vous les appelez tandis que la fonction release les déverrouille.

Si une propriété est ajustable, vous pouvez modifier à tout moment sa valeur.

Pour plus d’informations sur la modification des valeurs de propriétés, veuillez consulter Design de systèmes dans MATLAB au moyen de System objects.

Algorithme d’estimation de l’offset DC, défini comme suit :

  • "IIR" : l’objet utilise une estimation récursive sur la base d’un filtre elliptique passe-bas étroit. La propriété Order définit l’ordre du filtre, tandis que la propriété NormalizedBandwidth définit sa bande passante. En règle générale, cet algorithme utilise moins de mémoire que l’algorithme FIR et est plus efficace.

  • "FIR" : l’objet utilise une estimation non récursive, sur la base d’une moyenne mobile d’un nombre fini d’échantillons d’entrée passés. La propriété Length définit le nombre d’échantillons. Le filtre FIR présente une réponse en phase linéaire et n’entraîne aucune distorsion de phase du signal. Le filtre IIR nécessite moins de mémoire et est plus efficace à implémenter.

  • "CIC" : l’objet utilise un filtre de décimation CIC, avec un facteur de décimation de 1, dont le retard différentiel est calculé à l’aide de la propriété NormalizedBandwidth. Il utilise deux sections pour faire en sorte que l’atténuation du premier lobe secondaire soit inférieure d’au moins 25 dB à celle du lobe principal du filtre. Cet algorithme nécessite des entrées en virgule fixe et peut être utilisé pour la génération de code HDL.

  • "Subtract mean" : l’objet calcule la moyenne des colonnes de la matrice d’entrée, puis soustrait la moyenne de la matrice d’entrée. Cette méthode ne conserve pas l’état entre les entrées.

Vous pouvez visualiser les réponses IIR, FIR et CIC à l’aide de la fonction fvtool.

Bande passante normalisée du filtre IIR ou CIC, spécifiée sous la forme d’un scalaire réel supérieur à 0 ou inférieur à 1. La bande passante normalisée sert à estimer le composant DC du signal d’entrée.

Dépendances

Cette propriété s’applique uniquement lorsque vous définissez la propriété Algorithm sur "IIR" ou "CIC".

Ordre du filtre elliptique IIR passe-bas utilisé pour estimer le niveau DC, spécifié sous la forme d’un entier supérieur à 3.

Dépendances

Cette propriété s’applique uniquement lorsque vous définissez la propriété Algorithm sur "IIR".

Nombre d’échantillons d’entrée passés utilisés dans l’algorithme FIR pour estimer la moyenne mobile, spécifié sous la forme d’un entier positif.

Dépendances

Cette propriété s’applique uniquement lorsque vous définissez la propriété Algorithm sur "FIR".

Utilisation

Description

dcblkerOut = dcblker(input) supprime le composant DC de chaque canal (colonne) de l’entrée et renvoie la sortie.

exemple

Arguments en entrée

développer tout

Entrée de données de l’objet bloqueur DC, spécifiée sous la forme d’un vecteur, d’une matrice ou d’un tableau ND.

Types de données : single | double | int8 | int16 | int32 | fi
Support des nombres complexes : Oui

Arguments de sortie

développer tout

Signal dont le composant DC a été supprimé, renvoyé sous la forme d’un vecteur, d’une matrice ou d’un tableau ND. Les dimensions de la sortie correspondent à celles de l’entrée.

Types de données : single | double | int8 | int16 | int32 | fi
Support des nombres complexes : Oui

Fonctions d'objet

Pour utiliser une fonction d’objet, définissez System object en tant que premier argument en entrée. Par exemple, pour libérer les ressources système d’un System object nommé obj, utilisez la syntaxe suivante :

release(obj)

développer tout

freqzFrequency response of discrete-time filter System object
filterAnalyzerAnalyze filters with Filter Analyzer app
impzImpulse response of discrete-time filter System object
infoInformation about filter System object
coeffsReturns the filter System object coefficients in a structure
costEstimate cost of implementing filter System object
grpdelayGroup delay response of discrete-time filter System object
outputDelayDetermine output delay of single-rate or multirate filter
stepRun System object algorithm
releaseRelease resources and allow changes to System object property values and input characteristics
resetReset internal states of System object

Exemples

réduire tout

Supprimez le composant DC d’un signal d’entrée à l’aide des algorithmes d’estimation IIR, FIR et de soustraction de la moyenne.

Créez un signal composé d’un signal sonore de 15 Hz, d’un signal sonore de 25 Hz et d’un offset DC.

t = (0:0.001:100)';
x = sin(30*pi*t) + 0.33*cos(50*pi*t) + 1;

Créez trois objets bloqueurs DC pour les trois algorithmes d’estimation.

dc1 = dsp.DCBlocker(Algorithm="IIR",Order=6);
dc2 = dsp.DCBlocker(Algorithm="FIR",Length=100);
dc3 = dsp.DCBlocker(Algorithm="Subtract mean");

Chaque seconde, passez le signal d’entrée à travers les bloqueurs DC. En implémentant les bloqueurs DC à chaque seconde, vous pouvez observer les différences dans les temps de convergence.

for idx = 1 : 100
    range = (1:1000) + 1000*(idx-1);
    y1 = dc1(x(range));          % IIR estimate
    y2 = dc2(x(range));          % FIR estimate
    y3 = dc3(x(range));          % Subtract mean
end

Tracez les données d’entrée et de sortie des trois bloqueurs DC pour la première seconde, puis indiquez la valeur moyenne de chaque signal. Les valeurs moyennes des trois types d’algorithmes indiquent que les algorithmes FIR et Subtract mean convergent plus rapidement.

plot(t(1:1000),x(1:1000), ...
    t(1:1000),y1, ...
    t(1:1000),y2, ...
    t(1:1000),y3);
xlabel("Time (sec)")
ylabel("Amplitude")
legend(sprintf("Input DC:%.3f",mean(x)), ...
    sprintf("IIR DC:%.3f",mean(y1)), ...
    sprintf("FIR DC:%.3f",mean(y2)), ...
    sprintf("Subtract mean DC:%.3f",mean(y3)));

Figure contains an axes object. The axes object with xlabel Time (sec), ylabel Amplitude contains 4 objects of type line. These objects represent Input DC:1.000, IIR DC:0.011, FIR DC:-0.000, Subtract mean DC:-0.000.

Comparez le spectre d’un signal d’entrée présentant un offset DC avec celui du même signal après application d’un bloqueur DC. Activez le bloqueur DC pour qu’il utilise l’algorithme d’estimation FIR.

Créez un signal d’entrée composé de trois signaux sonores et présentant un offset DC de 1. Définissez la fréquence d’échantillonnage sur 1 kHz et la durée du signal sur 100 secondes.

fs = 1000;
t = (0:1/fs:100)';
x = sin(30*pi*t) + 0.67*sin(40*pi*t) + 0.33*sin(50*pi*t) + 1;

Créez un objet bloqueur DC qui utilise l’algorithme FIR pour estimer l’offset DC.

dcblker = dsp.DCBlocker(Algorithm="FIR",Length=100);

Créez un analyseur de spectre avec des unités de puissance définies sur dBW et une plage de fréquences de [-30 30] afin d’afficher la réponse en fréquence du signal d’entrée. À l’aide de la fonction clone, créez un deuxième analyseur de spectre afin d’afficher la réponse de la sortie. Utilisez ensuite la propriété Title des analyseurs de spectre pour les labelliser.

hsa = spectrumAnalyzer(SampleRate=fs, ...
    Method="welch",...
    AveragingMethod="exponential",...
    SpectrumUnits="dBW",FrequencySpan="start-and-stop-frequencies",...
    StartFrequency=-30,StopFrequency=30,YLimits=[-200 20],...
    Title="Signal Spectrum");

hsb = clone(hsa);
hsb.Title = "Signal Spectrum After DC Blocker";

Passez le signal d’entrée, x, à travers le bloqueur DC pour générer le signal de sortie, y.

y = dcblker(x);

Utilisez le premier analyseur de spectre pour afficher les caractéristiques de fréquence du signal d’entrée. Les signaux sonores à 15, 20 et 25 Hz, ainsi que le composant DC, sont clairement visibles.

hsa(x)

Utilisez le deuxième analyseur de spectre pour afficher les caractéristiques de fréquence du signal de sortie. Le composant DC a été supprimé.

hsb(y)

Algorithmes

développer tout

Le bloqueur DC soustrait le composant DC du signal d’entrée. Vous pouvez estimer le composant DC à l’aide de l’algorithme IIR, FIR, CIC ou de soustraction de la moyenne.

Références

[1] Nezami, M. “Performance Assessment of Baseband Algorithms for Direct Conversion Tactical Software Defined Receivers: I/Q Imbalance Correction, Image Rejection, DC Removal, and Channelization.” MILCOM, 2002.

Capacités étendues

développer tout

Historique des versions

Introduit dans R2014a

développer tout