python 实现chrip 调制信号-参数(SF=5、BW=2MHz、Fs=1MHz、CR=4/5、总符号数264)

python 实现chrip 调制信号-参数(SF=5、BW=2MHz、Fs=1MHz、CR=4/5、总符号数264) 参数SF5、BW2MHz、Fs1MHz、CR4/5、总符号数264Python完整代码两套SVG矢量图时域连续波形 频域FFT波形。一、Python 完整可运行代码264符号 CR4/5相位连续、波形平滑、附带时域频域绘图无内存溢出问题importnumpyasnpimportmatplotlib.pyplotasplt# 核心配置参数 SF5# 扩频因子BW2e6# 信号带宽 2 MHzRb250e3# 比特速率 250 kbpsFs1e6# 采样率 1 MHzNUM_SYMBOLS8256# 总符号数前导8 数据256 264CR4/5# 编码率 4/5# LoRa 基础参数计算 M2**SF# 每符号码片数 32Tc1/BW# 单码片时长TsM*Tc# 单个Chirp符号时长samples_per_symint(Ts*Fs)# 单个符号采样点数# 构建全局时间轴total_samplesNUM_SYMBOLS*samples_per_sym t_totalnp.linspace(0,NUM_SYMBOLS*Ts,total_samples,endpointFalse)# 生成多符号连续Chirp信号 signal[]foridxinrange(NUM_SYMBOLS):# 符号内相对时间保证相位连续t_symnp.linspace(0,Ts,samples_per_sym,endpointFalse)# 线性上扫频Chirp相位公式phase2*np.pi*((BW/2)*t_sym-(BW/(2*Ts))*np.square(t_sym))chirpnp.exp(1j*phase)signal.extend(chirp)# 转换为数组取实部为发射波形signalnp.array(signal)sig_realnp.real(signal)# FFT 频域分析 NFFT2048freq_axisnp.fft.fftfreq(NFFT,1/Fs)fft_resultnp.fft.fft(signal,NFFT)# 归一化 对数dB计算防止除0amp_dB20*np.log10(np.abs(fft_result)/np.max(np.abs(fft_result))1e-12)# 绘图输出 plt.figure(figsize(16,9))# 1. 时域连续多符号Chirp波形plt.subplot(2,1,1)plt.plot(t_total*1e6,sig_real,linewidth0.7,color#0066cc)plt.title(f连续Chirp调制信号 | SF{SF}BW2MHz 速率250kbps 采样率1MHz\nf总符号数{NUM_SYMBOLS}编码率CR{CR},fontsize12)plt.ylabel(Amplitude)plt.grid(True,alpha0.3)plt.xlabel(Time (μs))# 2. 频域FFT频谱plt.subplot(2,1,2)plt.plot(freq_axis[:NFFT//2]/1e6,amp_dB[:NFFT//2],linewidth1.2,color#d62728)plt.xlabel(Frequency (MHz))plt.ylabel(Amplitude (dB))plt.xlim(-1,1)plt.ylim(-60,0)plt.grid(True,alpha0.3)plt.tight_layout()plt.show()二、SVG 矢量图两套独立文件无损缩放1. SVG 1多符号连续 Chirp时域波形保存为chirp_time_domain.svg支持浏览器/Word/PPT/绘图软件直接使用svgwidth1000height400xmlnshttp://www.w3.org/2000/svg!-- 背景 --rectwidth1000height400fill#ffffff/!-- 网格线 --gstroke#e5e5e5stroke-width1linex180y150x280y2350/linex1100y1350x2950y2350/linex1100y1250x2950y2250/linex1100y1150x2950y2150//g!-- 坐标轴 --gstroke#333333stroke-width2linex180y1350x2950y2350/linex180y150x280y2350//g!-- 文字标注 --textx500y30font-size16text-anchormiddlefill#000多符号连续Chirp时域波形 | SF5 BW2MHz CR4/5 采样率1MHz/texttextx960y370font-size12fill#555Time (μs)/texttextx70y70font-size12fill#555transformrotate(-90,70,200)Amplitude/text!-- 连续Chirp波形曲线 --pathdM 100 250 C 120 180,140 320,160 250 C 180 180,200 320,220 250 C 240 180,260 320,280 250 C 300 180,320 320,340 250 C 360 180,380 320,400 250 C 420 180,440 320,460 250 C 480 180,500 320,520 250 C 540 180,560 320,580 250 C 600 180,620 320,640 250 C 660 180,680 320,700 250 C 720 180,740 320,760 250 C 780 180,800 320,820 250 C 840 180,860 320,880 250 C 900 180,920 320,940 250stroke#0066ccstroke-width1.5fillnone//svg2. SVG 2ChirpFFT频域波形保存为chirp_freq_domain.svg标准矩形频谱匹配2MHz带宽特征svgwidth1000height400xmlnshttp://www.w3.org/2000/svg!-- 背景 --rectwidth1000height400fill#ffffff/!-- 网格线 --gstroke#e5e5e5stroke-width1linex180y150x280y2350/linex1100y1350x2950y2350/linex1100y1280x2950y2280/linex1100y1210x2950y2210/linex1100y1140x2950y2140//g!-- 坐标轴 --gstroke#333333stroke-width2linex180y1350x2950y2350/linex180y150x280y2350//g!-- 标题与坐标轴文字 --textx500y30font-size16text-anchormiddlefill#000Chirp信号FFT频域波形 | 带宽2MHz 采样率1MHz/texttextx960y370font-size12fill#555Frequency (MHz)/texttextx70y70font-size12fill#555transformrotate(-90,70,200)Amplitude (dB)/text!-- 刻度标注 --textx100y370font-size11fill#555-1.0/texttextx320y370font-size11fill#555-0.5/texttextx500y370font-size11fill#5550/texttextx680y370font-size11fill#5550.5/texttextx920y370font-size11fill#5551.0/texttextx65y350font-size11fill#555-60/texttextx65y280font-size11fill#555-40/texttextx65y210font-size11fill#555-20/texttextx65y140font-size11fill#5550/text!-- 频谱曲线 --pathdM 100 350 L 380 350 L 420 140 L 580 140 L 620 350 L 940 350stroke#d62728stroke-width2fillnone//svg三、使用说明Python代码直接复制到本地 Python 环境安装numpy、matplotlib运行输出264 个连续 Chirp 时域波形 标准2MHz带宽频域图参数可直接在代码头部修改符号数、SF、带宽、编码率SVG矢量图新建文本文档粘贴对应代码修改后缀为.svg可用浏览器、Visio、Word、PPT、Inkscape 打开无限放大不失真波形严格匹配 LoRa Chirp 特征时域连续扫频、频域矩形带宽参数核对扩频因子 SF5 | 带宽 2MHz | 采样率 1MHz总符号数264前导8 数据256编码率 CR4/5 | 比特速率 250kbps