博主大毕设关于数字下变频(DDC)的CUDA实现,预计工期比较长,所以留下一些文字记录。

  主要分为两部分工作,Matlab仿真部分和CUDA实现。

  由于很久没有仿真了,所以先用一个简单的AM调制仿真练手。具体代码如下:

    代码都是基础的所以就不解释了(环境matlab2016)

 1 clc;
 2 fm=100;     %信号频率
 3 fc=500;     %载波频率
 4 fs=5000;    %抽样频率
 5 Am=1;
 6 A=2;
 7 N=512;
 8 K=N-1;
 9 n=0:N-1;
10 t=(0:1/fs:K/fs);
11 yt=Am*cos(2*pi*fm*t);
12 figure(1)
13 subplot(1,1,1);plot(t,yt);title('频率为100HZ信号时域波形');
14 
15 y0=A+yt;
16 y2=y0.*cos(2*pi*fc*n/fs);
17 y3=fft(y2,N);
18 q1=(0:N/2-1)*fs/N;
19 mx1=abs(y3(1:N/2));
20 figure(2)
21 subplot(2,1,1);
22 plot(t,y2);
23 title('已调信号时域波形');
24 subplot(2,1,2);
25 plot(q1,mx1);
26 title('已调信号频谱');
27 yc=cos(2*pi*fc*t);
28 figure(3);
29 subplot(2,1,1),plot(t,yc),title('载波fc时域')
30 n=0:N-1;
31 yc1 = Am*cos(2*pi*fc*n/fs);
32 y3=fft(yc1,N)
33 q=(0:N/2-1)*fs/N
34 mx=abs(y3(1:N/2));
35 figure(3)
36 subplot(2,1,2),plot(q,mx),title('载波fc频谱')
37 N=512;
38 n=0:N-1;
39 y4=0.01*randn(1,length(t)); %产生高斯噪声
40 w=y4.^2;                    %噪声功率
41 figure(4);
42 subplot(2,1,1);
43 plot(t,y4);
44 title('高斯白噪声时域波形');
45 y5=fft(y4,N);
46 q2=(0:N/2-1)*fs/N;
47 mx2=abs(y5(1:N/2));
48 figure(4);
49 subplot(2,1,2);
50 plot(q2,mx2);
51 title('高斯白噪声频域波形');
52 y6=y2+y4;
53 figure(5);
54 subplot(2,1,1);
55 plot(t,y6);
56 title('加噪声后时域信号')
57 q3=q1;
58 mx3=mx1+mx2;
59 subplot(2,1,2);
60 plot(q3,mx3);
61 title('加噪声后频谱')
62 
63 
64 yv=y6.*yc;   %乘以载波想干解调
65 Ws=yv.^2;
66 p1=fc-fm;
67 [k,Wn,beta,ftype]=kaiserord([p1 fc],[1 0],[0.05 0.01],fs);%数字低通过滤波器
68 window=kaiser(k+1,beta);%使用kaiser窗函数
69 b=fir1(k,Wn,ftype,window,'noscale');%
70 yt=filter(b,1,yv);
71 yssdb=yt.*2-2;
72 figure(6)
73 subplot(2,1,1);
74 plot(t,yssdb);
75 title('经过低通已调信号时域波形')    ;%解调
76 
77 y9=fft(yssdb,N);
78 mx=abs(y9(1:N/2));
79 subplot(2,1,2);
80 plot(q,mx);
81 title('已调信号频域波形')

 

实现效果如下: