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解调和消除相位折叠效应的主要内容,如果未能解决你的问题,请参考以下文章