基于FIR滤波器的噪声整形技术

发布于 2023-03-03  294 次阅读


AI 摘要

应该小于int vert N(e^{jomega})vert^2 domega,即抑制了信号带内的噪声。 实验步骤: 1. 设计一个FIR滤波器,用于抑制量化噪声,滤波器的长度、截止频率和阶数根据实际需求设置。可以采用窗函数法、最小二乘法等方法设计FIR滤波器。 2. 将测试信号输入到FIR滤波器中进行滤波处理。 3. 将滤波后的信号通过DAC转换为模拟信号输出,与原始信号进行比较,观察是否减少了信号带内的噪声。 需要注意的是,在设计滤波器时,应该根据信号的采样频率和信号带宽进行合理的选择,防止滤波器过于锐利,导致失真和泄漏问题。另外,FIR滤波器通常具有线性相位,因此不会引入额外的相位延迟。 总之,基于FIR滤波器的噪声整形技术是一种很常用的数字信号处理方法,可以有效减少量化噪声对信号质量的影响。

实验原理

基于FIR噪声整形技术

在本次仿真实验中,噪声整形技术是为了减少数字信号在进行DAC后引入的量化误差,如图1.1(b)所示,在进行量化后,在信号频带内出现了量化导致的频率分量,而这个频率分量是较为宽的。我们可以设计一个FIR滤波器,使得其结构入图1.1(a)所示,这也可以降低量化噪声在有效信号频带内的大小,而增大其在信号带外的分量。

其中,若以N(e^{j\omega})表示量化引入的噪声,X(e^{j\omega})为未量化的信号,那么输出Y(e^{j\omega})可以表示为:

Y(e^{j\omega})=X(e^{j\omega})+(1+H(e^{j\omega}))N(e^{j\omega})

我们观察量化噪声的频谱,如图1.2所示,可以发现其在全频带上均匀分布,也就是说其对信号带内和带外均有影响。通过FIR滤波器H(e^{j\omega})可以抑制带内噪声,从而提高信号的可靠性。

为了抑制通带内的量化噪声,噪声在经过了FIR滤波器后的功率应小于原本的功率,即:

\int \vert 1+H(e^{j\omega })\vert^2 N(e^{j\omega }) d\omega<\int N(e^{j\omega }) d\omega

假设FIR滤波器可以表示为:

H(z)=h_1 z^{-1} + h_2 z^{-2} + \cdots + h_M z^{-M}

上述问题可以转化为优化问题:

\min_{h_1, h_2,\ldots,h_M} \int \vert 1+H(e^{j\omega })\vert^2 d\omega

若设

A= \begin{bmatrix}
e^{-j\omega_1}&e^{-j2\omega_1}&\ldots&e^{-jM\omega_1} \cr e^{-j\omega_2}&e^{-j2\omega_2}&\ldots&e^{-jM\omega_2} \cr \vdots&\vdots&\ddots&\vdots \cr e^{-j\omega_P}&e^{-j2\omega_P}&\ldots&e^{-jM\omega_P} \end{bmatrix}

上述优化问题的解就是:

{\bf h_{{\rm opt}}} = -\begin{bmatrix}A_r \cr A_i\end{bmatrix}^\dagger \begin{bmatrix}\bf 1 \cr \bf 0\end{bmatrix}

上述方案只对信号带内进行约束,可能会导致信号带内的噪声仍然较大。如果引入一个加权矩阵W = diag(W_1,W_2,\ldots,W_P, W_{P+1},W_{P+2}, \ldots, W_{P+Q}),上述优化问题变为:

\min_{{\bf h}} \Vert W({\bf 1}+A{\bf h})\Vert_2^2

假设带内分量为W_1,W_2,\ldots,W_P,表示为W_S;带外分量为W_{P+1},\ldots,W_{P+Q},表示为W_I。为了抑制带内噪声,需要有W_S \gg W_I。此时,有:

A= \begin{bmatrix} e^{-j\omega_1}&e^{-j2\omega_1}&\ldots&e^{-jM\omega_1} \cr e^{-j\omega_2}&e^{-j2\omega_2}&\ldots&e^{-jM\omega_2} \cr \vdots&\vdots&\ddots&\vdots \cr e^{-j\omega_{P+Q}}&e^{-j2\omega_{P+Q}}&\ldots&e^{-jM\omega_{P+Q}}\end{bmatrix}

上述优化问题最终可以写作:

{\bf h_{{\rm opt}}} = -\begin{bmatrix}WA_r \cr WA_i\end{bmatrix}^\dagger \begin{bmatrix}\bf W1 \cr \bf 0\end{bmatrix}

