ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

噪声调幅/调频干扰的MATLAB仿真:模型、代码与评估

2026/9/15 20:22:53 拓冰建站 浏览量
噪声调幅/调频干扰的MATLAB仿真:模型、代码与评估 简介针对电子通信中噪声调幅与噪声调频两类常见干扰这份仿真资源提供了可直接运行的脚本代码。压缩包为RAR格式共包含2个文件均为.m脚本整体大小仅1KB对应noiseAM.m与noiseFM.m分别演示了载波生成、调制、叠加高斯白噪声以及干扰效果分析的主要流程。调幅干扰会使载波幅度产生随机波动调频干扰则导致瞬时频率偏离理想值脚本通过时域波形与频谱分布的可视化直观呈现两类噪声对信号的不同影响。通过调整信噪比参数还可进一步观察解调性能的变化并在此基础上尝试滤波器或均衡器等干扰抑制算法。已有356人学习下载内容简洁精炼适合通信工程相关专业学生快速上手实验也可供科研人员验证算法思想是学习信号干扰仿真与抗干扰技术的实用素材。1. 从 noiseAMFM.rar 说起为什么噪声调幅/调频干扰是仿真链路的起点接手雷达或通信对抗仿真任务时最先要做的事往往不是搭目标回波而是生成一台“干扰机”。标题里的 noiseAMFM.rar 大概率是一份包含噪声调幅AM与噪声调频FM干扰信号的 MATLAB 源码包这类代码在项目里出现的频率极高——因为压制式干扰的基本形态就是这两种。噪声调幅用噪声去调制载波幅度噪声调频用噪声去调制载波频率二者都能在接收机中形成明显的宽带压制效果但带宽形成机理、参数设置和工程代价完全不同。这篇内容就围绕“用 MATLAB 把这两类干扰做出来、做对、用得上”展开覆盖数学模型、可运行代码、干扰效果评估方法以及调参时容易踩的坑。适合正在做电子对抗仿真、通信抗干扰评估或刚接手干扰链路的新人也适合需要把干扰模型从“能跑”改成“能解释”的工程师。2. 噪声调幅与噪声调频的干扰模型与带宽边界2.1 噪声调幅干扰载波项、调制系数与半带宽噪声调幅干扰的时域表达式为s_AM(t) [U0 u_n(t)] * cos(2π * f0 * t φ0)其中 U0 是载波幅度u_n(t) 是零均值的带限高斯噪声f0 是载波频率φ0 是初始相位。干扰的关键参数是调幅系数 m_a σ_u / U0σ_u 是噪声的均方根值。调幅系数直接决定干扰信号是在载波附近“浅调制”还是“深度调制”m_a 大于 1 时会出现过调幅包络会穿过零轴实际发射机难以线性放大仿真中也会让功率谱形状偏离理论值。一般取 0.5 到 0.9 之间比较合理。从频谱上看噪声调幅干扰由两部分组成载波谱线功率集中在 f0 处和一对对称的噪声边带分布在 f0 ± Bn 范围内。这里 Bn 是噪声的最低通滤波带宽边带功率占干扰总功率的比例由 m_a 决定。需要特别注意的是噪声调幅干扰的总功率里有相当一部分被载波占用真正用来”压制“接收机的边带功率有限。因此评估 AM 干扰的效能时不应该用干扰机总功率而要看落在接收机带宽内的边带功率。2.1.1 噪声带宽与有效干扰带宽的关系带限的高斯噪声通过低通滤波器后其功率谱在通带内近似平坦通带外迅速下降。对接收机而言AM 干扰的有效干扰带宽等于 2 * Bn也就是上下两个边带的总宽度。例如用 200 kHz 带宽的噪声去调制一个 2 MHz 载波接收机在 1.8~2.2 MHz 范围内都会感受到干扰抬升。若目标信号的带宽只有 50 kHz那么 AM 干扰的有效利用率并不高大部分干扰功率落在目标带宽之外。这个认知是后续选择干扰样式的核心依据。2.2 噪声调频干扰频偏灵敏度与有效干扰带宽噪声调频干扰的时域表达式为s_FM(t) U0 * cos(2π * f0 * t 2π * K_FM * ∫u_n(τ) dτ)这里 K_FM 是调频灵敏度单位是 Hz/V决定噪声电压每变化 1 V 引起的频率偏移量。u_n(τ) 仍是带限高斯噪声但其带宽由射极跟随器或滤波器决定通常远小于调频偏转范围。调频噪声的瞬时频率为 f(t) f0 K_FM * u_n(t)瞬时频率是随噪声电压变化的因此输出信号的功率谱不是简单地在载波两侧对称复制噪声谱而是取决于噪声幅度分布和调制指数的相互作用。关键结论是当调频指数足够大时即 K_FM * σ_u 远大于噪声调制带宽 Bn有效干扰带宽近似为ΔF_eff ≈ 2 * K_FM * σ_u这是一个非常实用的近似式。它表明 FM 干扰的带宽主要取决于频偏范围而不取决于调制噪声带宽。换句话说即使你只用 10 kHz 带宽的噪声去调制只要增大 K_FM 或 σ_u干扰带宽就能扩展到几 MHz。这和 AM 干扰形成鲜明对比AM 想扩带宽必须提高 BnFM 想扩带宽可以只调频偏。2.2.1 调频指数与均匀频谱的条件要得到平坦的干扰功率谱需要让瞬时频率在带宽范围内快速扫动这就要求噪声的幅度分布能均匀覆盖频偏范围。高斯噪声的幅度集中在均值附近直接调制会产生“中间高、两边低”的频谱形状。工程上常用的做法是用低通滤波器对噪声整形或者在噪声后加非线性变换如削波来提升频谱平坦度。MATLAB 仿真中可以用 erf 函数做非线性映射让高斯噪声更接近均匀分布这一步对生成平坦的 FM 干扰频谱很有效。2.3 AM/FM 干扰样式选型对比与适用场景对比维度噪声调幅干扰噪声调频干扰带宽决定因素调制噪声带宽 Bn频偏常数 K_FM 与噪声幅度 σ_u扩带宽手段增大 Bn受滤波器限制增大 K_FM 或 σ_u功率利用率载波占用大量功率边带功率占比低功率集中在干扰带宽内利用率高频谱平坦度边带形状随噪声谱变化较难平坦大调频指数下接近矩形平坦度更好基带噪声带宽通常取几十 kHz~几 MHz可以很小百 kHz 以下即可对接收机的影响正弦载波加噪声产生色噪声压制宽带均匀压制适合瞄准式干扰选型上没有绝对好坏当目标信号带宽很窄且载频已知时FM 干扰更容易把功率集中在目标附近当需要同时压制多个不同载频的信号时宽带的 AM 干扰或加大多个调频分量更合适。许多工程仿真里会把两种干扰做加权叠加生成复合干扰样式这属于后面的进阶内容。3. 在 MATLAB 中生成带限噪声调幅/调频干扰信号3.1 先造带限高斯噪声滤波器与随机数种子干扰仿真的第一步是生成带限高斯噪声。直接用 randn 产生的噪声是宽带的必须经过低通滤波才能限制在目标带宽 Bn 内。滤波器的选择有两种常见做法IIR 滤波器的计算量小、相位非线性在稳态下不影响干扰仿真FIR 滤波器线性相位、稳定性好但阶数高时计算偏大。这里先用 butter filtfilt 做零相位滤波避免波形前后段出现相位失真。fs 10e6; % 采样率 10 MHz T 1e-3; % 信号时长 1 ms N round(T * fs); % 总采样点数 t (0:N-1) / fs; % 时间轴 rng(2024); % 固定随机数种子保证仿真可复现 n_raw randn(1, N); % 高斯白噪声 Bn 200e3; % 调制噪声带宽 200 kHz wn Bn / (fs/2); % 归一化截止频率 [b, a] butter(4, wn, low); noise_lp filtfilt(b, a, n_raw); % 零相位滤波后的带限噪声这里的butter(4, wn, low)生成 4 阶巴特沃斯低通滤波器4 阶在阻带衰减和计算量之间比较均衡。filtfilt做双向滤波输出没有相位偏移噪声波形在时域上看起来更“干净”。如果改用filter函数波形开头会出现一个瞬态段干扰仿真中通常建议用filtfilt。滤波后要检查噪声的均值和方差带限噪声的功率应满足mean(noise_lp.^2)约等于输入白噪声功率乘以带宽占比当滤波器通带增益为 1 时。如果需要精确控制干扰功率下一步应在调制前对噪声做归一化。3.2 噪声调幅干扰的调制与功率归一化调制部分把带限噪声叠加到载波幅度上。调幅系数的定义为噪声均方根与载波幅度之比因此需要先算出当前噪声的 RMS 值再设置 U0。sigma_u std(noise_lp); % 噪声均方根值 m_a 0.8; % 调幅系数 U0 sigma_u / m_a; % 由调幅系数反推载波幅值 fc 2e6; % 载频 2 MHz carrier cos(2 * pi * fc * t); % 载波 s_am (U0 noise_lp) .* carrier; % 噪声调幅干扰信号 % 归一化到任意给定功率如 1 W s_am s_am / rms(s_am);这里有一个容易忽略的细节用rms(s_am)做功率归一化之后调幅系数和载波幅度的绝对关系会被改变但信号的相对调制深度不变。也就是说归一化不影响干扰的”形状“只影响总功率。在后续叠加到链路里时需要通过信干比 SIR 来设定干扰功率归一化的基准就非常重要。调幅干扰的时域包络应该跟随 noise_lp 的波形缓慢起伏频谱上图谱会看到载波谱线加两侧噪声边带。如果 m_a 取得过大包络会多次穿过零轴此时用包络检波器就能简单解调出噪声干扰的不可预测性变差仿真中需要避开这种过调幅区。3.3 噪声调频干扰的相位累加实现FM 干扰的实现核心是相位积分。调频信号的瞬时频率为 f0 K_FM * noise_lp(t)相位是瞬时频率对时间的积分。在离散时间中这个积分用 cumsum 完成。K_fm 1e6; % 调频灵敏度 1 MHz/V phase_dev 2 * pi * K_fm * cumsum(noise_lp) / fs; s_fm cos(2 * pi * fc * t phase_dev); % 归一化功率 s_fm s_fm / rms(s_fm);cumsum(noise_lp) / fs等价于对噪声做数值积分乘上 2π*K_fm 后得到相位偏移。K_fm 的单位是 Hz/V乘上噪声电压单位为 V得到频率偏移再乘 2π 转成角频率偏移。这个实现方式非常稳定不会出现相位折叠问题也不需要用到 MATLAB 的 FM 调制器工具箱。要注意的是相位累加在数值上会越积越大但 MATLAB 的 double 精度足以支撑毫秒级信号的精确计算。如果信号时长达到秒级建议改用mod(phase_dev, 2*pi)做相位折叠避免极端情况下精度丢失。有效干扰带宽按第 2.2 节的公式计算ΔF_eff ≈ 2 * K_fm * σ_u这里std(noise_lp)等于 σ_u。修改 K_fm 是最直观的带宽调节手段不需要重新设计滤波器。3.4 时域波形与频谱验证几个快速判据生成完成后用频谱分析验证信号是否符合预期。下面的代码绘制两种干扰的功率谱Nfft 4096; win hann(Nfft); [S_am, f_axis] pwelch(s_am, win, Nfft/2, Nfft, fs); [S_fm, ~] pwelch(s_fm, win, Nfft/2, Nfft, fs); figure; subplot(2,1,1); plot(f_axis/1e6, 10*log10(S_am)); title(噪声调幅干扰功率谱); xlabel(频率 (MHz)); ylabel(PSD (dB)); grid on; subplot(2,1,2); plot(f_axis/1e6, 10*log10(S_fm)); title(噪声调频干扰功率谱); xlabel(频率 (MHz)); ylabel(PSD (dB)); grid on;验证时看三个点AM 干扰在 f02 MHz 处应有明显载波谱峰两侧边带宽度为 2*BnFM 干扰的频谱应近似平坦地覆盖约 ΔF_eff 的带宽频带边缘下降陡峭两种信号的带外功率应比带内低至少 20 dB。如果 FM 干扰的频谱不是平坦的而是中间有尖峰通常是滤波后的噪声正态性过强需要增大调频指数或对噪声做幅度整形。4. 用 BPSK 链路评估 AM/FM 干扰的压制效果4.1 小型干扰评估链路搭建生成干扰信号本身只是第一步真正决定干扰参数是否合理的是它对目标接收机的影响。这里搭一条最小的 BPSK 链路发射端产生随机比特并映射为 BPSK 符号经过成形滤波后上变频干扰信号按设定的信干比叠加到信道接收端下变频、匹配滤波、采样判决统计误码率。这条链路不需要完整的通信系统两百行 MATLAB 代码就能跑通。Rb 100e3; % 符号速率 100 kbps fs 10e6; % 系统采样率 10 MHz sps fs / Rb; % 每个符号的采样点数 100 numSymbols 1000; % 仿真符号数 data randi([0 1], numSymbols, 1); symbols 2 * data - 1; % BPSK0 - -11 - 1 % 上采样每符号重复 sps 个样点等效矩形成形 tx kron(symbols, ones(sps, 1)).; % 加噪声 干扰 SNR_dB 10; % 信噪比 10 dB signal_power mean(abs(tx).^2); noise_power signal_power / (10^(SNR_dB/10)); noise_i sqrt(noise_power/2) * randn(size(tx)); SJR_dB -10; % 信干比 -10 dB干扰比信号强 10 dB j_power signal_power / (10^(SJR_dB/10)); % 干扰信号需要先搬移到载波频点 carrier_rx exp(1j * 2 * pi * fc * t(1:length(tx))).; s_am_short s_am(1:length(tx)).; s_am_shifted real(s_am_short .* carrier_rx); % 已包含实际载频搬移 % 混合信号 rx tx noise_i sqrt(j_power / rms(s_am_shifted)^2) * s_am_shifted.;代码里用kron做上采样等效于矩形脉冲成形对评估压制干扰已经足够。SJR signal_power / j_power是信干比这里设成 -10 dB 表示干扰功率远大于信号。载波搬移环节因为前面的干扰信号已经调制在 fc接收端直接用复指数下变频来做正交解调实际系统中还会多一级匹配滤波但原理一致。这个脚本把 AM 干扰叠加入信道换 FM 干扰时只需把s_am_short换成对应的s_fm序列。4.2 误码率统计与压制系数计算信号经过下变频和匹配滤波后在最佳采样点判决% 下变频到基带 rx_down rx .* conj(carrier_rx); % 矩形匹配滤波每 sps 个点累加 rx_filtered reshape(rx_down, sps, numSymbols); rx_samples mean(rx_filtered, 1); % 等效匹配滤波输出 % 判决与误码率 rx_bits real(rx_samples) 0; ber sum(rx_bits ~ data.) / numSymbols; fprintf(SJR %.1f dBBER %.4f\n, SJR_dB, ber);mean(rx_filtered, 1)对每个符号的 sps 个采样点取平均正是矩形脉冲的匹配滤波。干扰功率越强误码率越高。不同干扰样式在相同 SJR 下产生的 BER 不同这个差值就是干扰效能的对比依据。进一步可以扫描 SJR 从 -15 dB 到 5 dB绘制 BER-SJR 曲线。曲线的横轴中 BER1e-2 对应的 SJR 差值可视为压制增益差。例如 FM 干扰可能比 AM 干扰提前 3 dB 达到同样误码率说明 FM 在相同干信比下更“省功率”。这就是压制系数的工程含义把目标接收机压制到指定误码率所需的最小干信比。4.3 调制系数、噪声带宽与频偏的参数扫描用嵌套循环扫参数是确定干扰样式最优工作点的方法。以 AM 干扰为例遍历调幅系数 m_a 从 0.3 到 1.0、噪声带宽 Bn 从 50k 到 500k观察达到 BER1e-2 所需的最小 SJR。干扰样式参数范围达到目标 BER 的最优参数区间备注AMm_a0.3~0.9, Bn50k~500km_a 取 0.7~0.8Bn 覆盖信号带宽 2~3 倍过高 m_a 出现过调幅包络失真FMK_fm*σ_u200k~1M, Bn10k~100k频偏为信号带宽 4 倍以上时压制平稳频偏过大频谱过宽功率密度下降扫参时务必固定干扰总功率否则对比的是功率差异而非样式差异。另一个常见错误是用不同随机种子生成噪声导致干扰波形不一致从而带来额外的实验误差。正确的做法是在循环外统一生成一组基础噪声然后只改变滤波器和调制参数这样每次干扰的随机波动一致性能曲线会平滑很多。最后可以用一个简单的可视化来判断干扰带宽匹配度把接收端的带通滤波器频响 Bode 图画在同一张频谱图中观察干扰频谱是否完整覆盖了信号频带。只覆盖一半时压制效果近似减半。这个图往往比 BER 曲线更能直观解释“为什么干扰没效果”。5. 工程化提速与“干扰看起来不对”时的排查顺序5.1 用频域滤波替换高阶 IIR 滤波器生成窄带噪声需要高阶滤波器时域滤波在长信号下计算开销不小。更快的做法是在频域完成带限操作直接生成高斯白噪声的 FFT将通带外的谱线置零再 IFFT 还原。MATLAB 中的实现如下。N length(n_raw); Nfft 2^nextpow2(N); Nn_raw fft(n_raw, Nfft); f_vec (0:Nfft-1) / Nfft * fs; mask (f_vec Bn) (f_vec fs - Bn); % 频域带限掩码 Nn_raw(mask) 0; noise_lp_fd real(ifft(Nn_raw, Nfft)); noise_lp_fd noise_lp_fd(1:N);频域方式的优点是带宽截断边缘极其陡峭等价于一个理想矩形滤波器不会有过冲和滚降。缺点是在信号两端会引入轻微的时间混叠处理秒级长信号时可忽略。对评估类仿真频域方法通常比butter快 5~10 倍优先推荐。5.2 参数化封装一个函数切换 AM/FM 与带宽更好的工程结构是把干扰生成封装成一个函数输入载频、采样率、时长、带宽、样式类型即可返回信号和参数结构体。这样切换干扰样式只需要改一个参数不用改调用方代码。function [sig, para] gen_noise_jammer(fc, fs, T, Bn, style, varargin) % style: AM 或 FM % 额外参数AM 传调幅系数 m_aFM 传频偏常数 K_fm t (0:round(T*fs)-1) / fs; rng(2024); n_raw randn(1, length(t)); % 频域带限 Nfft 2^nextpow2(length(n_raw)); spec fft(n_raw, Nfft); f_vec (0:Nfft-1)/Nfft*fs; spec((f_vec Bn) (f_vec fs-Bn)) 0; noise_lp real(ifft(spec, Nfft)); noise_lp noise_lp(1:length(t)); noise_lp noise_lp / std(noise_lp); % 单位 RMS switch style case AM m_a varargin{1}; U0 1 / m_a; sig (U0 noise_lp) .* cos(2*pi*fc*t); para struct(style,AM,ma,m_a,Bn,Bn); case FM K_fm varargin{1}; phase 2*pi*K_fm * cumsum(noise_lp) / fs; sig cos(2*pi*fc*t phase); para struct(style,FM,Kfm,K_fm,Bn,Bn); otherwise error(unknown style); end sig sig / rms(sig); end调用方式非常简单[jam_am, p1] gen_noise_jammer(2e6, 10e6, 1e-3, 200e3, AM, 0.8);。参数结构体里保留带宽、系数和样式名方便后续批量仿真时记录实验条件。这里用rng(2024)固定种子但如果在一个脚本里多次调用函数每次都会重置随机数生成器导致各次结果完全一样反而不利于蒙特卡洛统计。工程化的做法是把rng的调用移到函数外部或者增加一个seed输入参数。5.3 仿真结果异常时按这个顺序排查如果干扰频谱形状不对或 BER 曲线反常不要急着改参数按下面顺序检查80% 的问题出在这四个环节里先确认时域信号没有直流偏置和突变画出前 1000 个采样点观察包络是否连续。包络在两端出现跳变通常是filter而非filtfilt导致的瞬态或是频域掩码在信号边缘产生了截断伪影。确认频率轴的定义FS10 MHz 的离散频谱范围是 0~10 MHz而实际物理上 5 MHz 以上就是负频。用pwelch画图时建议加centered选项或手动移位否则容易误判干扰中心频率偏移。检查干扰功率单位rms归一化的是平均功率而 BER 曲线里的j_power是平均功率。如果链路里加入了脉冲干扰或窗函数平均功率会变化叠加时要用rms(rx_jammer)而不是名义功率。对比 AM/FM 的带宽公式AM 带宽是 2BnFM 带宽是 2K_fm*σ_u两者相差一个数量级时BER 曲线出现“扇面”状分布是正常的。如果 AM 干扰的谱宽与 FM 相同先检查是不是把调制噪声带宽设成了等效频偏。排查时多做“单参数扰动测试”只改变一个参数看频谱主瓣宽度是否按理论公式变化。AM 的边带宽度会跟着 Bn 线性变化FM 的频谱宽度会跟着 K_fm 或 σ_u 变化。若某个参数改变而频谱毫无反应多半是信号在传递过程中被某个中间变量截断或复用了逐段打印length就能定位。本文还有配套的精品资源点击获取