积分旁瓣电平-matlab函数

复制代码
%% ISL 计算
% 该示例用于采用我自己编写的ISL公式计算ISL
clear all; close all; clear;
N = 128; %信号长度
plotEnableHigh = 1;
randPhaSig = exp(1j*2*pi*rand(N,1));   %生成随机相位编码信号
mlb = 0; %设置主瓣宽度为0,即只有自相关延迟为0的值
figure;
plot(real(randPhaSig),'linewidth',1);
axis tight;
title(sprintf('长度为N=%d的随机相位编码信号',N));



[ISL_linear, ISL_dB, PSL_dB] = myISLPSL (randPhaSig, mlb, plotEnableHigh);

调用了计算积分旁瓣电平和峰值旁瓣电平的函数如下:

复制代码
function [ISL_linear, ISL_dB, PSL_dB] = myISLPSL (x, mlb, plotEnable)
%% 计算积分旁瓣电平
% 自己动手编写的波形的自相关的ISL积分旁瓣电平、PSL峰值旁瓣电平
% 输入:
% x:          输入信号
% mlb:      主瓣宽度,主瓣一半的宽度
% 输出:
% ISL_linear:ISL输出,以线性值
% ISL_dB:     以dB值输出

N = length(x);                 %输入信号的长度为N,那么自相关序列的长度为2N+1
acf = xcorr(x);                %计算自相关函数
acf_norm = acf/max(abs(acf));  %对自相关函数进行归一化
acf_power = abs(acf_norm).^2;  %能量值,这里取了平方
mainLobeCenter = N;            %找到主瓣的中心位置
% 定义主瓣区域和旁瓣区域
mainLobeInd = mainLobeCenter-mlb : mainLobeCenter+mlb;  %主瓣区域
sideLobeInd = [1: (mainLobeCenter - mlb - 1), (mainLobeCenter + mlb + 1):length(acf)]; %旁瓣区域

% 计算主瓣能量和旁瓣能量
mainLobePower = sum(acf_power(mainLobeInd));  %主瓣总能量
sideLobePower = sum(acf_power(sideLobeInd));  %旁瓣总能量
% 计算峰值旁瓣电平
sideLobePeak_linear = max(abs(acf_norm(sideLobeInd)))/1;  %峰值旁瓣电平
PSL_dB   = 20*log10(sideLobePeak_linear);    %以dB为单位的PSL
PSL_ind = find(abs(acf_norm) == sideLobePeak_linear)
PSL_ind = PSL_ind(1);                        %仅保留第一个峰值
% 计算ISL(两种表示)
ISL_linear = sideLobePower / mainLobePower;   %积分旁瓣电平,这里以主瓣能量
ISL_dB = 10*log10(ISL_linear);                %dB值表示的积分旁瓣电平

acd_ind = (-N+1):(N-1);      %自相关函数的延迟取值范围
if plotEnable == 1
fprintf('=== ISL计算示例 ===\n');
fprintf('主瓣峰值能量: %.4f\n', mainLobePower);
fprintf('旁瓣总能量: %.4f\n', sideLobePower);
fprintf('ISL(线性): %.6f (无量纲比值)\n', ISL_linear);
fprintf('ISL(dB): %.2f dB\n', ISL_dB);
fprintf('\n注意:ISL_dB中的"dB"不是物理单位,而是对数标度表示\n');

sidelobePoints = length(sideLobeInd)
averagePower =  sum(abs(acf_norm(sideLobeInd)))/sidelobePoints; %平均能量
averLine = ones(1,2*N-1).*averagePower;
figure;
plot(acd_ind, 20*log10(abs(acf_norm) + eps), 'linewidth',1); %加上eps可以防止太小的值
%plot(acd_ind, (abs(acf_norm) + eps), 'linewidth',1); %加上eps可以防止太小的值
hold on;
plot(acd_ind, 20*log10(averLine),'b--', 'linewidth',1); %加上eps可以防止太小的值
plot(acd_ind(PSL_ind), 20*log10(abs(acf_norm(PSL_ind))), 'ro');
axis tight;
title(sprintf('自相关函数\n积分旁瓣电平ISL = %.2fdB, 峰值旁瓣电平PSL = %.2fdB',ISL_dB, PSL_dB));
legend('自相关值','平均值','PSL');
end

这里生成了128位的随机相位编码波形,经过自相关后再做归一化,可以看到主瓣峰值为0dB,积分旁瓣的整体的平均水平再-25dB左右,峰值旁瓣电平为-16.88dB,与LFM信号的-13.2dB相比还是略低一点的。但是它不如LFM的旁瓣那么平滑,而是有很多凸起。

相关推荐
To_OC2 小时前
写了三遍 Todo List,我终于搞懂了 React 父子组件到底怎么通信
前端·javascript·react.js
勇往直前plus2 小时前
Vue3(篇一) 核心概念——响应式模板语法与组件基础
前端·javascript·vue.js
咩咩啃树皮2 小时前
第43篇:Vue3计算属性(computed)完全精讲——缓存机制、依赖计算、业务最优解
前端·vue.js·缓存
用户938515635073 小时前
从零搭建 AI 日记助手:用 Milvus 向量数据库 + RAG 让机器读懂你的每一天
javascript·人工智能·全栈
徐小夕4 小时前
花了一周,3亿tokens,我开源了一款 Word 文档智能审查平台,文稿自动质检+可视化分析,告别低效人工审核
前端·算法·github
a1117765 小时前
坦克大战3D Three.js 3D (开源项目)
开发语言·javascript·3d
kyriewen6 小时前
别再乱用useEffect了——你写的10个里有8个不该存在
前端·javascript·react.js
Ivanqhz6 小时前
Rust &‘static str浅析
java·前端·javascript·rust
IT_陈寒6 小时前
SpringBoot这个分页坑,我踩了三天才爬出来
前端·人工智能·后端
颜酱6 小时前
05 | 召回前置准备:根据业务数据库生成各数据库(读取配置阶段)
前端·人工智能·后端