1.qammod函数作用
2.不同阶QAM调制星座图中,源码符号能量的源码归一化计算原理
3.(含matlab完整源码)手搓16QAM调制解调系统
4.Matlab产生QAM信号
5.求OFDM系统信道估计技术的MATLAB代码!
qammod函数作用
mod函数是源码一个用来求余数函数,返回两数相除的源码余数。
mod函数在Excel中一般不单独使用,源码经常和其他函数组合起来使用。源码mackdj选股源码
2.mod函数的源码语法格式=mod(number,divisor)=mod(被除数,除数)。源码我们经常使用的源码是能否被2整除,返回1和0两种值的源码特性。mod函数是源码一个求余函数,其格式为: mod(nExp1,源码nExp2),即是源码同城论坛源码大全两个数值表达式作除法运算后的余数。特别注意:在EXCEL中,源码MOD函数是源码用于返回两数相除的余数,返回结果的符号与除数(divisor)的符号相同。mod函数是一个求余函数,其格式为: mod(nExp1,nExp2),即是两个数值表达式作除法运算后的余数。那么:两个同号整数求余与你所知的两个正数求余完全一样(即两个负整数与两个正整数的算法一样),即两数取余后返回两数相除的余数。
不同阶QAM调制星座图中,符号能量的归一化计算原理
在使用QAM调制的Matlab仿真过程中,一个常见的疑惑是关于二进制比特流如何映射到QAM符号上,尤其当涉及到不同阶数的dw爱心代码源码QAM,如4QAM(QPSK)、QAM、QAM和QAM。在此,我们将探讨符号能量的归一化计算,这对于理解各阶QAM之间的关系至关重要。
首先,对于QPSK(4QAM),其符号通常采用格雷编码。我们熟知QPSK符号的归一化过程是将每个符号(如1+1i)除以其能量,即[公式],这通常通过matlab的球赛网站源码在哪qammod函数中的“UnitAveragePower”参数实现。然而,理解这个计算背后的原理有助于我们扩展到更高阶的QAM。
QPSK符号的归一化能量计算基于其四种等概率出现的符号,每个符号的能量为[公式],平均能量为[公式]。为了将能量归一化到1,横纵坐标的幅值和相位均需除以[公式],结果是0. + 0.i等四个符号。
对于QAM,其符号能量计算更为复杂,信号幅度和相位各有4种取值。每个符号的起点源码官网能量和出现概率不同,总能量为[公式],归一化后每个符号的横纵坐标则除以[公式]。例如,一个符号可能为[公式]。
对于QAM和QAM,计算方法类似,只是符号数量和能量取值会相应增加。在Matlab中,可以使用特定函数或参数(如Intger,k_4qam和'gray',以及'UnitAveragePower', true)来得到归一化后的符号。
通过这些计算,我们可以直观地看到不同阶数QAM调制下,符号能量归一化后的表现形式。总的来说,理解并掌握这些计算原理,有助于我们在实际应用中更准确地处理和分析QAM调制的信号。
(含matlab完整源码)手搓QAM调制解调系统
在通信领域,QAM调制方式在OFDM系统中广泛应用,因其先进的调制特性。为深入理解QAM系统运行机制,我在理论学习之余,决定自行使用MATLAB编程实现从头至尾的QAM调制解调系统,以获得更为直观的感受和体验。
起初,我发现MATLAB库中提供了现成的qammod函数,使用几行代码即可轻松完成任务。然而,为了达到对系统运作过程的深入理解,我决定从零开始,亲手搭建QAM系统,从产生UNRZ波形、串并转换,到星座图映射、QAM调制,最终过AWGN信道并解调,每一步都通过figure展示码元波形及调制前后的星座图,以利于学习。
整个MATLAB代码共行,详细内容请下拉查看。此项目旨在提供一个实用的参考案例,欢迎各位同行学习参考。
在编程过程中,我参考了多本专业书籍和博客,并在此对各位前辈表示诚挚的感谢。相关资源链接如下:[1][2][3]。理论与实践相结合,方能深刻理解技术。希望此项目能对大家的学习和工作有所启发。
Matlab产生QAM信号
通过Matlab内置函数“qammod”可以生成QAM信号,该方法简便快捷。
QAM信号的频谱图与时域波形图如下展示,从图中可以看到信号的带宽和幅度特征。
接着是QAM信号的频谱与语图,进一步展示了高阶QAM信号的复杂性与信息承载能力。
最后是QAM信号的频谱与语图,这种高阶调制方式在信号处理中尤为关键,能够提供更高的数据传输速率。
虽然我对QAM调制的理解尚浅,但通过实践和探索,我希望能更深入地理解其工作原理和应用。欢迎各位在技术领域中分享经验,共同探讨QAM信号的奥秘。
求OFDM系统信道估计技术的MATLAB代码!
clear all;
close all;
clc;
fprintf('OFDM信道估计仿真\n\n');
num_sc = ; %-----------载波数目 简化为
num_symbol = ; %--------------OFDM符号个数
data_symbol = [0,1,2,4,5,6,7,8,9,,,];
pilot_symbol = [3,];
cp_len = [,,,,,,,,,,,,,];
modulation_mode = ;%---------调制方式
q = ;
time_offset = 1; %us
time_offset = ceil(time_offset * .); %M bandwidth
SNR = 0:2:;%-------------信噪比取值
num_loop = ;%-----------------循环次数
num_ant = 2;
num_bit_err=zeros(length(SNR),num_loop);
num_bit_err_dft=zeros(length(SNR),num_loop);
num_bit_err_ls=zeros(length(SNR),num_loop);
MSE=zeros(length(SNR),num_loop);
MSE1=zeros(length(SNR),num_loop);
MSE2=zeros(length(SNR),num_loop);
%%%%%%%%%%%%%%%%%%%%%%%Rx信号产生%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%---------------产生发送的随机序列————————————————————-
BitsLen = num_sc * length(data_symbol);
BitsTx = randint(1,BitsLen);
%---------------符号调制---------------------------------------—————
Modulated_Sequence=qammod(BitsTx,modulation_mode);
%---------------产生导频序列---------------------------------------———
prime_num = primes(num_sc);
prime_num = max(prime_num);
m = 0 : num_sc-1;
xq = exp(-j*(pi*q*m.*(m+1)/prime_num));
pilot_symbols = xq( mod(m, prime_num) +1 );
pilot_symbols = pilot_symbols.';
%----------------导频插入-------------------------------------——————
piloted_ofdm_syms = zeros(num_sc, num_symbol);
piloted_ofdm_syms(:, data_symbol + 1) = reshape(Modulated_Sequence, num_sc, length(data_symbol));
piloted_ofdm_syms(:, pilot_symbol + 1) = repmat(pilot_symbols, 1, length(pilot_symbol));
%----------------IFFT变换—————————————————————————
time_signal = sqrt(num_sc) * ifft(piloted_ofdm_syms);
%----------------加循环前缀------------------------------------—————
Tx_data_trans = [];
for k = 1 : num_symbol
add_cyclic_signal = [time_signal(num_sc - cp_len(k)+1 : num_sc, k); time_signal(:, k)].';
Tx_data_trans = [Tx_data_trans,add_cyclic_signal];
end
%%%%%%%%%%%%%%%%%%%%%%%主程序循环%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for c1 = 1:length(SNR)
fprintf('\n\n\n仿真信噪比为%f\n\n',SNR(c1));
for num1 = 1:num_loop
%----------------信道处理--------------------------------------
%ADD awgn
Tx_signal_power = sum(abs(Tx_data_trans(:)).^2) / length(Tx_data_trans(:));
noise_var = Tx_signal_power/(^(SNR(c1)/));
Rx_data(1, :) = awgn(Tx_data_trans, SNR(c1), 'measured');
Rx_data(2, :) = awgn(Tx_data_trans, SNR(c1), 'measured');
%ADD TO 正时偏
Rx_data(1, :) = [zeros(1,time_offset),Rx_data(1, 1:length(Tx_data_trans)-time_offset),];
Rx_data(2, :) = [zeros(1,time_offset),Rx_data(2, 1:length(Tx_data_trans)-time_offset),];
% %ADD TO 负时偏
% Rx_data(1, :) = [Rx_data(1, time_offset+1:length(Tx_data_trans)),zeros(1,time_offset)];
% Rx_data(2, :) = [Rx_data(2, time_offset+1:length(Tx_data_trans)),zeros(1,time_offset)];
%----------------信号接收、去循环前缀、FFT变换-----------------
%Ant0
total_len=0;
for k=1 : num_symbol
Rx_signal_matrix(:, k) = Rx_data(1, total_len+cp_len(k)+1 : total_len+cp_len(k)+num_sc).';
total_len = total_len+cp_len(k)+num_sc;
end
Rx_carriers_ant0 = fft(Rx_signal_matrix)/sqrt(num_sc);
%Ant1
total_len=0;
for k=1 : num_symbol
Rx_signal_matrix(:, k) = Rx_data(2, total_len+cp_len(k)+1 : total_len+cp_len(k)+num_sc).';
total_len = total_len+cp_len(k)+num_sc;
end
Rx_carriers_ant1 = fft(Rx_signal_matrix)/sqrt(num_sc);
%----------------导频和数据提取--------------------------------
Rx_pilot_ant0 = Rx_carriers_ant0(:, pilot_symbol+1);
Rx_data_ant0 = Rx_carriers_ant0(:, data_symbol+1);
Rx_pilot_ant1 = Rx_carriers_ant1(:, pilot_symbol+1);
Rx_data_ant1 = Rx_carriers_ant1(:, data_symbol+1);
%----------------导频位置LS信道估计------------------------———
pilot_patt = repmat(pilot_symbols, 1, length(pilot_symbol));
pilot_esti_ant0 = Rx_pilot_ant0.*conj(pilot_patt);
pilot_esti_ant1 = Rx_pilot_ant1.*conj(pilot_patt);
%----------------LS估计的信道系数平铺———————————————
LS_channel_coeff_ant0 = [repmat(pilot_esti_ant0(:, 1), 1, length(data_symbol)/2), ...
repmat(pilot_esti_ant0(:, 2), 1, length(data_symbol)/2)];
LS_channel_coeff_ant1 = [repmat(pilot_esti_ant1(:, 1), 1, length(data_symbol)/2), ...
repmat(pilot_esti_ant1(:, 2), 1, length(data_symbol)/2)];
%----------------导频位置DFT信道估计----------------------------
Tx_pilot_estimate_ifft_ant0 = ifft(pilot_esti_ant0);
Tx_pilot_estimate_ifft_ant1 = ifft(pilot_esti_ant1);
stem(1:, Tx_pilot_estimate_ifft_ant0(:,1));
grid on;
h_len = cp_len(2);
Tx_pilot_estimate_ifft_ant0(h_len+1 : num_sc-h_len, :) = 0;
Tx_pilot_estimate_dft_ant0 = fft(Tx_pilot_estimate_ifft_ant0);
Tx_pilot_estimate_ifft_ant1(h_len+1 : num_sc-h_len, :) = 0;
Tx_pilot_estimate_dft_ant1 = fft(Tx_pilot_estimate_ifft_ant1);
%----------------DFT估计的信道系数平铺———————————————
DFT_channel_coeff_ant0 = [repmat(Tx_pilot_estimate_dft_ant0(:, 1), 1, length(data_symbol)/2),...
repmat(Tx_pilot_estimate_dft_ant0(:, 2), 1, length(data_symbol)/2)];
DFT_channel_coeff_ant1 = [repmat(Tx_pilot_estimate_dft_ant1(:, 1), 1, length(data_symbol)/2),...
repmat(Tx_pilot_estimate_dft_ant1(:, 2), 1, length(data_symbol)/2)];
%----------------ZF OR MRC EQ----------------------
Tx_data_estimate_dft = (Rx_data_ant0.*conj(DFT_channel_coeff_ant0) + Rx_data_ant1.*conj(DFT_channel_coeff_ant1))...
./((abs(DFT_channel_coeff_ant0).^2) + (abs(DFT_channel_coeff_ant0).^2));
Tx_data_estimate_ls = (Rx_data_ant0.*conj(LS_channel_coeff_ant0) + Rx_data_ant1.*conj(LS_channel_coeff_ant1))...
./((abs(LS_channel_coeff_ant0).^2) + (abs(LS_channel_coeff_ant1).^2));
%----------------DFT符号解调------------------------------------
demod_in_dft=Tx_data_estimate_dft(:).';
demod_out_dft=qamdemod(demod_in_dft,modulation_mode);
%----------------LS符号解调------------------------------------
demod_in_ls=Tx_data_estimate_ls(:).';
demod_out_ls=qamdemod(demod_in_ls,modulation_mode);
%----------------误码率的计算-----------------------------------
for i=1:length(BitsTx)
if demod_out_dft(i)~=BitsTx(i)
num_bit_err_dft(c1,num1)=num_bit_err_dft(c1,num1)+1;
end
if demod_out_ls(i)~=BitsTx(i)
num_bit_err_ls(c1,num1)=num_bit_err_ls(c1,num1)+1;
end
end
end
end
BER_dft=mean(num_bit_err_dft.')/length(BitsTx);
BER_ls=mean(num_bit_err_ls.')/length(BitsTx);
%%%%%%%%%%%%%%%%%%%a%%%%%%%%主程序循环换结束%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure;
semilogy(SNR,BER_dft,'-mp',SNR,BER_ls,'-k+');
xlabel('SNR');
ylabel('BER');
legend('DFT信道估计','LS信道估计');
title('OFDM系统的LS和DFT信道估计');
grid on;