MATLAB 低压 PLC(电力线通信)仿真模型
MATLAB 低压 PLC(电力线通信)仿真模型,覆盖Zimmermann–Dostert 多径信道 + Middleton Class A 脉冲噪声 + OFDM 基带,是论文/课程设计/原型验证最常用的组合。
一、PLC 建模的三层结构(先对齐)
电力线不是普通 AWGN 信道,恶劣得多,建模要分三层:
| 层 | 核心问题 | 主流模型 |
|---|---|---|
| 信道 | 多分支 → 多径;衰减随 f、距离非线性 | Zimmermann–Dostert 多径模型 |
| 噪声 | 5 类:有色背景 / 窄带 / 同步周期脉冲 / 异步周期脉冲 / 异步脉冲 | 前 3 类 → AWGN+有色;后 2 类 → Middleton Class A |
| 物理层 | 多径+深衰落 → 子载波正交性受破坏 | OFDM(G3-PLC / IEEE 1901 / HomePlug) |
二、Zimmermann 多径信道
理论公式(IEEE TCOM 2002 原文)
H(f)=∑i=1Ngi e−(α0+α1fk)di e−j2πfτiH(f)=\sum_{i=1}^{N} g_i\, e^{-(\alpha_0+\alpha_1 f^k)d_i}\, e^{-j2\pi f\tau_i}H(f)=i=1∑Ngie−(α0+α1fk)die−j2πfτi
- (gig_igi):第 i 条路径的复加权(阻抗失配反射)
- (did_idi):路径长度
- (τi=diεr/c\tau_i = d_i\sqrt{\varepsilon_r}/cτi=diεr/c):时延
- (α(f)=α0+α1fk\alpha(f)=\alpha_0+\alpha_1 f^kα(f)=α0+α1fk):衰减随频率的经验式(k≈0.8~1)
MATLAB 实现:plc_channel.m
%% plc_channel.m — Zimmermann-Dostert 多径 PLC 信道function[H,h,f]=plc_channel(Nfft,fs,fc_low,fc_high)% Nfft: FFT 点数, fs: 采样率% fc_low/fc_high: 频段下限/上限 (Hz),低压 PLC 典型 2-30 MHz% ---- 多径参数(低压家庭场景典型值,Zimmermann 论文)----Npath=6;d=[5085120180250350]*1e-3;% 路径长度 (km→m 已换算, 这里直接 m)g=[0.70.450.30.20.150.1];% 复加权幅值(简化取实)eps_r=2.2;% PVC 绝缘等效介电c=3e8;tau=d.*sqrt(eps_r)/c;% 时延 (s)% 衰减参数(低压 2-30MHz 拟合)alpha0=0.001;% Np/malpha1=0.8e-8;% Np/m/MHz^kk=0.9;% ---- 频点 ----f=(0:Nfft-1)/Nfft*fs;H=ones(1,Nfft);fori=1:Npath alpha_f=alpha0+alpha1*(f(:).^k);% α(f)H=H+g(i).*exp(-alpha_f*d(i))....*exp(-1j*2*pi*f(:)*tau(i));end% 只保留 PLC 工作频段H(f<fc_low|f>fc_high)=1e-6;% ---- 转时域冲激响应(线性卷积用)----H_full=[H,conj(H(end-1:-1:2))];% 补共轭做实冲激h=real(ifft(H_full));h=h(1:min(256,Nfft));% 截断end如果想做中压/入户不同场景,换
d,g,α0,α1就行,Zimmermann 原文给了 3 组参考(Type 1/2/3 信道)。
三、噪声模型(两类叠加)
1、背景噪声 → AWGN(前五类里前三种合并)
%% 背景噪声(简化 AWGN,色度可加 AR 滤波)functionn_bg=plc_background_noise(N,snr_db,signal_power)n_bg=sqrt(signal_power/(10^(snr_db/10))/2)...*(randn(N,1)+1j*randn(N,1));end2、脉冲噪声 → Middleton Class A
Class A 是泊松-高斯混合:
p(n)=∑m=0∞e−AAmm! 12πσm2exp (−n22σm2),σm2=m/A+Γ1+Γσ2p(n)=\sum_{m=0}^{\infty} \frac{e^{-A}A^m}{m!}\, \frac{1}{\sqrt{2\pi\sigma_m^2}}\exp\!\left(-\frac{n^2}{2\sigma_m^2}\right),\quad \sigma_m^2=\frac{m/A+\Gamma}{1+\Gamma}\sigma^2p(n)=m=0∑∞m!e−AAm2πσm21exp(−2σm2n2),σm2=1+Γm/A+Γσ2
%% plc_impulse_classA.m — Middleton Class A 脉冲噪声functionn_imp=plc_impulse_classA(N,A,Gamma,sigma2)% N: 样本数, A: 脉冲指数(0.001~1), Gamma: 高斯/脉冲功率比(0.01~1)% sigma2: 总噪声功率n_imp=zeros(N,1);M_max=20;% 泊松截断fori=1:N% 抽样 m ~ Poisson(A)m=rand()<(poisscdf(0:A,A));% 简化:直接抽 0:M_maxm=min(find(rand()<=cumsum(exp(-A)*A.^(0:M_max)./factorial(0:M_max)),1)-1,M_max);sigma_m2=sigma2*(m/A+Gamma)/(1+Gamma);n_imp(i)=randn()*sqrt(sigma_m2);endend典型初值:A=0.1, Γ=0.1(稀疏强脉冲);A→∞退化为高斯。
四、OFDM-PLC 基带主程序
低压 PLC 典型:NFFT=64, CP=16, 子载波 2-30 MHz,这里简化到基带等效。
%% main_plc_ofdm.mclear;clc;close all;%% ========== 参数 ==========Nfft=64;Ncp=16;Nsym=100;% OFDM 符号数M=4;% QPSKfc_low=2e6;fc_high=30e6;fs=40e6;% 过采样(基带等效可设 40 MHz)%% ========== PLC 信道 ==========[H,h,f]=plc_channel(Nfft,fs,fc_low,fc_high);figure('Color','white')plot(f/1e6,20*log10(abs(H)))xlabel('Frequency (MHz)');ylabel('|H(f)| (dB)')title('PLC Channel Frequency Response (Zimmermann)')grid on%% ========== 发射 ==========data=randi([0M-1],Nsym*(Nfft-2),1);% 去 DC/两端tx_sym=qammod(data,M,'UnitAveragePower',true);% 串 OFDM 帧tx_frame=[];fori=1:Nsym sym_block=[0;tx_sym((i-1)*(Nfft-2)+1:i*(Nfft-2));0];% DC 置零ofdm_t=ifft(sym_block,Nfft);ofdm_cp=[ofdm_t(end-Ncp+1:end);ofdm_t];tx_frame=[tx_frame;ofdm_cp];end%% ========== 过信道 ==========rx_frame=conv(tx_frame,h,'same');%% ========== 噪声 ==========EbN0_dB=0:2:20;ber=zeros(size(EbN0_dB));fors=1:length(EbN0_dB)% 背景 AWGNsnr_lin=10^(EbN0_dB(s)/10)*log2(M)*(Nfft/(Nfft+Ncp));rx_sig=awgn(rx_frame,10*log10(snr_lin),'measured');% 叠加 Class A 脉冲(稀疏注入)A_par=0.1;Gamma_par=0.1;sigma2=var(rx_sig-rx_frame);n_imp=plc_impulse_classA(length(rx_sig),A_par,Gamma_par,sigma2*10);rx_sig=rx_sig+0.5*n_imp;% 脉冲占比可调% ========== 接收 ==========rx_data=[];fori=1:Nsym blk=rx_sig((i-1)*(Nfft+Ncp)+Ncp+1:i*(Nfft+Ncp));sym_rx=fft(blk,Nfft);rx_data=[rx_data;sym_rx(2:Nfft-1)];% 去 DCendrx_bits=qamdemod(rx_data,M,'UnitAveragePower',true);ber(s)=sum(rx_bits~=data)/length(data);end%% ========== BER 曲线 ==========figure('Color','white')semilogy(EbN0_dB,ber,'bo-','LineWidth',1.5)xlabel('E_b/N_0 (dB)');ylabel('BER')grid ontitle('PLC-OFDM BER (Zimmermann + Class A Impulsive Noise)')跑出来能看到:脉冲噪声一加,BER 尾巴会上翘——这就是 PLC 比无线难的地方,也是为什么 G3-PLC 要加鲁棒解调 + 重传。
参考代码 电力线通信模型www.youwenfan.com/contentcsw/82512.html
五、耦合电路
PLC modem 不能直连 220V,要工频隔离 + 阻抗匹配(低压 PLC 特性阻抗 2~10 Ω,波动 1000×):
%% plc_coupling_RLC.m — 简化耦合等效% 典型:串联电容隔直 + 并联电感做工频陷波 + 匹配电阻% C ~ 100nF(隔 50Hz),L ~ 1mH(陷波 50Hz),R_match = 5Ωf_sw=10e6;C=100e-9;L=1e-6;R=5;Z_couple=R+1j*2*pi*f_sw*L+1./(1j*2*pi*f_sw*C);% 实际要扫频看 2-30MHz 内平坦度特性阻抗随位置/频率跳 0.1 Ω → 100 Ω,所以耦合器+匹配网络是 PLC 硬件最难的一块,仿真里一般简化为发送/接收端各乘一个复增益。
六、扩展方向
| 目标 | 建议 |
|---|---|
| 论文复现 G3-PLC / IEEE 1901 | 把 OFDM 参数改成Nfft=256/512, CP=32/64, 子载波 2-28MHz,加 RS+卷积码 |
| 窄带 NB-PLC(EN 50065, <500 kHz) | 把fc_low=10kHz, fc_high=490kHz,衰减 α1 更大,多径时延到 ms 级 |
| 脉冲抑制算法 | 限幅器 / Myriad 滤波 / Middleton ML 接收机(UT Austin 工具箱有现成) |
| 时变信道 | Zimmermann 静态 → 加 Markov 切换(Zimmermann 原论文用 Markov 模脉冲出现) |
| 接硬件 | 耦合器 + AFE → 用dsp.SpectrumAnalyzer看实际 PSD |
