博主大毕设关于数字下变频(DDC)的CUDA实现,预计工期比较长,所以留下一些文字记录。
主要分为两部分工作,Matlab仿真部分和CUDA实现。
由于很久没有仿真了,所以先用一个简单的AM调制仿真练手。具体代码如下:
代码都是基础的所以就不解释了(环境matlab2016)
clc;
fm=; %信号频率
fc=; %载波频率
fs=; %抽样频率
Am=;
A=;
N=;
K=N-;
n=:N-;
t=(:/fs:K/fs);
yt=Am*cos(*pi*fm*t);
figure()
subplot(,,);plot(t,yt);title('频率为100HZ信号时域波形'); y0=A+yt;
y2=y0.*cos(*pi*fc*n/fs);
y3=fft(y2,N);
q1=(:N/-)*fs/N;
mx1=abs(y3(:N/));
figure()
subplot(,,);
plot(t,y2);
title('已调信号时域波形');
subplot(,,);
plot(q1,mx1);
title('已调信号频谱');
yc=cos(*pi*fc*t);
figure();
subplot(,,),plot(t,yc),title('载波fc时域')
n=:N-;
yc1 = Am*cos(*pi*fc*n/fs);
y3=fft(yc1,N)
q=(:N/-)*fs/N
mx=abs(y3(:N/));
figure()
subplot(,,),plot(q,mx),title('载波fc频谱')
N=;
n=:N-;
y4=0.01*randn(,length(t)); %产生高斯噪声
w=y4.^; %噪声功率
figure();
subplot(,,);
plot(t,y4);
title('高斯白噪声时域波形');
y5=fft(y4,N);
q2=(:N/-)*fs/N;
mx2=abs(y5(:N/));
figure();
subplot(,,);
plot(q2,mx2);
title('高斯白噪声频域波形');
y6=y2+y4;
figure();
subplot(,,);
plot(t,y6);
title('加噪声后时域信号')
q3=q1;
mx3=mx1+mx2;
subplot(,,);
plot(q3,mx3);
title('加噪声后频谱') yv=y6.*yc; %乘以载波想干解调
Ws=yv.^;
p1=fc-fm;
[k,Wn,beta,ftype]=kaiserord([p1 fc],[ ],[0.05 0.01],fs);%数字低通过滤波器
window=kaiser(k+,beta);%使用kaiser窗函数
b=fir1(k,Wn,ftype,window,'noscale');%
yt=filter(b,,yv);
yssdb=yt.*-;
figure()
subplot(,,);
plot(t,yssdb);
title('经过低通已调信号时域波形') ;%解调 y9=fft(yssdb,N);
mx=abs(y9(:N/));
subplot(,,);
plot(q,mx);
title('已调信号频域波形')
实现效果如下: