合成孔径雷达成像——算法与实现图【2.11】与【2.12】仿真——不同β值下的kaiser窗,以及3dB宽度和峰值旁瓣比

先初始化各个参数

A = figure();
N = 250;
len = {};%用来储存标签
pslr = [];%用来储存各个pslr值
wide_3dB = [];%用来储存各个3dB带宽值

其中,{}与[]的区别是:
[]用来储存矩阵和向量,每一个[]是一个矩阵或一个向量,{}用来储存cell型数组等,比如字符、矩阵等。
若用[],则最后在输入标签时,会只有一个标签,因为只有一个矩阵,若用{},则其中会有多个字符,可以正常显示标签。

for i = 0:1:6
    idx=num2str(i);
    figure(A);hold on;
    z = kaiser(N,i);
    plot(kaiser(N,i),'LineWidth',1);xlim([-10 260]);

构造kaiser窗,idx为转换为字符串形式的数字,为了输出标签时比较简便。

    can = fft( z, 100*N );  
    can = abs(can);
    can = 20.*log10( can./max(can) );
    can = fftshift( can );

    can1 = fft( z, 100*N );
    can1 = abs((can1).^2);
    can1 = 20.*log10( can1./max(can1) );
    can1 = fftshift( can1 );

进行傅里叶变换,转换成用分贝形式表示。can1为功率,即使用平方,用来获得峰值旁瓣功率。

    len = [len,['β=',idx]];
    pslr = [pslr,getpslr(can)];
    [t,t_r_location,t_l_location] = wide(can1);
    wide_3dB = [wide_3dB,t];

得到数据标签、pslr值、以及3dB宽度值。

figure(2); subplot(1,2,1);
plot( 0:6,( wide_3dB./wide_3dB(1) - 1 ));
xlabel('kaiser窗的β'); ylabel('展宽比'); title('3dB宽度展宽比')
grid on

绘制3dB宽度图像,其中第一个值为最小值,除最小值再减一可进行对其归一化。这里的单位为dB,若需要准确宽度需要乘一个窗长度,即时间T。

figure(2); subplot(1,2,2);
plot( 0:6, pslr );
xlabel('kaiser窗的β'); ylabel('PSLR,dB'); title('峰值旁瓣比(PSLR)')
grid on

绘制峰值旁瓣比,这里pslr是小于1的值,所以不需要归一化。

figure(A);hold on;
plot(kaiser(N,2.5),'LineWidth',2,'color','red');xlim([-10 260]);
len = [len,['β=2.5']];legend(len');
xlabel('kaiser窗的β'); title('不同β值的kaiser窗');

绘制一般使用的最佳β值2.5的kaiser窗,将所有的kaiser窗绘制在一起。

function [t,t_r_location,t_l_location] = wide(a)
[m,max_location] = max(a);
[r,t_r_location] = min(abs(a(max_location:end)+3));
[l,t_l_location] = min(abs(a(1:max_location)+3));
t_r_location = t_r_location + max_location - 1;
t = t_r_location - t_l_location;
end

这里构造计算3dB宽度的函数,首先得到a中的最大值的位置,然后计算左侧最接近3dB宽度的位置,再计算右侧最接近3dB宽度的位置,右侧位置需要加上最大值位置减1才可以得到相对整个矩阵的位置。最后右侧位置减左侧位置即为3dB宽度。
这里输入的a矩阵需要是归一化后的用dB来表示的值。

function[k] = getpslr(a)
p = findpeaks(a);
p = sort(p,'descend');
k = p(2);
end

构造计算峰值旁瓣比的函数。先找出所有的峰值点,然后降序排序,选出第二个值,这里因为已经归一化,所以不需要除去主瓣最大值,因为主瓣最大值即为1。
完整代码如下:

A = figure();
N = 250;
len = {};
pslr = [];
wide_3dB = [];
for i = 0:1:30
    idx=num2str(i);
    figure(A);hold on;
    z = kaiser(N,i);
    plot(kaiser(N,i),'LineWidth',1);xlim([-10 260]);
    can = fft( z, 100*N ); 
    can = abs(can);
    can = 20.*log10( can./max(can) );
    can = fftshift( can );
    len = [len,['β=',idx]];
    pslr = [pslr,getpslr(can)];
    
    can1 = fft( z, 100*N );
    can1 = abs((can1).^2);
    can1 = 20.*log10( can1./max(can1) );
    can1 = fftshift( can1 );
    
    [t,t_r_location,t_l_location] = wide(can1);
    wide_3dB = [wide_3dB,t];


end

figure(A);hold on;
plot(kaiser(N,2.5),'LineWidth',2,'color','red');xlim([-10 260]);
len = [len,['β=2.5']];legend(len');
xlabel('kaiser窗的β'); title('不同β值的kaiser窗');
% 画3dB宽度展宽比
q =  wide_3dB./wide_3dB(1)-1;
figure(2); subplot(1,2,1);
plot( 0:30,100*q);
xlabel('kaiser窗的β'); ylabel('展宽比'); title('3dB宽度展宽比')
grid on

% 画峰值旁瓣比
figure(2); subplot(1,2,2);
plot( 0:30, pslr );
xlabel('kaiser窗的β'); ylabel('PSLR,dB'); title('峰值旁瓣比(PSLR)')
grid on


function [t,t_r_location,t_l_location] = wide(a)
[m,max_location] = max(a);
[r,t_r_location] = min(abs(a(max_location:end)+3));
[l,t_l_location] = min(abs(a(1:max_location)+3));
t_r_location = t_r_location + max_location - 1;
t = t_r_location - t_l_location;
end


function[k] = getpslr(a)
p = findpeaks(a);
p = sort(p,'descend');
k = p(2);
end

结果图如下:
图2.11
在这里插入图片描述
图2.12
在这里插入图片描述
乘上时间宽度T后的图2.12
在这里插入图片描述
与书中图一致。
将β的取值延展到1到30后,曲线更加平滑且趋势与1到6取值范围的趋势几乎一致。
在这里插入图片描述
参考代码:

https://blog.csdn.net/zhoubanlu4/article/details/106535278

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值