MFSK调制方式的频谱效率,误码率,频谱等matlab仿真

342 阅读3分钟

1.算法仿真效果

matlab2022a仿真结果如下:

1.png

2.png

3.png

4.png

5.png

6.png 2.算法涉及理论知识概要

        数字信号传输系统分为基带传输系统和频带传输系统.频带传输系统也叫数字调制系统。数字调制信号又称为键控信号,数字调制过程中处理的是数字信号,而载波有振幅、频率和相位3个变量,且二进制的信号只有高低电平两个逻辑量1和0,所以调制的过程可用键控的方法由基带信号对载频信号的振幅、频率及相位进行调制,最基本的方法有3种:正交幅度调制(QAM)、频移键控(FSK)、相移键控(PSK).根据所处理的基带信号的进制不同分为二进制和多进制调制(M 进制).多进制数字调制与二进制相比,其频谱利用率更高。

 

       MFSK系统是2FSK(二频键控)系统的推广,该系统有M个不同的载波频率可供选择,每一个载波频率对应一个M进制码元信息,即用多个频率不同的正弦波分别代表不同的数字信号,在某一码元时间内只发送其中一个频率。MFSK信号可表示为:

 

6dfcba2eb3874306c83748422c3a602b_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

 

       为载波角频率,通常采用相位不连续的振荡频率,这样便于利用合成器来提供稳定的信号频率。图1 为MFSK系统的原理框图。在发送端,输入的二进制码元经过逻辑电路和串/并变换电路转换为M进制码元,每k位二进制码分为一组,用来选择不同的发送频率。在接收端,当某一载波频率到来时,只有相应频率的带通滤波器能收到信号,其它带通滤波器输出的都是噪声。抽样判决器的任务就是在某一时刻比较所有包络检波器的输出电压,通过选择最大值来进行判决。将最大值输出就得到一个M进制码元,然后,再经过逻辑电路转换成k位二进制并行码,再经过并/串变换电路转换成串行二进制码,从而完成解调过程。

 

 

68c76d1777d35cb2eda73bd31b08c5cf_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

 

 

 

 

 

3.MATLAB核心程序 `for i=1:length(data)

    tSym = (i-1)symDur:Ts:(symDuri);% symbol duration

    tmp = cos(2pitSym* freqs(data(i)+1));%%modulate data with corresponding frequency

    mod = [mod tmp];%append the symbol duration to complete signal

    subplot(2,1,2);plot(tSym,tmp,'color', colors(data(i)+1,:));

    title("Modulated Signal @TX");xlabel('Time');ylabel("Amplitude[V]")

    hold on; axis([0 tSym(end) -2 2]);

    hold on

end

 

F = linspace(-fs/2,fs/2, numel(mod));%frequency range for plotting

t = linspace(0,numel(data),numel(mod));%time range for plotting

fft_TX = fftshift(abs(fft(mod)));

fft_TX = 1/numel(fft_TX)*fft_TX;%Mag spectrum of signal

figure;

plot(F,fft_TX);title("Mag. Spectrum of Signal @TX");xlabel('Freq. [Hz]');ylabel("Magnitude[V]")

 

 

figure;

noisy_sig = awgn(mod,-2,'measured');%pass signal through awgn ch.

subplot(2,1,1);plot(t,noisy_sig);title("FSK Signal @RX");xlabel('Time');ylabel("Amplitude[V]")

 

fft_NO = fftshift(abs(fft(noisy_sig)));

fft_NO = 1/numel(fft_NO)*fft_NO;%spectrum @ RX

subplot(2,1,2);plot(F,fft_NO);title("Mag. Spectrum of Signal @RX");

xlabel('Freq. [Hz]');ylabel("Magnitude[V]")

 

n_sym=numel(data);

n_mod=numel(mod);

sPerSymb = n_mod/n_sym;%sample per symbol

n_freqs=numel(freqs)

correlator = zeros(n_sym,n_freqs);%preallocation for demoding

%each row is repsenting period for one symbol

%columns are representing the correlator output for a freq in a sym period

 

for i=1:n_sym

    tSym = (i-1)symDur:Ts:(symDuri);

    for j=1:n_freqs

        out = noisy_sig((i-1)sPerSymb+1:isPerSymb).cos(2pitSym freqs(j));

        %multiplying with cos waves at expected freqs in above line

        correlator(i,j) = trapz(tSym,out);

        %integrating multiplied signal and inserting to a matrix

    end

end`