【在AWGN噪声下对GMSK调制的GSM训练序列进行信道估计和均衡】估计和消除GSM-CommSense的GMSK调制信号的信道效应(Matlab代码实现)

   💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

 ⛳️赠与读者

💥1 概述

一、引言

二、GMSK调制与GSM训练序列

三、AWGN噪声模型

四、信道估计与均衡

1. 信道估计

2. 均衡算法

五、GSM-CommSense的GMSK调制信号信道效应估计与消除

六、仿真实验与结果分析

七、结论与展望

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


 ⛳️赠与读者

👨‍💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。

     或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎

💥1 概述

以下是一份关于在AWGN(加性高斯白噪声)噪声下对GMSK(高斯最小频移键控)调制的GSM(全球移动通信系统)训练序列进行信道估计和均衡,以及估计和消除GSM-CommSense的GMSK调制信号的信道效应的研究文档概述。

一、引言

GSM系统作为第二代移动通信系统的代表,其调制方式采用GMSK。在通信过程中,信道会受到各种干扰和噪声的影响,其中AWGN噪声是一种常见的干扰源。为了准确接收和解调GMSK调制信号,需要对信道进行估计和均衡,以消除信道效应对信号的影响。本文将研究在AWGN噪声下,如何利用GSM训练序列进行信道估计和均衡,并探讨如何估计和消除GSM-CommSense的GMSK调制信号的信道效应。

二、GMSK调制与GSM训练序列

GMSK是一种连续相位调制方式,具有恒定的包络和较小的频谱占用。在GSM系统中,GMSK调制被用于传输语音和数据信息。

GSM训练序列是一组已知的、在传输过程中不携带信息的比特序列。它们被插入到数据帧中,用于信道估计和同步。通过接收并分析训练序列,可以估计出信道的特性,并据此对接收到的数据进行均衡和纠错。

三、AWGN噪声模型

AWGN噪声是一种在通信系统中广泛存在的干扰源。它表现为在信号带宽内具有均匀功率谱密度的随机噪声。在AWGN噪声的影响下,接收到的信号会受到一定程度的失真和衰减。

四、信道估计与均衡

1. 信道估计

信道估计是通过接收到的信号和已知的训练序列来估计信道特性的过程。在GSM系统中,可以利用训练序列的已知特性来估计信道的频率响应和相位响应。

2. 均衡算法

均衡算法是用于消除信道效应对信号影响的算法。在GSM系统中,常用的均衡算法包括最小均方误差(MMSE)均衡和最大似然序列估计(MLSE)等。这些算法可以根据信道估计的结果,对接收到的信号进行补偿,以恢复原始信号。

五、GSM-CommSense的GMSK调制信号信道效应估计与消除

GSM-CommSense是一种用于监测和分析GSM通信系统性能的工具。在GSM-CommSense中,需要对GMSK调制信号的信道效应进行估计和消除,以提高系统的接收性能和准确性。

为了估计和消除GSM-CommSense的GMSK调制信号的信道效应,可以采取以下步骤:

  1. 接收GMSK调制信号,并提取其中的训练序列。
  2. 利用训练序列进行信道估计,得到信道的频率响应和相位响应。
  3. 根据信道估计的结果,选择合适的均衡算法对接收到的信号进行均衡处理。
  4. 对均衡后的信号进行解调和分析,以评估系统的性能。

六、仿真实验与结果分析

为了验证上述方法的有效性,可以进行仿真实验。实验过程中,可以模拟GSM通信系统的传输环境,包括AWGN噪声、信道特性等。通过对比不同信道估计和均衡算法的性能,可以评估它们的优劣,并优化算法参数以提高系统性能。

七、结论与展望

本文研究了在AWGN噪声下对GMSK调制的GSM训练序列进行信道估计和均衡的方法,并探讨了如何估计和消除GSM-CommSense的GMSK调制信号的信道效应。通过仿真实验,验证了所提方法的有效性。未来,可以进一步研究更高效的信道估计和均衡算法,以提高GSM通信系统的性能和稳定性。

📚2 运行结果

部分代码:

% Input Parameters

SNR = (-10:2:20)';                            % SNR Values in dB
N_iterations = input('Number of Iterations : ');         % maximum number of iterations
eq_selection = input('Select the equalizer (1=LS,2=ZFE) : ');
no_of_taps = input('Select the number of taps in the channel (5,8,11,14 taps) : ');
BT = 0.3;                                   % BT product of the filter
Tb = 1e-6;                                  % bit duration
B = BT/Tb;                                  % Bandwidth
sps = 36;                                   % samples per symbol
Ts = Tb/sps;                                % sample period
M = 0.5;                                    % Modulation Index
fc = 900e6;                                 % Career frequency
l = 1e-10;                                  % changes based on the valur of fc

