1.产生FM信号并绘制频域波形
%% 产生FM信号并绘制时域波形 fm = 500; % 调制信号频率 Am = 0.5; % 调制信号幅度 fc = 5e3; % 载波频率 Ac = 1; % 载波幅度 kf = 10000*pi; % 调频灵敏度 fs = 75e3; % 采样率 N = 3000; % 样点总数 t = (0:N-1)'/fs; % 时间t m_t = Am*sin(2*pi*fm*t); % 调制信号 phi_t = kf*cumsum(m_t)/fs; % 相位积分 s_t = cos(2*pi*fc*t + phi_t); % 已调信号 plot(t, s_t , 'b'); % 绘波形 xlabel('time'); xlim('auto'); ylabel('amplitude'); ylim('auto');
2.绘制频谱图
%% 绘制频谱图 L = length(s_t); % 取得序列长度 u = fftshift(fft(s_t )); % 离散傅里叶变换,求频谱 w = (0:L-1)'*fs/L - 1/2*fs; % 横坐标-频率 figure(2) plot(w, abs(u)); % 绘制频谱图 grid on; xlabel('frequency(Hz)'); ylabel('magnitude(dB)');
3.贝塞尔函数值
%% 贝塞尔函数值 b=500*N/fs;%计算频域上间隔500Hz对应的点数 c=1500+10*b+1;%计算fc在频域上对应的位置 for i=0:1:10 a(i+1)=abs(u(c+b*i)/N*2);%计算fc+i*fm对应的频谱值 bessel(i+1)=besselj(i,5);%计算对应的贝塞尔函数值,mf=5 end a bessel
4.FM信号非相干解调
%FM信号非相干解调 fc = 5e3; % 载波频率 fs = 100e3; % 采样率 N = length(s_t); % 样点数 [lpf_b,lpf_a] = butter(10, (fc/2)/(fs/2)); % 设计低通滤波器 t = (0:N-1)'/fs; % 时间t r_t = s_t; r_d_t = [0;diff(r_t)]; % 求微分 r_e_t = abs(hilbert(r_d_t)); % 包络检波 demod_t = filter(lpf_b, lpf_a, r_e_t); % 滤波 plot(t, demod_t , 'b'); % 绘图
5.解调调频立体声广播
%% 调频立体声广播解调 clear all;clc;close all load 'fm_cap.mat'; %载入FM信号 fc = 200e3; % 载波频率 fs = 2e6; % 采样率 r_t = fm_cap; N = length(r_t); % 样点数 [lpf_b,lpf_a] = butter(10, (fc/2)/(fs/2)); % 设计低通滤波器 t = (0:N-1)'/fs; % 时间t %% 解调 r_d_t = [0;diff(r_t)]; % 求微分 r_e_t = abs(hilbert(r_d_t)); % 包络检波 demod_t = filter(lpf_b, lpf_a, r_e_t); % 滤波 plot(t, demod_t , 'b'); % 绘图 %% 信号抽取,使声卡能够播放音频 demod_t2 = resample(demod_t,48e3,2e6);%按比例降低采样率 demod_t2=demod_t2/max(demod_t2);%归一化,限制音频幅度范围,否则无法播放 fs2=48e3;%新采样率 N2 = length(demod_t2); % 新样点数 t2 = (0:N2-1)'/fs2; % 新时间t plot(t2, demod_t2 , 'b'); % 绘图 sound(demod_t2,fs2);%播放音频