博主大毕设关于数字下变频(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('已调信号频域波形')
实现效果如下: