随笔分类 - 数字信号处理MATLAB实现
matlab dsp
FIR滤波器设计流程 加窗 MATLAB
摘要:1.确定参数:Wp 通带截止频率Ws 阻带截止频率As 衰减dBRp 纹波dB2.根据参数确定理想 频率响应 (M (Wp + Ws )/2 )双边响应 3.选窗过滤带宽阻带衰减4.得出最终响应时域相乘 频域卷积5.观察各项参数是否达标(采用归一化后的数据)衰减幅频特性相频群延时 ??···Ps:观察频率响应的函数这里a = 1 因为FIR可由差分方程描述故分母为1代码:wp =0.2*pi;ws = 0.3*pi;tr_width = ws -wp;M = ceil(6.6*pi/tr_width)+1;n = [0:1:M-1];wc = ((ws + wp)
阅读全文
matlab FFT()执行时间
摘要:Nmax = 2048; fft_time = zeros(1,Nmax); for n = 1:1:Nmax x = rand(1,n); %Uniformly distributed pseudorandom numbers t = clock;fft(x);fft_time(n)= etime(clock,t); end n = [1:1:Nmax]; plot(n,fft_time,'.') xlabel('N'); ylabel('Time in sec'); title('FFT execution times');
阅读全文
DFT简化计算理解(FFT)
摘要:DFT:WN=e^(-j*2*pi/N)DFT复杂度o(N^2)降低与N^2的依赖 使N = LM (L^2+m^2 <= N^2)N点DFT分解为M段L点DFT一维的N点序列变为(L,M)二维序列,每一行分别进行DFT举例两种一维到二维的映射关系n = Ml+m13579246810n = l+mL12345678910与之所求的DFT 也可存入相对应的(q,p)矩阵中以第一种(n = Ml+m)为例:k = Mp+q找书麻烦这里给出推到:重一维到二维两种流程:按列存入信号计算每行M点DFT乘以相位因子计算每一列的L点DFT按行读取所得数组图示:来看下基2_FFT算法:上图的N/2点的
阅读全文
快卷积 (批处理运算)
摘要:常用于连续接收的信号(语音信号等) ,将这个序列可当做无限长序列、大的DFT会有不可接受的大延迟。因此必须将这个无限长的序列分割为比较小的部分。利用DFT处理每一段最后整合。由上一节可知:当响应为M点,输入为N点时(M<N),取N = N做循环卷积事,会有(M-1)个的重叠为啦实现块卷积我们可以如此来分块:x(n)=(n+1) 0<=n<=9分段:X1(N) = {0,0,1,2,3,4,}X2(N) = {3,4,5,6,7,8}X3(N) = {7,8,9,10,0,0}每个响应前两个都会重叠,使不清楚原来的值,(所以预先重复,且组合时前两个舍去)
阅读全文
线性卷积 matlab 实现
摘要:x1 = [1,2,2,1]; x2 = [1,-1,-1,1]; x3 = conv(x1,x2)x1 = [1,2,2,1]; x2 = [1,-1,-1,1]; %x3 = conv(x1,x2) %MATLAB 自带的函数 circonvt(x1,x2,9) %前面一节刚写的函数如果将X1 与X2 通过补零而成为N =(N1+N2-1)点序列,那么循环卷积就与线性卷积一样了。差别在于循环移位和线性移位。x1 = [1,2,2,1]; x2 = [1,-1,-1,1]; %x3 = conv(x1,x2) circonvt(x1,x2,7)x1 = [1,2,2,1]; x2 = [1,
阅读全文
序列循环移位
摘要:function m = mod(n,N) %computes m = mod(n mod N) %___________________ %m = mod(n,N) m = rem(n,N); m = m+N; m = rem(m,N);function y = cirshiftt(x,m,N) %circular shift of m samples wrt size N in sequnce x: %----------------------------------------------------- %[y] = cirshiftt(x,m,N) %y = output seque
阅读全文
DFT 离散傅里叶变换 与 补零运算
摘要:function [Xk] = dft(xn,N) %computes discrete fourier transform %--------------------------------------------- %[Xk] = dft(xn,N) %Xk = DFT coeff. array over 0<= k<=N-1 %xn = one period of periodic signal over 0<= n<= N-1 % N = Fundamental period of xn % n = [0:1:N-1]; k = [0:1:N-1]; WN =
阅读全文
方波 离散傅里叶级数 MATLAB
摘要:%方波 离散时间傅里叶变换 L = 5; N = 10; k = [-N/2:1:N/2]; %占空比 基本周期 离散时间的参数 xn = [ones(1,L),zeros(1,N-L)]; %生成方波序列 XK = dfs(xn,N); magXK = abs([XK(N/2+1:N),XK(1:N/2+1)]); subplot(2,2,3); stem(k,magXK); axis([-N/2,N/2,-0.5,5.5]); xlabel('k'); ylabel('X(k)'); title('DFS of SQ.wave:L = 5,N = 1
阅读全文
离散傅里叶级数的matlab实例
摘要:function [Xk] = dfs(xn,N) %computes discrete fourier series coefficients %--------------------------------------------- %[Xk] = dfs(xn,N) %Xk = DFS coeff. array over 0<= k<=N-1 %xn = one period of periodic signal over 0<= n<= N-1 % N = Fundamental period of xn % n = [0:1:N-1]; %时间矢量量 k =
阅读全文
信号重建
摘要:原信号: 采用内插函数:sinc(x) %discrete_time Signal x1(n) Ts = 0.0002; Fs = 1/Ts; n = -25:1:25; nTs = n*Ts; x = exp(-1000*abs(nTs)); %Analog Signal reconstruction Dt = 0.00005; t = -0.005:Dt:0.005; xa = x*sinc(Fs*(ones(length(n),1)*t - nTs'*ones(1,length(t)))); %check error = max(abs(xa- exp(-1000*abs(t))
阅读全文
采样与模拟信号重建MATLAB实例
摘要:%关于连续函数求傅里叶变换 %用有限长序列近似 原函数(利用e^-5 约为 0) %从而确定出序列间隔T的范围,接下来要确定T的步进量 %要求:步进T<<采样间隔 %先求出傅里叶变换换后 幅值在什么(设为f)频率下趋向0 %步进T取一个值<<1/f\ %analog signal dt = 0.00005; %时间步进量 t = -0.005:dt:0.005; %时间范围 xa = exp(-1000*abs(t)); %求函数值 %contunites_time fourier transform Wmax = 2*pi* 2000; %观察的最高频率 K = 50
阅读全文
离散傅里叶变换(DTFT) MATLAB实例
摘要:w = [0:1:500]*pi/500; X= exp(1i*w) ./ (exp(1i*w) - 0.5*ones(1,501)); %ones : Create array of all ones magX= abs(X); angX = angle(X); realX = real(X); imagX = imag(X); subplot(2,2,1); plot(w/pi, magX);grid xlabel('frequency in pi unit' ); title ('magnitude part'); ylabel('magnitud
阅读全文