for snr_calc = 1:length(SNR)
    BER_eq = [];                            %BER initialisation
    BER_normal = [];
    for er = 1:N_iterations
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Data Generation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        data = [0 0 1 0 0 1 0 1 1 1 0 0 0 0 1 0 0 0 1 0 0 1 0 1 1 1];   %Training Sequence(1 of 8 available in GSM)

        for k = 1:length(data)
            if data(k) == 0
                nrz_data(k) = -1;
            elseif data(k) == 1
                nrz_data(k) = 1;
            end 
        end
        
        gauss = gaussian_pulse_shaping_filter(BT,sps,Tb);       %Gaussian filter response
        
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Modulation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        nrz = upsample(nrz_data, sps);              %Upsampling the input symbols
        nrz_gauss = conv(gauss, nrz);               %Filtering with Gaussian response
        nrz_int = cumsum(nrz_gauss);                %Integrating the signal
        nrz_gmsk = exp(1i*nrz_int);           %Generating the signal
        I_data = imag(nrz_gmsk);
        Q_data = real(nrz_gmsk);
        
        k = length(nrz_gauss)*l;
        t1 = l:l:k;
        tx_signal = cos(2*pi*fc*t1).*Q_data - sin(2*pi*fc*t1).*I_data;      %The signal to be transmitted

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Channel Impairements %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%   ('h' is the Channel Impulse Response coefficients)
%   When choosing a particular value of 'h' make sure the 'eq_rx_signal'
%   command is also changed which appears after cancelling the channel effects.
    if no_of_taps == 5
          h = [0.0007,0.2605,0.9268,0.2605,0.0007]';              
%           eq_rx_signal = rx_signal(3:end-2);
%           eq_rx_signal = rx_signal(5:end-4);          When Equalizing
 
    elseif no_of_taps == 8

          h = [0.0007,0.0315,0.2605,0.7057,0.9268,0.7057,0.2605,0.0315]';                 
%           eq_rx_signal = rx_signal(5:end-3);
%           eq_rx_signal = rx_signal(9:end-6);          When Equalizing
  
    elseif no_of_taps == 11

          h = [0.0007,0.0108,0.0756,0.2605,0.5542,0.8272,0.9268,0.8272,0.5542,0.2605,0.0756]';        
%           eq_rx_signal = rx_signal(7:end-4);
%           eq_rx_signal = rx_signal(13:end-8);         When Equalizing


    elseif no_of_taps == 14
          h = [0.0007,0.0061,0.0315,0.1076,0.2605,0.4789,0.7057,0.8692,0.9268,0.8692,0.7057,0.4789,0.2605,0.1076]';       
%           eq_rx_signal = rx_signal(9:end-5);  
%           eq_rx_signal = rx_signal(16:end-11);        When Equalizing 

    else
        fprintf('Error: Select the number of taps from the mentioned values')
    end
        
        rx_signal = conv(h,tx_signal);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% AWGN %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        awgn_noise = awgn(rx_signal, SNR(snr_calc));           % adds white gaussian noise to the input signal
        rx_signal = rx_signal + awgn_noise;
        
        
        LP = fir1(20,0.05);                               % Low pass filter to be used for filtering the I and the Q signal.
        
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Demodulation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        %   Without Equalizing the channel

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

[1]辛富国,李荣芳,XINFu-guo,等.基于线性近似的GMSK信号调制及其信道估计[J].信息技术, 2014, 38(9):3.DOI:10.3969/j.issn.1009-2552.2014.09.034.

[2]刘沅陇,杨家玮,赵林靖.一种GMSK的均衡方法[J].电子科技, 2006(2):4.DOI:10.3969/j.issn.1007-7820.2006.02.009.

[3]肖露,李波,陈文艺,等.基于MLSE算法的GMSK均衡解调[J].西安邮电学院学报, 2022(6).

[14]李冰.基于DSP的GSM基站信息监测设备设计与实现[D].电子科技大学,2016. 

🌈4 Matlab代码实现

资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取

                                                           在这里插入图片描述

