⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 data_generator.m

📁 数字音频信号的调制与解调的源码程序.可保证声音信号怒失真输出
💻 M
字号:
%测试文件,一次性生成数个data symbol,按标准方法调制,组装成待发送信号
%目的是快捷地调试解调模块,尤其是sync的部分
%原先worked的一组数据s_1 s_2 s_3,原封不动地保存

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                    定义参数                                   %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                                    
n_data=4;              %本程序产生的数据symbol个数
Tu=2048;               %for MODE I
delta=504;             %Guard interval
Ts=2552;               %toatal length of a symbol
k=1536;                %number of carriers

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  信号发生器,生成的数放在mass_prj里,注意,这也是以用来和解调结果比较的源信号 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
mass_prj=binornd(1,0.5,[n_data,k*2]); %参数为0.5的二项分布伪随机数

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                         QPSK mapping,结果放在QPSK_map里                      %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%由于自然进化了行列操作,比原先的程序简单许多,运行效率也更高
QPSK_map=(1/(2^0.5))*((1-(mass_prj(:,1:k)*2))+i*(1-(mass_prj(:,k+1:2*k)*2)));

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                  Frequency interleaving,结果放在Freq_inter里                  %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%matrix_k是频率插值正变换矩阵,取自328目录下的interleaver.m
Freq_inter=QPSK_map*matrix_k;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                       Differentiation,结果放在Diff_mo里                       %              
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%注意,此段程序以前并未编写过
%用了累计积cumprod,使程序更简单
Diff_mo=[];
for i_nk=1:k
    Diff_mo=[Diff_mo,cumprod(Freq_inter(:,i_nk))];
end
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                       OFDM Modulation,结果放在OFDM_mo里                      %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%OFDM调制器输入端,1536个信号点,前768个和后768个互换位置
%再补上512个0,凑足2048个点,存为OFDM_in
OFDM_in=[Diff_mo(:,k/2+1:k),zeros(n_data,512),Diff_mo(:,1:k/2)];

%每行分别进行2048点的IFFT变换,结果仍是同维的复数矩阵
%当参数x是一个矩阵时,ifft(x)会对x的每一列分别进行ifft计算,而我需要的是每行分别
%进行ifft,因此采用了先转置,再转置回来的方法,注意 .'表示只转置而不求共轭
OFDM_out=(ifft(OFDM_in.')).';

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%              给OFDM_mo里面的数加上guard interval,成为OFDM_guard              %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
OFDM_guard=[OFDM_out(:,1545:2048),OFDM_out];

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                            创造一帧数据,放在frame_1里                        %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
frame_1=[null,PRS];
for i_frame_1=1:n_data
frame_1=[frame_1,OFDM_guard(i_frame_1,:)];
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                           原始数据和待发送数据帧的存储                        %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
save('imp data.mat','mass_prj','frame_1');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -