怎么用matlab将一个音频信号频谱搬到高频

2024-12-27 22:17:00
推荐回答(1个)
回答1:

“乘以一个载波”这不叫搬,叫调制吧?频谱搬到1Mhz?意思是调制后的频率是1Mz吗?这种调制方法叫做调幅调制。
你给的载波频率太高了,我用了便于matlab计算的信号频率和载波频率。

下面是程序,可以保存成m文件
ts=0.001; %采样时间太小,程序执行时间会慢;太大则不符合采样定理,无法显示信号
T=10.00; %所选信号时间长度
N=T/ts; %信号采样点数
t=(0:N-1)*ts; %时间轴 N个点
A=1; %待调制信号振幅
B=5; %载波信号振幅
fx=10; %待调制信号频率
fc=100; %载波信号频率

x=A*cos(2*pi*fx*t); %待调制信号
y1=cos(2*pi*fc*t); %正弦调制信号
z1=(B+x).*y1; %调制后的信号
%平顶窗函数
for i=1:N
w(i)=1-1.93*cos(2*pi*(i-1)/(N-1))+1.29*cos(4*pi*(i-1)/(N-1))-0.388*cos(6*pi*(i-1)/(N-1))+0.0322*cos(8*pi*(i-1)/(N-1));
end
X=x.*w; %各信号加窗
Y1=y1.*w;
Z1=z1.*w;
Nf = 2^nextpow2(N);% 求得最接近总采样点的2^N
f = linspace(0,1,Nf/2+1)/ts;%频率轴(只画到Fs/2即可,由于x为实数,后面一半是对称的)
X = fft(X)/N;X=fftshift(X); %进行fft变换(除以总采样点数,是为了后面精确看出原始信号幅值)
Y1 = fft(Y1)/N;Y1=fftshift(Y1);
Z1 = fft(Z1)/N;Z1=fftshift(Z1);
tM=2/fx; %限定显示范围,只显示两个周期
nM=tM/ts;
%画正弦波调制波形
figure
subplot(3,2,1)
plot(t,x);
xlim([0,1]);
title('调制前信号');
xlabel('t/s');
ylabel('x');
hold on
subplot(3,2,2)
plot(f,abs(X(1:Nf/2+1)));
title('原信号频谱');
xlabel('f/HZ');
ylabel('X');
hold on
subplot(3,2,3)
plot(t,y1);
xlim([0,1]);
title('调制信号');
xlabel('t/s');
ylabel('y1');
hold on
subplot(3,2,4)
plot(f,abs(Y1(1:Nf/2+1)));
title('调制信号频谱');
xlabel('f/HZ');
ylabel('Y1');
hold on
subplot(3,2,5)
plot(t,z1);
xlim([0,1]);
title('调制后信号');
xlabel('t/s');
ylabel('z1');
hold on
subplot(3,2,6)
plot(f,abs(Z1(1:Nf/2+1)));
title('调制后信号频谱');
xlabel('f/HZ');
ylabel('Z1');
hold on
toc