تبلیغات
باران الکترونیک - تغییر نرخ نمونه برداری سیگنال (طراحی در ‏MATLAB، پیاده سازی در ‏DSP‏)‏ قسمت دوم

برنامه M-file برای تغییر نرخ نمونه برداری سیگنال

اکنون می­خواهیم با نوشتن چند خط برنامه متلب یک سیگنال سینوسی با فرکانس KHz 1/5 که با نرخ KHz‏‏8   نمونه برداری شده است را تولید می­ کنیم. سپس نرخ نمونه برداری سیگنال را به KHz‏ 9/6 افزایش میدهیم.

مقدار دهی اولیه برنامه

%% Initialization

up_sample = 6;

down_sample = 5;

Fs= 8000;                       % Sampling frequency

T = 1/Fs;                       % Sample time

L = 1000;                       % Length of signal

t = (0:L-1)*T;                  % Time vector

1) تولید سیگنال سینوسی با فرکانس ‏KHz‏ 5/1 و نرخ نمونه برداری ‏KHz‏‏8‏

%% Produce input: sin 1.5 KHz, sample rate 8000

x=round(2^15*sin(2*pi*1500*t));

i=find(x>2^15-1);

x(i)=2^15-1;

i=find(x<-2^15);

x(i)=2^15;

plot(1000*t(1:50),x(1:50))

title('Sin 1.5 KHz, Sample Rate : 8KHz')

xlabel('time (milliseconds)')

% Plot frequency of signal

NFFT = 2^nextpow2(L); % Next power of 2 from length of y

X = fft(x,NFFT)/L;

f = Fs/2*linspace(0,1,NFFT/2+1);

% Plot single-sided amplitude spectrum.

figure

plot(f,2*abs(X(1:NFFT/2+1)))

title('Single-Sided Amplitude Spectrum of x(t)')

xlabel('Frequency (Hz)')

ylabel('|X(f)|')

بقیه مقاله در ادامه مطلب


2) اضافه کردن صفر بین نمونه های سیگنال

%% Upsampling

% Increase input sample rate: sin 1.5 KHz, sample rate 8000 x up_sample

%zero pading = 6 - 1 = 5

xr = reshape([x' zeros(length(x),up_sample-1)]',up_sample*length(x),1)';

figure

stem(xr(1:100),'DisplayName','xr');figure(gcf)

NFFT = 2^nextpow2(L*up_sample); % Next power of 2 from length of y

Xr = fft(xr,NFFT)/(L*up_sample);

f = (Fs/2)*up_sample*linspace(0,1,NFFT/2+1);

% Plot single-sided amplitude spectrum.

figure

plot(f,2*abs(Xr(1:NFFT/2+1)))

title('Single-Sided Amplitude Spectrum of xr(t)')

xlabel('Frequency (Hz)')

ylabel('|Xr(f)|')



3) فیلتر کردن سیگنال

%% Filtering

b=1;

t = (0:L*up_sample-1)*T/up_sample;

lh=length(h);

y = filter(h,b,xr);

figure

plot(1000*t(1:300),y(1:300))

title('Sin 1.5 KHz, Sample Rate : 48KHz')

xlabel('time (milliseconds)')

figure

freqz(h)

NFFT = 2^nextpow2(L*up_sample); % Next power of 2 from length of y

Y = fft(y,NFFT)/(L*up_sample);

f = (Fs/2)*up_sample*linspace(0,1,NFFT/2+1);

% Plot single-sided amplitude spectrum.

figure

plot(f,2*abs(Y(1:NFFT/2+1)))

title('Single-Sided Amplitude Spectrum of y(t)')

xlabel('Frequency (Hz)')

ylabel('|Y(f)|')

4) فیلتر کردن سیگنال با استفاده از ضرایب ممیز ثابت (Fixed-Point)

%% Conver filter coef to Q15 format

h_new=round(h*2^15);

y_new = filter(h_new,b,xr);

figure

plot(1000*t(1:300),y_new(1:300))

title('Sin 1.5 KHz, Sample Rate : 48KHz in Q15 format')

xlabel('time (milliseconds)')

figure

freqz(h_new)

Y_NEW = fft(y_new,NFFT)/L;

% Plot single-sided amplitude spectrum.

figure

plot(f,2*abs(Y_NEW(1:NFFT/2+1)))

title('Single-Sided Amplitude Spectrum of x(t)')

xlabel('Frequency (Hz)')

ylabel('|Y_NEW(f)|')


5) کاهش نرخ نمونه برداری سیگنال برای رسیدن به نرخ KHz‏ ‏9/6 ‏

%% Downsampling

t = (0:L*up_sample/down_sample-1)*T/up_sample*down_sample;

yd=downsample(y_new,down_sample);

figure

plot(1000*t(1:50),yd(1:50))

title('Sin 1.5 KHz, Sample Rate : 9.6KHz')

xlabel('time (milliseconds)')

NFFT = 2^nextpow2(L*up_sample/down_sample);% Next power of 2 from length of y

YD = fft(yd,NFFT)/(L*up_sample/down_sample);

f = (Fs/2)*up_sample/down_sample*linspace(0,1,NFFT/2+1);

% Plot single-sided amplitude spectrum.

figure

plot(f,2*abs(YD(1:NFFT/2+1)))

title('Single-Sided Amplitude Spectrum of yd(t)')

xlabel('Frequency (Hz)')

ylabel('|YD(f)|')


6) ذخیره سیگنال ورودی بلوک در فایل sin_1k5.txt

%% Write Sin 1KHz, 8000 sample rate to file

Lx=length(x);

fid=fopen(' sin_1k5.txt','w');

fprintf(fid,'int input[%d] = {', Lx);

fprintf(fid,'%d,',x);

fprintf(fid,'};');

fclose(fid);

7) ذخیره فیلتر با ضرایب صحیح شده در فایل coef.h

%% Save filter Coeficient to file

fid=fopen('coef.h','w');

fprintf(fid,'#pragma DATA_SECTION (coef,".COEF")\n');

fprintf(fid,'short h[%d] = {', lh);

fprintf(fid,'%d, ',h_new);

fprintf(fid,'\n};');

fclose(fid);



نظرات()   
   
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر
آخرین پست ها