根据上述方法,取W_S=24W_I=1,设计一个七阶FIR滤波器,其单边通带和阻带宽度均为\frac{\pi}{2},通过上述方法得到的滤波器幅频响应如图1.3所示:

若将其与量化噪声相乘,可以得到滤波后的量化噪声频谱如图1.4所示,可以看到,在经过了噪声整形FIR滤波器后,通带内的噪声分量有效减少了,而通带外的噪声分量则增多了,这也符合噪声整形FIR滤波器的幅频响应特点。

DMT原理

DMT信号是一种实数多载波调制信号,分别采用快速傅里叶逆变换(IFFT)和快速傅里叶变换(FFT)进行调制和解调。

首先,高速伪随机二进制序列(PRBS)通过串并转换后分解成多个并行低速信号,同时根据系统的频率响应调节每个子载波上的比特数。然后,对各个子载波进行星座映射,常用的星座映射有PAM、QAM、PSK 等。为了得到实数信号,星座映射之后进行厄米共轭对称运算,如式:

S_{2N-n}=S^*_n,S_0=S_N=0

将厄米共轭对称运算之后的数据,直接进行2N点的IFFT。 IFFT 之后得到了子载波相互正交的实数 DMT 信号。为了缓解传输过程中信道 CD 带来的 符号之间的串扰(ISI)和子载波间的干扰(ICI),同时保证子载波之间的相互正交,可以在 IFFT 之后加入循环前缀(CP)。加入 CP 会增加系统的开销,以牺牲系统带宽为代价提升性能,因此,在实际的应用中需要权衡比较传输容量和传输性能。并串转换之后就得到了基带 DMT 信号,最后在通过数模转换将数字信号转换成模拟信号后进行传输。接收端的操作是发送端的逆过程,经过信道传输后,首先将接收到的信号进行模数转换将模拟信号转化为数字信号,然后进行串并转换将串联的数据流转换为并联的数据块,接着再去除CP,进行2N点的FFT操作得到频域信号,然后进行星座解映射,最后并串转换后进行误码率(BER)的计算。流程图如图1.5所示:

VPI、MATLAB联合仿真

通过MATLAB生成随机序列,进行DMT调制后,使用FIR滤波器进行量化噪声整形,得到最终在信道中传输的序列。

而光纤信道使用的是VPI软件进行仿真测试,VPI使用Co-Simulation将MATLAB计算出来的输出序列传输到光纤中,再将经过光纤传输后的信号保存成MATLAB文件以供后续计算误码率。VPI中的仿真结构如图1.6所示:

在VPI中,DSM调制器的输入光信号平均功率为10^{-3}W,输入数据来自MATLAB的输出文件。直流偏置使用-1.25V,经过光纤传输后,使用灵敏度为1A/W的光电二极管进行接收。并且经过传输后的信号使用光功率计进行功率测量,再将输出存储成MATLAB格式。

仿真测试时,首先在MATLAB中设置断点至存储数据后,读取数据前。运行MATLAB程序生成当此仿真的随机数据,并且进行DMT调制与FIR滤波器噪声整形。将此结果保存至.txt文件,随后运行VPI软件,等待运行结束后,继续运行MATLAB程序,进行DMT解调与误码率的计算。

在仿真测试中,使用改变光纤长度的方式调整接收光功率(ROP),其他参数均不做改变以保证仿真结果的可靠性。

算法实现

FIR滤波器的噪声整形

