Matlab FM解调和消除相位折叠效应

Posted

技术标签:

【中文标题】Matlab FM解调和消除相位折叠效应【英文标题】:Matlab FM Demodulation and Get Rid of Phase Folding Effect 【发布时间】:2021-04-03 02:44:59 【问题描述】:

我有一个用于频率调制和解调信号的 matlab 代码。我的代码适用于调制部分。我的消息信号是m,调制信号是u,代码将消息信号及其积分绘制在一张图中,用于绘制1。 然后用载波调制的信号和程序在时域中绘制调制信号以绘制 2。 之后,通过一些代码块程序找到调制信号和消息信号的频谱,绘制它们的图形,用于绘制 3。 在解调部分程序中对FM检测进行一些基本计算,然后使用滤波器获得消息信号。 最后一部分程序绘制了恢复信号与消息信号的图表以进行比较。 我总结了所有代码,因为我不知道问题出在哪里。 当我制作缩放图 3 时,关于绘制 3 的问题我看到一些相位折叠或喜欢它。图形根据 y 轴不对称。 我没有解决这个问题,我研究了它们并决定使用unwrap()。尽管我尝试了很多,但我无法成功。如何使用unwrap() 函数摆脱这种阶段折叠。谢谢你。 我的matlab代码是;

ts = 0.0001;% Sampling interval
t0 = 0.15;  % Duration
t = 0:ts:t0;% define time vector

%% OTHER PARAMETERS 
fc = 200;  % Carrier signal frequency 
kf =50;    % Frequency deviation constant
fs = 1/ts; % Sampling frequency 

%% MESSAGE SIGNAL SIMPLY
m = 1*(t<t0/3)-2*(t<2*t0/3).*(t>=t0/3);

%% Integration of m
int_m(1) = 0;
for k =1:length(m)-1
int_m(k+1) = int_m(k) + m(k)*ts;
end

%% PLOTTING 1
figure; subplot(211);       % Message signal
plot(t,m);grid on;xlabel('time');ylabel('Amplitude');
title('m(t)');ylim([-3 2]);

subplot(212);plot(t,int_m);% Integral of message signal
grid on; xlabel('time');ylabel('Amplitude');title('integral of m(t)');
ylim([-0.07 0.07]);

%% FM MODULATED SIGNAL
u = cos(2*pi*fc*t + 2*pi*kf*int_m); 

%% PLOTTING 2
figure; plot(t,u); % Modulated signal in time domain
grid on;xlabel('time');
ylabel('Amplitude');title('FM :u(t)');
ylim([-1.2 1.2]);

%% FINDING FREQUENCY SPECTRUM AND PLOTTING 3
% Frequency spectrum of m(t)

f=linspace(-1/(2*ts),1/(2*ts),length(t));
M=fftshift(fft(m))./length(t);         % Taking fourier transform for m(t) 
U=fftshift(fft(u))./length(t);         % Taking fourier transform for u(t)


figure;subplot(211); % Frequence spectrum of m(t)
plot(f,abs(M)); grid;
xlabel('Frequency in Hz');xlim([-500 500]);
ylabel('Amplitude');title('Double sided Magnitude spectrum of m(t)');

subplot(212);plot(f,abs(U)); % Frequency spectrum of u(t)
grid;xlabel('Frequency in Hz');xlim([-500 500]);
ylabel('Amplitude');title('Double sided Magnitude spectrum of u(t)');

%% DEMODULATION (Using Differentiator)
dem = diff(u);                 
dem = [0,dem];
rect_dem = abs(dem);

%% Filtering out High Frequencies
N = 80;        % Order of Filter
Wn = 1.e-2;    % Pass Band Edge Frequency.
a = fir1(N,Wn);% Return Numerator of Low Pass FIR filter
b = 1;         % Denominator of Low Pass FIR Filter
rec = filter(a,b,rect_dem);

%% Finding frequency Response of Signals
fl = length(t);
fl = 2^ceil(log2(fl));
f = (-fl/2:fl/2-1)/(fl*1.e-4);
mF = fftshift(fft(m,fl));              % Frequency Response of Message Signal                                      
fmF = fftshift(fft(u,fl));             % Frequency Response of FM Signal
rect_demF = fftshift(fft(rect_dem,fl));% Frequency Response of Rectified FM Signal
recF = fftshift(fft(rec,fl));          % Frequency Response of Recovered Message Signal

%% PLOTTING 4 
figure;subplot(211);plot(t,m);grid on;
xlabel('time');ylabel('Amplitude');
title('m(t)');ylim([-3 2]);

subplot(212);plot(t,rec);
title('Recovered Signal');xlabel('\it t (sec)');
ylabel('m(t)');grid;

我的问题是在第三张图中显示得很好,我放了大图

【问题讨论】:

【参考方案1】:
k = -(length(X)-1)/2:1:length(X)/2;

你的 k 不是对称的。 如果您使用对称 k 是否可以正常工作?

【讨论】:

应该如何?例如length(x) = 3 then k = -1:1:1.5 也许 k = [-1, 0, 1];或者对于更大的 X 尺寸更好:使用 linspace( -k_max, k_max, n) 我更改感兴趣的行,例如 f=linspace(-1/(2*ts),1/(2*ts),length(t)); M=fftshift(fft(m))./长度(t); % 对 m(t) 进行傅里叶变换 U=fftshift(fft(u))./length(t); % 对 u(t) 进行傅里叶变换

以上是关于Matlab FM解调和消除相位折叠效应的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB通信系统建模

基于MATLAB的FM调制解调

基于MATLAB的FM调制解调

毕业设计/Matlab项目调幅AM/调频FM/DPSK/FSK的调制解调matlab界面

通信原理实验二 角度调制实验

GMSK研究PCM/FM和GMSK的调制和解调方法