% 基带数据信息
N = 64; % 子载波数
n = 48; % 用于传输数据的子载波数
CP = 16; % 循环前缀长度
M = 4; % 星座点数,本示例使用 QPSK 调制
modulation = 'QPSK'; % 调制方式
% 发送端
tx_data = randi([0 M-1],n,1); % 随机生成传输数据
pilots = randi([0 M-1],N-n,1); % 随机生成用于信道估计的导频序列
% 调制
modulated_data = qammod(tx_data,M); % 调制传输数据
modulated_pilots = qammod(pilots,M); % 调制导频序列
% 构造频域信号
tx_data_freq = zeros(N,1);
tx_data_freq([1:n/2+1 N-n/2+2:N]) = modulated_data; % 插入数据子载波
tx_data_freq(n/2+2:n/2+N-n) = modulated_pilots; % 插入导频子载波
% IFFT
tx_data_time = ifft(tx_data_freq,N);
% 添加循环前缀
tx_data_cp = [tx_data_time(N-CP+1:N); tx_data_time];
% 通过信道
snr = 10; % 信噪比
rx_data_cp = awgn(tx_data_cp,snr);
% 接收端
rx_data = rx_data_cp(CP+1:CP+n);
% 解调
demodulated_data = qamdemod(rx_data,M);
% 性能评估
ber = sum(abs(demodulated_data - tx_data))/n; % 计算误比特率
disp(['误比特率 = ' num2str(ber)]);
%% 绘制OFDM的频谱以及波形图
% 频谱
figure(1)
f = -N/2:N/2-1;
plot(f, fftshift(abs(tx_data_freq)))
title('OFDM频谱')
xlabel('子载波编号')
ylabel('幅度')
% 波形
figure(2)
subplot(211)
plot(real(tx_data_time))
title('OFDM时域波形(实部)')
xlabel('时间')
ylabel('幅度')
subplot(212)
plot(imag(tx_data_time))
title('OFDM时域波形(虚部)')
xlabel('时间')
ylabel('幅度')
%% 功率谱密度分析
% 发送信号的功率谱密度
pwelch(tx_data_cp,[],[],[],1,'twosided');
% 接收信号的功率谱密度
pwelch(rx_data_cp,[],[],[],1,'twosided');
以上是完整代码,第十九行“tx_data_freq(n/2+2:n/2+N-n) = modulated_pilots; % 插入导频子载波”matlab一直报错,说两边元素不对等,无法执行赋值,是怎么回事呀?有懂OFDM仿真代码的看一看