在计算机飞速发展的今天,单纯用硬件进行信号接收与处理也变得效率低下,如何利用软件即各种优秀的算法对信号进行处理从而实现各种各样的功能,这已成为通信领域几乎必备的知识。今天我们来对一个某高校真实的例程进行剖析,进而更深刻的理解软件无线电。
先看任务内容:某软件无线电对0~5MHz信号进行采样,采样率为16MHz。已知在2MHz处有一带宽为40kHz的信号,设计信道化方案,要求最终输出的零中频信号采样率为100KHz。使用MATLAB对所设计的信道化方案进行仿真,并使用提供的采样数据对方案进行验证。
任务要求如下:
- 设计包括正交下变频和多级滤波抽取在内的信道化方案,要求使用CIC+HB+FIR滤波器的多级级联抽取,确定每一级的抽取倍数。
- 利用filterDesigner设计每一级HB/FIR滤波器,确定滤波器阶数,得到幅频响应和相频响应曲线,并导出滤波器系数。
- 编写m脚本文件,读取data.mat数据(16MHz采样率)作为系统输入,使用正交下变频、CIC(按所设计的阶数)以及第(2)步获得的各HB/FIR滤波器系数完成信道化仿真,以验证方案的正确性。
首先我们根据要求,零中频的信号采样率为100k,原信号采样率为16M,可知降采样倍数为16M/100k=160,而160分解因式可为5*2*2*2*2*2,由此可见,我们需要设计一个抽取比为5的CIC滤波器和5个半带滤波器,但是CIC一般不用做最后一级滤波,故最后用一个FIR滤波器收尾。
明确思路后,我们开始敲代码:
首先读取数据:
load data.mat; %% 读取原始采样数据
N = length(data); %% 数据长度
fs = 16e6; %% 原始采样率
Bw = 40e3; %% 待提取信号带宽
f_Lo = 2e6; %% 待提取信号中心频率
Power_xdBm(data(1:2^20),fs); %画原始采样信号功率谱图,data为从data.mat中读出的原始采样数据
title('输入信号功率谱图 采样率16MHz 频谱分辨率15.259Hz');
然后我们通过正交混频将频谱信号搬到零频处。
Lo = exp( - 1j * 2 * pi * f_Lo * ( 0 : N - 1 ) / fs ); %% 用于正交混频的本振信号
mixing_data = data .* Lo;
Power_xdBm_complex(mixing_data,fs); %画正交混频后信号