%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%设置参数%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all
close all
clc;
pf=0.1; %虚警概率为0.1
fs=48000; %采样频率为48K
%原始数据
[x1,fs] = audioread('voice_2.wav');
x= x1(:,2);%右声道
%sound(x,fs);%播放音频
%参数
N = length(x);%音频的采样数
n=0:N-1;
ts=1/fs;%时间间隔
t = 0:1/fs:(N-1)/fs;%时间
f=n*fs/N-1;
%对原始信号进行fft
Y = fft(x);
%Y0=fftshift(Y00)
%实信号fft的结果与[-fs/2, fs/2]对应,则要fft后fftshift一下即可,
%fftshift的操作是将fft结果以fs/2为中心左右互换;
% mag0 = abs(fftshift(Y));
%画图
figure(1)
subplot(211);
plot(t,x);
xlabel('t/s');
ylabel('幅值');
title('voice信号时域波形');
%绘制原始信号的振幅
subplot(212);
df=fs/length(Y) %计算谱线间隔
f=0:df:(fs/2-df) %频谱范围,截取前半段(抽样频率高于最大频率的2倍)
Yf=abs(Y) %幅度
Yf=Yf(1:length(Yf)/2) %截取一半
plot(f,Yf) %音频信号频谱图
title('音频频谱图')
% plot(f,abs(Y));
% xlabel('频率(Hz)');
% ylabel('幅值');
% title('voice信号频谱图');
%% 调制FM
%*********************************************************************
fc = 4000;
KFM = 10;%调频指数
mt = x;
%beatFM = KFM*Am/wc;
beatFM = 5;
jifen(1)=0; %求信号m(t)的积分
for i=1:length(t)-1
jifen(i+1)=jifen(i)+mt(i)*ts;
end
%%%%%%%%%%%%
ct = cos(2*pi*fc*t);
sig_fm = cos(2*pi*fc*t+2*pi*KFM*jifen);
fft_sig_fm = abs(fftshift(fft(sig_fm)));
% sound(sig_fm,fs);
nsfm=sig_fm; %生成含高斯白躁声的已调信号(信号通过信道传输)
%%%%%%%%%%
figure(2)
subplot(311);
plot(t,mt);
xlabel('时间/s');
ylabel('幅值');
title('调制信号');
subplot(312);
plot(t,ct);
xlabel('时间/s');
ylabel('幅值');
title('载波信号');
subplot(313);
plot(t,sig_fm);
xlabel('时间/s');
ylabel('幅值');
title('已调信号');
%% 解调FM
%%解调
%*****************************************************
for i=1:length(t)-1 %接受信号通过微分器处理
diff_nsfm(i)=(nsfm(i+1)-nsfm(i))./ts;
end
diff_nsfmn = abs(hilbert(diff_nsfm)); %hilbert变换,求绝对值得到瞬时幅度(包络检波)
zero=(max(diff_nsfmn)-min(diff_nsfmn))/2;
d_m=diff_nsfmn-zero;
sound((d_m)',fs);
figure(3)
subplot(2,1,1);
%plot(t(1:end-1),d_m);
plot(t(1:end-1),d_m);
xlabel('时间/s');
ylabel('幅值');
但是,最后解调出来的不正确,听不到声音。哪里代码错了吗?求解答