多信道接收机

news2025/4/20 1:05:48

线性调频(LFM)信号,模拟多个目标反射的回波信号,并进行混频和滤波处理。

% 参数设置
c = 3e8; % 光速 (m/s)
f0 = 8.566e9; % 载波频率 (Hz)
T = 10e-6; % 脉冲持续时间 (s)
B = 100e6; % 信号带宽 (Hz)
mu = B / T; % 调频斜率 (Hz/s)
fs = 5 * B; % 采样频率 (Hz)
t = 0:1/fs:T-1/fs; % 时间向量

% 生成LFM信号
s = exp(1j * 2 * pi * (f0 * t + 0.5 * mu * t.^2));

% 目标参数设置
target_distances = [100, 200, 300]; % 目标距离 (m)
target_rcs = [1, 2, 1]; % 目标雷达散射截面积

% 生成回波信号
sr = zeros(size(t));
for i = 1:length(target_distances)
    tau = 2 * target_distances(i) / c; % 回波延迟时间
    delay_samples = round(tau * fs);
    target_signal = target_rcs(i) * [zeros(1, delay_samples), s(1:end-delay_samples)];
    sr = sr + target_signal;
end

% 本振信号
f_LO = 8.5e9; % 本振频率 (Hz)
s_LO = exp(1j * 2 * pi * f_LO * t);

% 混频
s_mixed = sr .* s_LO;

% 设计低通滤波器
filter_order = 64;
cutoff_freq = B/2;
normalized_cutoff = cutoff_freq / (fs/2);
[b, a] = fir1(filter_order, normalized_cutoff);

% 滤波
s_filtered = filter(b, a, s_mixed);

% 绘制结果
figure;
subplot(3,1,1);
plot(t * 1e6, real(s));
title('发射的LFM信号');
xlabel('时间 (\mus)');
ylabel('幅度');

subplot(3,1,2);
plot(t * 1e6, real(sr));
title('多个目标的回波信号');
xlabel('时间 (\mus)');
ylabel('幅度');

subplot(3,1,3);
plot(t * 1e6, real(s_filtered));
title('混频滤波后的信号');
xlabel('时间 (\mus)');
ylabel('幅度');

生成信号、频谱分析、多相滤波器组的实现以及频率估计。

1. 初始化和输入信号生成

clear all; close all; clc;

FS = 2.4e+9; % 采样率
IF = 35e+7; % 中频 (Intermediate Frequency)
MF = 3.6e+9; % 可能是最大频率或其他参数

Signal_DDC = 0:1:1000;
Signal_DDC = Signal_DDC / 1000; % 归一化时间轴
Signal_DDC = sin(2 * pi * 100 * Signal_DDC); % 生成一个频率为100Hz的正弦信号作为输入信号
  • 这里定义了一个采样率为 FS 的正弦信号,频率为 100 Hz。

2. 输入信号的时域和频域展示

N = length(Signal_DDC);
nfft = 2^nextpow2(N); % 计算合适的FFT长度
t_axis = (0:N-1) / FS; % 时间轴
f_axis = (0:nfft-1) / nfft * FS - FS / 2; % 频率轴

subplot(211)
plot(t_axis .* 1e6, real(Signal_DDC)); % 绘制输入信号的时域图
xlabel('时间 (\mu s)')
title('输入信号')

subplot(212)
Signal_DDC_fft = fftshift(fft(Signal_DDC, nfft)); % FFT变换并移频
plot(f_axis ./ 1e6, abs(Signal_DDC_fft)) % 绘制输入信号的频谱图
xlabel('频率 (MHz)')
title('输入信号的频谱')
  • 使用 fftshiftfft 函数计算并绘制信号的频谱图。

3. 多相滤波器组的设计与应用

fI = IF;
K = 32; % 子带数量
Channel_Freq_Range = [((0:K-1)-(K-1)/2).*FS/K-FS/K/2; ((0:K-1)-(K-1)/2).*FS/K+FS/K/2] ./ 1e6; % 每个子带的频率范围

h_LP = fir1(1023, 1/K, 'low'); % 设计低通滤波器
M = length(h_LP);
Q = fix(M / K);
H = zeros(K, Q);
for d = 1:K
    H(d, :) = h_LP(d:K:(Q-1)*K+d); % 将滤波器系数分解为多相分量
end
  • 定义了 K=32 个子带,并设计了一个低通滤波器。
  • 将滤波器系数分解为多相分量,以便于后续的多相滤波器组实现。

4. 多相滤波器组的实现

tic;
temp = mod(length(Signal_DDC), K);
if temp ~= 0
    Signal_DDC0 = [Signal_DDC(1:end), zeros(1, K-temp)];
else
    Signal_DDC0 = Signal_DDC(1:end);
end
X = reshape(Signal_DDC0, K, length(Signal_DDC0) / K); % 重排信号为K行矩阵
X = flipud(X); % 翻转矩阵

[rx, L] = size(X);
if mod(K, 2) == 0
    X = X .* repmat((-1).^(0:L-1), K, 1); % 对偶数子带进行符号调整
end

Y = zeros(K, L);
for d = 1:K
    Y(d, :) = Filter_FFT(X(d, :), H(d, :)); % 对每个子带进行滤波
end

for ll = 1:L
    temp = Y(:, ll) .* (-1).^(0:K-1)';
    temp = temp .* exp(j * (0:K-1)' * pi / K);
    Y(:, ll) = ifft(temp, K) .* K; % IFFT变换并调整幅度
end
toc;
  • 将输入信号重排为 K 行矩阵,并根据子带数量进行必要的零填充。
  • 对每个子带进行滤波和IFFT变换,得到每个子带的输出。

5. 子带信号的时间域展示

figure;
range = 14:27;
for d = 1:length(range)
    if mod(length(range), 2) == 0
        subplot(length(range) / 2, 2, d);
    else
        subplot((length(range) + 1) / 2, 2, d);
    end
    t_axis = ((0:L-1)) ./ FS .* K + (range(d)-1) ./ FS;
    plot(t_axis .* 1e6, abs(Y(range(d), :)));
    ylim([0 max(max(abs(Y))) + 1]);
end
  • 绘制选定子带(range = 14:27)的时域图。

6. 频率估计

for m = 1:460
    f = 150 + m * 5; % 生成不同频率的信号
    sig = floor(127 * sin(2 * pi * f * t));
    
    sig_vec = reshape(sig, 32, N / 32)';
    y = fft(sig_vec, [], 2);
    y = y(:, 1:16);
    
    [max_value, max_idx] = max(abs(y(1, :)));
    phase_ori = angle(y(:, max_idx))';
    
    sub_pse_ori = phase_ori(1, 2:end) - phase_ori(1, 1:end-1);
    for n = 1:length(sub_pse_ori)
        if (sub_pse_ori(1, n) >= pi)
            sub_pse_hand(1, n) = sub_pse_ori(1, n) - 2 * pi;
        elseif (sub_pse_ori(1, n) <= -pi)
            sub_pse_hand(1, n) = sub_pse_ori(1, n) + 2 * pi;
        else
            sub_pse_hand(1, n) = sub_pse_ori(1, n);
        end
    end
    
    pse_unwrap = unwrap(phase_ori);
    sub_pse_unwrap = pse_unwrap(1, 2:end) - pse_unwrap(1, 1:end-1);
    diff = sub_pse_hand - sub_pse_unwrap;
    
    sub_pse_0 = sub_pse_hand;
    ratio_0 = sum(sub_pse_0(1, 1:8)) / 8 / 2 / pi;
    sub_pse_1 = sub_pse_unwrap;
    ratio_1 = sum(sub_pse_1(1, 1:8)) / 8 / 2 / pi;
    a_result(1, m) = max_idx - 1 + ratio_0;
    b_result(1, m) = max_idx - 1 + ratio_1;
    c_result(1, m) = f / FS * 32;
end
  • 生成一系列不同频率的信号,并对这些信号进行FFT变换。
  • 计算每个信号的最大频率索引及其相位信息,并进行相位解缠绕。
  • 根据相位差值估算频率,并将结果存储在 a_resultb_result 中。

总结

这段代码的主要目的是:

  1. 生成和展示一个简单的正弦信号:通过时域和频域展示该信号。
  2. 实现一个多相滤波器组:用于将信号分成多个子带,并对每个子带进行滤波和处理。
  3. 频率估计:通过对不同频率信号的相位信息进行分析,估计其频率。

需要注意的是,代码中有一些未定义的函数(如 Filter_FFT),这可能是自定义函数或库函数。如果需要完整运行此代码,需确保所有函数都已定义或导入。此外,代码中的一些变量和逻辑可能需要根据具体需求进一步调整和优化。

clear all;close all;clc;
figure;
FS=2.4e+9;
IF=35e+7;
MF=3.6e+9;
Signal_DDC=0:1:1000;
Signal_DDC=Signal_DDC/1000;
Signal_DDC=sin(2*pi*100*Signal_DDC);
 
 
N=length(Signal_DDC);
nfft=2^nextpow2(N);
t_axis=(0:N-1)./fs;
f_axis=(0:nfft-1)./nfft*fs-fs/2;
subplot(211)
plot(t_axis.*1e6,real(Signal_DDC));
xlabel('时间')
title('输入信号')
subplot(212)
Signal_DDC_fft=(fftshift(fft(Signal_DDC,nfft)));
plot(f_axis./1e6,(abs(Signal_DDC_fft)))
xlabel('频率')
title('输入信号的频谱')
 
fI=IF;
K=32;
Channel_Freq_Range=[((0:K-1)-(K-1)/2).*fs/K-fs/K/2;((0:K-1)-(K-1)/2).*fs/K+fs/K/2]./1e6;
 
h_LP=fir1(1023,1/K,'low');
M=length(h_LP);
Q=fix(M/K);
H=zeros(K,Q);
for d=1:K
    H(d,:)=h_LP(d:K:(Q-1)*K+d);
end
 
tic;
temp=mod(length(Signal_DDC),K);
if temp~=0
    Signal_DDC0=[Signal_DDC(1:end),zeros(1,K-temp)];
    X=reshape(Signal_DDC0,K,length(Signal_DDC0)/K);
else
    X=reshape(Signal_DDC(1:end),K,length(Signal_DDC)/K);
end
X=flipud(X);
 
[rx,L]=size(X);
if mod(K,2)==0
    X=X.*repmat((-1).^(0:L-1),K,1);
end
  
Y=zeros(K,L);
for d=1:K
    Y(d,:)=Filter_FFT(X(d,:),H(d,:));
end
for ll=1:L
    temp=Y(:,ll).*(-1).^(0:K-1).';
    temp=temp.*exp(j*(0:K-1).'*pi/K);
    Y(:,ll)=ifft(temp,K).*K;
end
toc;
 
figure;
range=14:27;
for d=1:length(range)
    if mod(length(range),2)==0
        subplot(length(range)/2,2,d);
    else
        subplot((length(range)+1)/2,2,d);
    end
    t_axis=((0:L-1))./fs.*K+(range(d)-1)./fs;
    plot(t_axis.*1e6,abs(Y(range(d),:)))
    ylim([0 max(max(abs(Y)))+1])
End
for m=1:460
    f       = 150+m*5;
    sig     = floor(127*sin(2*pi*f*t));

    sig_vec = reshape(sig,32,N/32)';
    y       = fft(sig_vec,[],2);
    y       = y(:,1:16);
 
 
    [max_value,max_idx] = max(abs(y(1,:)));
    phase_ori = angle(y(:,max_idx))';
 

    

    sub_pse_ori = phase_ori(1,2:end) - phase_ori(1,1:end-1);
    for n = 1:length(sub_pse_ori)
       if(sub_pse_ori(1,n)>=pi) 
           sub_pse_hand(1,n) = sub_pse_ori(1,n)-2*pi;
       elseif(sub_pse_ori(1,n)<=-pi) 
           sub_pse_hand(1,n) = sub_pse_ori(1,n)+2*pi;
       else
           sub_pse_hand(1,n) = sub_pse_ori(1,n);
       end
    end
    
    pse_unwrap     = unwrap(phase_ori);
    sub_pse_unwrap = pse_unwrap(1,2:end) - pse_unwrap(1,1:end-1);
    diff = sub_pse_hand-sub_pse_unwrap;
    
  
    sub_pse_0 = sub_pse_hand;
    ratio_0 = sum(sub_pse_0(1,1:8))/8/2/pi;
    sub_pse_1 = sub_pse_unwrap;
    ratio_1 = sum(sub_pse_1(1,1:8))/8/2/pi;
    a_result(1,m) = max_idx-1+ratio_0;
    b_result(1,m) = max_idx-1+ratio_1;
    c_result(1,m) = f/FS*32;
end

转载于
设计32信道的多相滤波结构数字接收机
基于多相滤波器的数字信道化算法详解
一 、实验题目
单通道实采样,采样率2.4GHz。设计32信道的多相滤波结构数字接收机,给出各信道的通带范围,采用MATLAB工具设计原型滤波器,给出原型滤波器特性。结合相位差分测频算法,输入不同频率的信号,测试数字接收机各信道输出,并完成信号频率测量。

二、 实验原理
32信道多相滤波器结构图如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

推导过程

多相滤波信道化是对传统信道化结构的改进, 通过各支路共用一个低通滤波器提高资源的利用率, 同时采用多相抽取提高了后续滤波和 FFT 的运算效率. 给定输入信号为x(n), 欲划分的信道数为K, 原型滤波器h(n)
的阶数为N NN, 且滤波器阶数能被信道数整除, 即L=N/K, 则原型滤波器的系统函数H(z)可表示为:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

python仿真多相滤波器数字信道化算法

from scipy.signal import chirp, remez
import matplotlib.pyplot as plt
# [how to install `polyphase`](https://github.com/falwat/polyphase)
from polyphase import Channelizer
from numpy import arange, real, imag
from numpy.fft import fft, fftshift

 # 通道数
channel_num = 8
# 采样率
fs = 1280000

f0 = 0
f1 = fs/2
t1 = 1


# 
T = 1

t = arange(0, int(T*fs)) / fs

# 生成一个chirp信号
s = chirp(t, f0, t1, f1)

# 创建原型滤波器
cutoff = fs / channel_num / 2    # Desired cutoff frequency, Hz
trans_width = cutoff / 10  # Width of transition from pass band to stop band, Hz
numtaps = 128      # Size of the FIR filter.
taps = remez(numtaps, [0, cutoff - trans_width, cutoff + trans_width, 0.5*fs],
                    [1, 0], Hz=fs)

# 创建信道化器    
channelizer = Channelizer(taps, channel_num)

ss = channelizer.dispatch(s)


segs = 500;
ns = int(fs/segs);
nss = int(ss.shape[1]/segs);


# 分段绘图
fig, axs = plt.subplots(3, 1)

for i in range(segs):
    s0 = s[i*ns:i*ns+ns]
    h0 = abs(fft(s0))
    ss0 = ss[0:4, i*nss:i*nss+nss]
    hh0 = abs(fftshift(fft(ss0)))
    for ax in axs:
        ax.cla()
    axs[0].set_title(r'original signal')
    axs[1].set_title(r'The spectrum of channelized signals')
    axs[2].set_title(r'Waveform of channelized signal(real part)')
    axs[0].plot(h0 / max(h0))
    axs[1].plot(abs(hh0.T / hh0.max()))
    axs[2].plot(real(ss0.T))
    plt.pause(0.05)

原文链接:https://blog.csdn.net/falwat/article/details/121595096
原文链接:https://blog.csdn.net/weixin_45858061/article/details/102986358

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2301348.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

修改项目的一些前端记录(自用)

<div style"background:#f2f2f2;position:absolute;top:75px;width:10%;bottom:0px">\<ol class"tree">\<li>\<label for"folder1" class"folderOne foldertop"><img src"common/img/时间.png" …

阿里云虚机的远程桌面登录提示帐户被锁定了

提示由于安全原因&#xff0c;帐户被锁定。 阿里云虚机ECS的远程桌面登录提示帐户被锁定了&#xff0c;只能登录阿里云处理 阿里云-计算&#xff0c;为了无法计算的价值 需选择通过VNC连接 然后计算机管理&#xff0c;解除帐户锁定即可。

AD(Altium Designer)器件封装——立创商城导出原理图和PCB完成器件封装操作指南

1、立创商城下载原理图和PCB图 1.1 打开立创商城 官网:www.SZLCSC.COM 1.2 寻找所需器件 以芯片为例 器件类——>芯片类——>对应芯片 1.3 确定所需芯片 确定芯片——>数据手册 1.4 打开原理图和PCB图 1:原理图 2:PCB 3:打开 1.5 导出原理图 操作

【DeepSeek系列】04 DeepSeek-R1:带有冷启动的强化学习

文章目录 1、简介2、主要改进点3、两个重要观点4、四阶段后训练详细步骤4.1 冷启动4.2 推理导向的强化学习4.3 拒绝采样和有监督微调4.4 针对所有场景的强化学习 5、蒸馏与强化学习对比6、评估6.1 DeepSeek-R1 评估6.2 蒸馏模型评估 7、结论8、局限性与未来方向 1、简介 DeepS…

Mac 清理缓存,提高内存空间

步骤 1.打开【访达】 2.菜单栏第五个功能【前往】&#xff0c;点击【个人】 3.【command shift J】显示所有文件&#xff0c;打开【资源库】 4.删除【Containers】和【Caches】文件 Containers 文件夹&#xff1a;用于存储每个应用程序的沙盒数据&#xff0c;确保应用程序…

fpga助教面试题

第一题 module sfp_pwm( input wire clk, //clk is 200M input wire rst_n, input wire clk_10M_i, input wire PPS_i, output reg pwm ) reg [6:0] cunt ;always (posedge clk ) beginif(!rst_n)cunt<0;else if(cunt19) //200M是10M的20倍cunt<0;elsecunt<cunt1;…

【强化学习】Q-learning算法详解:含MATLAB和Python实现代码

Q-learning算法详解 1. Q-learning算法简介Q-Learning算法的基本概念Q-Learning算法的核心思想Q-learning算法步骤Q-Learning算法的特点 MATLAB 实现 Q-learningPython 实现 Q-learning参考 强化学习属于机器学习&#xff0c;但与以前的监督学习和无监督学习的处理对象和任务都…

Java 多数据源时事务回滚问题

目录 问题描述 1、Atomikos事务管理器 2、MyBatis-Plus多数据源支持 dynamic-datasource 特性 约定 使用方法 mybatis-mate 特性 使用方法 问题描述 在多数据源的情况下&#xff0c;如果一个事务跨越多个数据源&#xff0c;当其中一个数据源的操作失败时&#xff0c;我…

使用html css js 开发一个 教育机构前端静态网站模板

这个教育机构网站模板是专为前端开发初学者设计的练习项目&#xff0c;适合正在学习前端的学生或自学者使用。网站内容包括首页、课程体系、师资力量、关于我们和联系我们等基础页面&#xff0c;帮助学习者熟悉网页布局、样式设计和交互功能的实现。 静态页面 简单截图 应用…

在IDEA的Maven中(同步所有Maven项目)和(重新加载所有Maven项目)的区别

特性同步所有 Maven 项目 (Sync All Maven Projects)重新加载所有 Maven 项目 (Reload All Maven Projects)主要作用使 IDEA 项目结构、依赖关系与 pom.xml 文件同步。强制重新读取所有 pom.xml 文件&#xff0c;并重建 IDEA 的 Maven 项目模型。缓存使用 IDEA 缓存的 Maven 项…

el-table树状表格,默认展开第一个节点的每一层

效果如图 <template><el-table:data"tableData"style"width: 100%":tree-props"{ children: children, hasChildren: hasChildren }":expand-row-keys"expandRowKeys"row-key"id"expand-change"handleExpan…

使用VSCODE开发C语言程序

使用vscode配置C语言开发环境 一、安装VSCODE 1、下载vscode ​ 从官方网站&#xff08;https://code.visualstudio.com/Download&#xff09;上&#xff0c;下载windows版本的vscode 2、安装vscode ​ 下载完毕后&#xff0c;按照提示进行安装即可&#xff08;尽可能不要安…

【数据结构初阶第十二节】设计循环队列

云边有个稻草人-CSDN博客 必须有为成功付出代价的决心&#xff0c;然后想办法付出这个代价。 还有最后一道关于队列的习题&#xff0c;这题有点难&#xff0c;准备好迎接挑战吧&#xff01; 目录 1.【题目】 2.实现循环队列推荐用数组&#xff0c;Why? 3.Q1&#xff1a;如…

【数据分享】1929-2024年全球站点的逐年降雪深度数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 有关气象指标的监测站点数据&#xff0c;之前我们分享过1929-2024年全球气象站…

【强化学习的数学原理】第10课-Actor-Critic方法-笔记

学习资料&#xff1a;bilibili 西湖大学赵世钰老师的【强化学习的数学原理】课程。链接&#xff1a;强化学习的数学原理 西湖大学 赵世钰 文章目录 一、最简单的Actor-Critic&#xff08;QAC&#xff09;二、Advantage Actor-Critic&#xff08;A2C&#xff09;三、重要性采样和…

scratch猜年龄互动小游戏 2024年12月scratch四级真题 中国电子学会 图形化编程 scratch四级真题和答案解析

scratch猜年龄互动小游戏 2024年12月电子学会图形化编程Scratch等级考试四级真题 一、题目要求 老爷爷的年龄是1-100的随机数,老爷爷询问“请猜猜我的年龄是多少?”,输入年龄,老爷爷会回答"大了"或者"小了,直到最后成功猜出年龄。 1、准备工作 (1)删…

java每日精进 2.13 MySql迁移人大金仓

1.迁移数据库 1. 数据库创建语句 MySQL&#xff1a; CREATE DATABASE dbname; 人大金仓&#xff08;Kingbase&#xff09;&#xff1a; 在人大金仓中&#xff0c;CREATE DATABASE 的语法通常相同&#xff0c;但可能需要特别注意字符集的指定&#xff08;如果涉及到多语言支持…

2025最新智能优化算法:改进型雪雁算法(Improved Snow Geese Algorithm, ISGA)求解23个经典函数测试集,MATLAB

一、改进型雪雁算法 雪雁算法&#xff08;Snow Geese Algorithm&#xff0c;SGA&#xff09;是2024年提出的一种新型元启发式算法&#xff0c;其灵感来源于雪雁的迁徙行为&#xff0c;特别是它们在迁徙过程中形成的独特“人字形”和“直线”飞行模式。该算法通过模拟雪雁的飞行…

Open WebUI项目源码学习记录(从0开始基于纯CPU环境部署一个网页Chat服务)

感谢您点开这篇文章:D&#xff0c;鼠鼠我是一个代码小白&#xff0c;下文是学习开源项目Open WebUI过程中的一点笔记记录&#xff0c;希望能帮助到你&#xff5e; 本人菜鸟&#xff0c;持续成长&#xff0c;能力不足有疏漏的地方欢迎一起探讨指正&#xff0c;比心心&#xff5e…

什么是Grok-3?技术特点,场景,潜在问题与挑战

Grok-3 的技术特点与优势 1. 超大算力与训练规模 算力投入:Grok-3 使用了 20 万块英伟达 H100 GPU,分两个阶段训练(第一阶段 10 万 GPU 训练 144 天,第二阶段 20 万 GPU 训练 92 天),总计算量是前代 Grok-2 的 10 倍。这种规模远超同期其他项目(如印度的 1.8 万 GPU 公…