首先需要进行数字量化,根据要求,我们使用4/5-bit的DAC,即占五个二进制位,小数位占四位。send为DMT调制后的信号,将其重复三次以模拟DAC的采样频率。量化后与原始数据相减得到量化噪声,随后根据1.1中的算法,得到FIR滤波器的系数h4,再使用MATLAB的函数freqz,得到滤波器的幅频响应。

    send = mapminmax(send);
    send = repelem(send, 3);
    q_type = [5,4];
    q = quantizer('fixed','round','saturate',q_type); 
    data_q = quantize(q,send); % 5bit数字量化
    noise = data_q - send; %得到量化噪声
    No = fft(noise); %得到量化噪声的频谱
    w = 0:1:20;
    D0 = exp(-1i*1/21*pi * w);
    for n = 1:7 %滤波器阶数为7
        E(:,n) = D0.^n;
    end
    w(1:12) = 24; %计算FIR滤波器系数
    w(13:21) = 1;
    W = diag(w);
    h1 = W * real(E);
    h2 = W * imag(E);
    h3 = -pinv([h1; h2])*[w.';zeros(21,1)];
    h4 = h3(:,1); %最终的FIR滤波器系数
    [h,w] = freqz([1 h4.'],1,length(No));

DMT调制解调

调制部分首先定义数据长度和调制阶数等信息,此处需要注意为了保证最后传输的数据长度满足VPI仿真的长度,需要对数据长度进行相应调整。
DMT调制解调相关原理如1.2,最终调制后得到的输出序列为send。调制部分代码如下:

N = 16;                                  % 循环前缀长度
M = 16;                                 % 调制阶数
L_data = 262144 * 2 - 32;                            % 数据长度
L_symbol = L_data/log2(M);              % 符号长度
data = round(rand(1,L_data));           % 原始数据
EbN0_dB = 12;                         % Eb/N0 dB形式
EbN0 = 10.^(EbN0_dB/10);                % 每比特能量/噪声
EsN0 = log2(M) * EbN0;                  % 每符号能量/噪声
error = zeros(1,length(EbN0_dB));       % 预置错误符号个数
detect = zeros(1,L_symbol);         % 预置检测信号
ser = zeros(1,length(EbN0_dB));         % 预置仿真误符号率
send_set = [-3+3j,-1+3j,1+3j,3+3j,...
            -3+1j,-1+1j,1+1j,3+1j,...
            -3-1j,-1-1j,1-1j,3-1j,...
            -3-3j,-1-3j,1-3j,3-3j];     % 发射端星座点


in = input216QAM(data, L_symbol);
in = in.';
S = mirror(in);                       % 厄米共轭对称
F = ifft(S);                            % IFFT
C = cp(F, N);                           % 插入循环前缀
send = C.';
\end{lstlisting}
\par
解调部分代码如下:
\begin{lstlisting}
    load('D:\VPI_Rx.mat');
    receive = Rx.band.E;
    D = decyclicpad(receive.',N);  % 去除循环前缀
    K = fft(D);                 %FFT

    T = K(1:L_symbol,:);          %取前半序列
    TT = sort(real(T));
    T = T / (TT(end - 3)/3);
    [detect, error] = de16QAM(T, in, L_symbol, M);
    20*log10(error / L_data)

解调时,为了保证信号的幅度能够归一化成16QAM的相应形式,对最终的数据进行了除最大值的处理,以便于解调。各个函数的细节部分不在此展开。

仿真测试

接收光功率测试

为了确定调整接受光功率的方案,首先测试的是是否可以通过改变光纤长度来改变接收光功率,仿真后结果如图3.1所示:

可以看见接收光功率与光纤长度成线性相关,且拟合得到的直线为2.12851 - 0.0004 x,即光纤长度每增加一米,接收光功率下降0.0004dBmW。所以我们可以使用改变光纤长度的方式,线性地改变接收光功率,下面进行的测试即使用更改光纤长度的方式调整接收光功率。

误码率与接收光功率

通过VPI仿真,分别测试直接使用量化不采用FIR滤波器的误码率与使用了噪声整形技术得到的误码率,结果如图3.2所示:

可以看到,当使用了FIR滤波器进行噪声整形后,误码率显著下降了,如图1.3所示,当W_S=24,W_I=1时,通带内的量化噪声衰减约为-12dB,有效降低了量化带来的噪声影响,尤其是在大功率的情况下,能够实现无差错传输,而如果使用普通的量化方案,在高接收光功率的情况下仍然不可避免地存在一些错误。

加权矩阵对FIR滤波器噪声整形的影响

在上面的讨论中,噪声整形时使用的加权矩阵为W_S=24,W_I=1,若取W_S=2,W_I=1,不满足W_S \gg W_I,得到的幅频响应曲线如图3.3所示,可以看见其通带内的衰减较小,且起伏较大。

若取W_S=50,W_I=1,得到的幅频相应如图3.4所示,可以看到,其通带内的衰减更大了,达到了-15dB,与之相对应的,信号带外的噪声分量更大了。

那么是否增大W_S就可以得到性能更好的幅频相应输出呢,如果将加权系数设为W_S=500,W_I=1,幅频相应如图3.5所示。可以看到,此时的信号带内衰减并没有继续增加,相反起伏更大了,这就意味着不能通过无限地增加W_S来获得更好的性能。

在上述讨论中,FIR滤波器的阶数均为七阶,如果增大滤波器阶数,得到的幅频响应如图3.6所示,可以看到其信号带内更加平缓,但是相对地,吉布斯效应也就更加明显。

相反,如果降低FIR滤波器的阶数,如图3.7,得到的幅频响应则不能很好地实现信号带内的噪声抑制。

「雪霁融雾月,冰消凝夜雨」
最后更新于 2023-06-01