You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matlab中从BladeRF保存的IQ.bin文件绘制正确频谱图?

解决BladeRF IQ.bin文件在Matlab中频谱图无显示问题

核心问题排查与解决步骤

1. 确保IQ文件读取正确

BladeRF默认保存的是int16类型的交织IQ数据(I、Q采样交替存储,每个采样占4字节),读取时必须匹配数据格式,否则信号会完全失真:

% 读取二进制IQ文件
file_path = 'your_signal.bin';
fid = fopen(file_path, 'rb');
iq_raw = fread(fid, inf, 'int16'); % 若为float32格式则改为'float32'
fclose(fid);

% 分离I/Q通道并转为复数信号
iq_signal = iq_raw(1:2:end) + 1j*iq_raw(2:2:end);

% int16格式需归一化到[-1,1](float32格式可跳过此步)
iq_signal = iq_signal / 32768;

2. 匹配采集时的采样率与中心频率

spectrogram的频率轴默认以0为中心,必须手动加上BladeRF采集时的中心频率,同时采样率必须与采集参数完全一致:

Fs = 20e6;       % 替换为你采集时的采样率(如20MHz)
fc = 2.45e9;     % 替换为你采集时的中心频率(如2.45GHz)

% 设置频谱图参数
win = hann(1024);       % 选用hann窗口提升频谱分辨率
noverlap = 512;         % 重叠点数设为窗口大小的一半
nfft = 1024;            % FFT点数与窗口大小匹配

% 生成频谱数据并调整频率轴
[~, f, t, Pxx] = spectrogram(iq_signal, win, noverlap, nfft, Fs);
f = f + fc; % 将默认0中心的频率轴偏移到实际中心频率

% 绘制频谱图(转为GHz显示)
figure;
imagesc(t, f/1e9, 10*log10(Pxx));
xlabel('时间 (s)');
ylabel('频率 (GHz)');
title('2.4GHz+信号频谱图');
colorbar;
axis xy; % 让频率轴从低到高正常显示

3. 快速验证信号有效性

如果频谱图仍无显示,先通过FFT确认IQ信号本身是否有效:

N = length(iq_signal);
f_fft = (-Fs/2:Fs/N:Fs/2 - Fs/N) + fc;
fft_data = fftshift(fft(iq_signal));

figure;
plot(f_fft/1e9, 10*log10(abs(fft_data)/N));
xlabel('频率 (GHz)');
ylabel('幅度 (dB)');
title('信号原始频谱');

如果此图也无2.4GHz+的信号峰,说明要么采集时参数错误,要么.bin文件损坏。

4. 调整频谱图参数优化显示

  • 若信号带宽较窄:增大nfft(如2048)提升频率分辨率
  • 若信号为突发型:减小窗口大小(如512)提升时间分辨率
  • 若信号幅度低:调整10*log10(Pxx)的动态范围,比如加阈值10*log10(max(Pxx, 1e-10))避免负无穷

内容的提问来源于stack exchange,提问作者researcher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 18:22:48