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

📄 ofdm_trans.m

📁 有关 信道编译码的源代码等等等
💻 M
字号:
%DVB-T 2K Transmission
%The available bandwidth is 8 MHz
%2K is intended for mobile services
clear all;
close all;
%--------------------------DVB-T Parameters---------------------------------------------------------
Tu=224e-6;                                                      %useful OFDM symbol period
T=Tu/2048;                                                      %baseband elementary period
G=0;                                                            %choice of 1/4, 1/8, 1/16, and 1/32
delta=G*Tu;                                                     %guard band duration
Ts=delta+Tu;                                                    %total OFDM symbol period
Kmax=1705;                                                      %number of subcarriers
Kmin=0;
FS=4096;                                                        %IFFT/FFT length
q=10;                                                           %carrier period to elementary period ratio
fc=q*1/T;                                                       %carrier frequency
Rs=4*fc;                                                        %simulation period
t=0:1/Rs:Tu;
%--------------------------Data generator (A)-------------------------------------------------------
M=Kmax+1;                                                       %所有子载波的数目
rand('state',0);                                                %确定随机变量种子   
a=-1+2*round(rand(M,1)).'+i*(-1+2*round(rand(M,1))).';          %生成信息位的复数据,实部与虚部变化范围为-1到1   
A=length(a);                                                    %信息位长度
info=zeros(FS,1);                                               %信息位数据先赋零
info(1:(A/2)) = [ a(1:(A/2)).'];                                %信息位从1到1706/2赋随机复数
info((FS-((A/2)-1)):FS) = [ a(((A/2)+1):A).'];                  %信息位从4906-1706/2+1赋随机复数,中间部分全部赋零
%----------------------------Subcarriers generation (B)-------------------------------------------------
carriers=FS.*ifft(info,FS);                                     %对信息位作长度为4096的IFFT(OFDM调制)
tt=0:T/2:Tu;                                                    %由于重采样信息位之间时间间隔有T变化为T/2
figure(1);
subplot(211);
stem(tt(1:20),real(carriers(1:20)));                            %画出前20个调制数据的实部
subplot(212);
stem(tt(1:20),imag(carriers(1:20)));                            %画出前20个调制数据的虚部
figure(2);
f=(2/T)*(1:(FS))/(FS);                                          %给出调制数据的频率尺度f
subplot(211);
plot(f,abs(fft(carriers,FS))/FS);                               %画出调制数据的频域幅度谱
subplot(212);
pwelch(carriers,[],[],[],2/T);                                  %画出调制数据的功率谱密度
% -------------------------------D/A simulation---------------------------------------------------------------
L = length(carriers);                                           %调制数据长度
chips = [ carriers.';zeros((2*q)-1,L)];                         %以下七句模拟连续的调制数据(实际上就是将抽样率升至RS)
p=1/Rs:1/Rs:T/2;
g=ones(length(p),1);                                            %pulse shape
figure(3);
stem(p,g);
dummy=conv(g,chips(:));
u=[dummy(1:length(t))];                                         % (C)
figure(4);
subplot(211);
plot(t(1:400),real(u(1:400)));                                  %画出连续调制数据的前400点的实部
subplot(212);
plot(t(1:400),imag(u(1:400)));                                  %画出连续调制数据的前400点的虚部
figure(5);
ff=(Rs)*(1:(q*FS))/(q*FS);                                      %给出连续调制数据的频率尺度ff    
subplot(211);
plot(ff,abs(fft(u,q*FS))/FS);                                   %给出连续调制数据的频域幅度谱
subplot(212);
pwelch(u,[],[],[],Rs);                                          %画出连续调制数据的功率谱密度
[b,a] = butter(13,1/20);                                        %reconstruction filter
[H,F] = FREQZ(b,a,FS,Rs);                                       %给出低通滤波器的频响特性
figure(6);
plot(F,20*log10(abs(H)));                                       %画出低通频响 
uoft = filter(b,a,u);                                           %连续数据过低通
figure(7);
subplot(211);
plot(t(80:480),real(uoft(80:480)));                             %画出经过低通的数据的实部
subplot(212);
plot(t(80:480),imag(uoft(80:480)));                             %画出经过低通的数据的虚部
figure(8);
subplot(211);
plot(ff,abs(fft(uoft,q*FS))/FS);                                %画出过D/A变换后的数据的频域幅度谱
subplot(212);
pwelch(uoft,[],[],[],Rs);                                       %画出过D/A变换后的数据的功率谱密度
%-----------------------------------Upconverter---------------------------------------------------------
s_tilde=(uoft.').*exp(1i*2*pi*fc*t);                            %以fc为载波对经过D/A变换后的数据作上变频
s=real(s_tilde);                                                %passband signal (E)
figure(9);
plot(t(80:480),s(80:480));                                      %画出经过上变频后的数据
figure(10);
subplot(211);
%plot(ff,abs(fft(((real(uoft).').*cos(2*pi*fc*t)),q*FS))/FS);   
%plot(ff,abs(fft(((imag(uoft).').*sin(2*pi*fc*t)),q*FS))/FS);
plot(ff,abs(fft(s,q*FS))/FS);                                   %画出经过上变频后的数据的频域幅度谱
subplot(212);
%pwelch(((real(uoft).').*cos(2*pi*fc*t)),[],[],[],Rs);
%pwelch(((imag(uoft).').*sin(2*pi*fc*t)),[],[],[],Rs);
pwelch(s,[],[],[],Rs);                                          %画出经过上变频后的数据的功率谱密度

⌨️ 快捷键说明

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