下面是GMSKAWGN、单径瑞利信道多径信道下的调制解调误码率曲线的MATLAB代码GMSK调制: ```matlab % GMSK调制 fc = 1000; %载波频率 fs = 10000; %采样率 T = 1/fs; %采样时间 BT = 0.3; %带限时间乘积 fc1 = 2*BT/T; %高斯滤波器截止频率 N = 1000; %符号数 t = 0:T:(N-1)*T; %时间序列 d = randi([0 1],1,N); %随机产生0、1比特序列 d(d==0) = -1; %将0映射为-1 y = zeros(1,length(t)); %初始化调制信号 y(1) = d(1); %初相 for n = 2:N y(n) = y(n-1)*exp(-1j*pi*BT*(n-1)*T)*(1j*d(n-1)) + conj(y(n-1))*exp(1j*pi*BT*(n-1)*T)*(1j*d(n)); end s = real(y.*exp(1j*2*pi*fc*t)); %加上载波 ``` GMSK解调: ```matlab % GMSK解调 fc = 1000; %载波频率 fs = 10000; %采样率 T = 1/fs; %采样时间 BT = 0.3; %带限时间乘积 fc1 = 2*BT/T; %高斯滤波器截止频率 N = 1000; %符号数 t = 0:T:(N-1)*T; %时间序列 d = randi([0 1],1,N); %随机产生0、1比特序列 d(d==0) = -1; %将0映射为-1 y = zeros(1,length(t)); %初始化调制信号 y(1) = s(1); %初相 for n = 2:N y(n) = y(n-1)*exp(-1j*2*pi*fc*T)*(1j*s(n-1)) + conj(y(n-1))*exp(1j*2*pi*fc*T)*(1j*s(n)); end h = gaussdesign(BT,1/fs); %设计高斯滤波器 y1 = conv(y,h,'same'); %滤波 y2 = y1(1:fs/fc:end); %下采样 y3 = y2(1:N-1).*conj(y2(2:N)); %乘积运算 d1 = zeros(1,length(y3)); %初始化解调比特序列 for n = 1:length(y3) if real(y3(n)) > 0 d1(n) = 1; else d1(n) = 0; end end BER = sum(d~=d1)/N; %误码率计算 disp(['误码率为:' num2str(BER)]); ``` GMSKAWGN信道下的误码率曲线: ```matlab % GMSKAWGN信道下的误码率曲线 EbN0 = -5:1:15; %信噪比范围 N = 1000; %符号数 d = randi([0 1],1,N); %随机产生0、1比特序列 d(d==0) = -1; %将0映射为-1 BER = zeros(1,length(EbN0)); %误码率 for i = 1:length(EbN0) SNR = EbN0(i) + 10*log10(2*BT/T); s = awgn(GMSK_modulation(d,T,fc,BT),SNR,'measured'); %加入AWGN噪声 d1 = GMSK_demodulation(s,T,fc,BT); %解调 BER(i) = sum(d~=d1)/N; %计算误码率 end semilogy(EbN0,BER); %绘制误码率曲线 xlabel('Eb/N0(dB)'); ylabel('BER'); title('GMSKAWGN信道下的误码率曲线'); ``` GMSK在单径瑞利信道下的误码率曲线: ```matlab % GMSK在单径瑞利信道下的误码率曲线 EbN0 = -5:1:15; %信噪比范围 N = 1000; %符号数 d = randi([0 1],1,N); %随机产生0、1比特序列 d(d==0) = -1; %将0映射为-1 BER = zeros(1,length(EbN0)); %误码率 for i = 1:length(EbN0) SNR = EbN0(i) + 10*log10(2*BT/T); s = rayleighchan(T,fc,1,0); %创建瑞利信道 s.StoreHistory = 1; %存储信道历史 y = filter(s,s.GaussianNoise(GMSK_modulation(d,T,fc,BT),SNR)); %加入瑞利信道噪声 s = s.ResetBeforeFiltering; %重置信道 d1 = GMSK_demodulation(y,T,fc,BT); %解调 BER(i) = sum(d~=d1)/N; %计算误码率 end semilogy(EbN0,BER); %绘制误码率曲线 xlabel('Eb/N0(dB)'); ylabel('BER'); title('GMSK在单径瑞利信道下的误码率曲线'); ``` GMSK在多径信道下的误码率曲线: ```matlab % GMSK在多径信道下的误码率曲线 EbN0 = -5:1:15; %信噪比范围 N = 1000; %符号数 d = randi([0 1],1,N); %随机产生0、1比特序列 d(d==0) = -1; %将0映射为-1 BER = zeros(1,length(EbN0)); %误码率 for i = 1:length(EbN0) SNR = EbN0(i) + 10*log10(2*BT/T); s = rayleighchan(T,fc,[0 1e-5 1],[0 -20 -30]); %创建多径信道 s.StoreHistory = 1; %存储信道历史 y = filter(s,s.GaussianNoise(GMSK_modulation(d,T,fc,BT),SNR)); %加入多径信道噪声 s = s.ResetBeforeFiltering; %重置信道 d1 = GMSK_demodulation(y,T,fc,BT); %解调 BER(i) = sum(d~=d1)/N; %计算误码率 end semilogy(EbN0,BER); %绘制误码率曲线 xlabel('Eb/N0(dB)'); ylabel('BER'); title('GMSK在多径信道下的误码率曲线'); ``` 其中,`GMSK_modulation``GMSK_demodulation`函数分别实现GMSK调制解调的过程。在多径信道下的信道模型使用了`rayleighchan`函数,其中`[0 1e-5 1]`表示多径强度,`[0 -20 -30]`表示多径相对时延。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值