如何用matlab产生一个ofdm信号

想用matlab离线产生一个2Gbit尀s的OFDM信号,希望高手教一下
2025-01-19 19:41:38
推荐回答(3个)
回答1:

clear all;
close all;
Tu=224e-6;%符号周期
T=Tu/2048;%基带元素周期
G=1/4;
delta=G*Tu;
Ts=delta+Tu;
Kmax=1705;
Kmin=0;
FS=4096;
q=10;
fc=q*1/T;
Rs=4*fc;
t=0:1/Rs:Tu;
M=Kmax+1;
rand('state',0);
a=-1+2*round(rand(M,1)).'+i*(-1+2*round(rand(M,1))).';
A=length(a);
info=zeros(FS,1);
info(1:(A/2))=[a(1:(A/2)).'];
info((FS-((A/2)-1)):FS)=[a(((A/2)+1):A).'];
carriers=FS.*ifft(info,FS);
tt=0:T/2:Tu;
figure(1);
subplot(211);
stem(tt(1:20),real(carriers(1:20)));
subplot(212);
stem(tt(1:20),imag(carriers(1:20)));
figure(2);
f=(2/T)*(1:(FS))/(FS);
subplot(211);
plot(f,abs(fft(carriers,FS))/FS);
[Pxx,f]=pwelch(carriers,[],[],[],2/T);
plot_Pxx1=10*log10(Pxx);
subplot(212);
plot(f,plot_Pxx1);
L=length(carriers);
chips=[carriers.';zeros((2*q)-1,L)];
p=1/Rs:1/Rs:T/2;
g=ones(length(p),1);
figure(3);
stem(p,g);
dummy=conv(g,chips(:));
u=[dummy(1:length(t))];
figure(4);
subplot(211);
plot(t(1:400),real(u(1:400)));
subplot(212);
plot(t(1:400),imag(u(1:400)));
figure(5);
ff=(Rs)*(1:(q*FS))/(q*FS);
subplot(211);
plot(ff,abs(fft(u,q*FS))/FS);
[Pxx,f]=pwelch(u,[],[],[],Rs);
plot_Pxx2=10*log10(Pxx);
subplot(212);
plot(f,plot_Pxx2);
[b,a]=butter(13,1/20);
[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);
[Pxx,f]=pwelch(uoft,[],[],[],Rs);
plot_Pxx3=10*log10(Pxx);
plot(f,plot_Pxx3);
s_tilde=(uoft.').*exp(1i*2*pi*fc*t);
s=real(s_tilde);
figure(9);
plot(t(80:480),s(80:480));
figure(10);
subplot(211);
plot(ff,abs(fft(s,q*FS))/FS);
[Pxx,f]=pwelch(s,[],[],[],Rs);
plot_Pxx4=10*log10(Pxx);
subplot(212);
plot(f,plot_Pxx4);
figure(11);
subplot(211);
plot(ff,abs(fft(((real(uoft).').*cos(2*pi*fc*t)),q*FS))/FS);
figure(12);
subplot(211);
plot(ff,abs(fft(((imag(uoft).').*sin(2*pi*fc*t)),q*FS))/FS);
[Pxx,f]=pwelch(((imag(uoft).').*sin(2*pi*fc*t)),[],[],[],Rs);
plot_Pxx6=10*log10(Pxx);
subplot(212);
plot(f,plot_Pxx6);
%

可以试一试,具体的我也不是很懂

回答2:

看看Simulink里有没有ofdm模块。

回答3:

这个很复杂啊