1.qammod函数作用
2.不同阶QAM调制星座图中,源码符号能量的源码归一化计算原理
3.(含matlab完整源码)手搓16QAM调制解调系统
4.Matlab产生QAM信号
5.求OFDM系统信道估计技术的MATLAB代码!
qammod函数作用
mod函数是源码一个用来求余数函数,返回两数相除的源码余数。
mod函数在Excel中一般不单独使用,源码经常和其他函数组合起来使用。源码短视频服务器源码
2.mod函数的源码语法格式=mod(number,divisor)=mod(被除数,除数)。源码我们经常使用的源码是能否被2整除,返回1和0两种值的源码特性。mod函数是源码一个求余函数,其格式为: mod(nExp1,源码nExp2),即是源码棋牌源码百万源码社区两个数值表达式作除法运算后的余数。特别注意:在EXCEL中,源码MOD函数是源码用于返回两数相除的余数,返回结果的符号与除数(divisor)的符号相同。mod函数是一个求余函数,其格式为: mod(nExp1,nExp2),即是两个数值表达式作除法运算后的余数。那么:两个同号整数求余与你所知的两个正数求余完全一样(即两个负整数与两个正整数的算法一样),即两数取余后返回两数相除的余数。
不同阶QAM调制星座图中,符号能量的归一化计算原理
在使用QAM调制的Matlab仿真过程中,一个常见的疑惑是关于二进制比特流如何映射到QAM符号上,尤其当涉及到不同阶数的源码之家的源码怎么使用QAM,如4QAM(QPSK)、QAM、QAM和QAM。在此,我们将探讨符号能量的归一化计算,这对于理解各阶QAM之间的关系至关重要。
首先,对于QPSK(4QAM),其符号通常采用格雷编码。我们熟知QPSK符号的归一化过程是将每个符号(如1+1i)除以其能量,即[公式],这通常通过matlab的互助php源码网站源码下载qammod函数中的“UnitAveragePower”参数实现。然而,理解这个计算背后的原理有助于我们扩展到更高阶的QAM。
QPSK符号的归一化能量计算基于其四种等概率出现的符号,每个符号的能量为[公式],平均能量为[公式]。为了将能量归一化到1,横纵坐标的幅值和相位均需除以[公式],结果是0. + 0.i等四个符号。
对于QAM,其符号能量计算更为复杂,信号幅度和相位各有4种取值。每个符号的简单的php源码源码下载能量和出现概率不同,总能量为[公式],归一化后每个符号的横纵坐标则除以[公式]。例如,一个符号可能为[公式]。
对于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;