Задание 4 к практическим занятиям (ММ РУиС) — различия между версиями
Korogodin (обсуждение | вклад) |
Korogodin (обсуждение | вклад) (→Задача 4.1) |
||
(не показаны 12 промежуточных версий 2 участников) | |||
Строка 6: | Строка 6: | ||
* рассмотреть пример использования ДПФ в алгоритмах обработки сигналов; | * рассмотреть пример использования ДПФ в алгоритмах обработки сигналов; | ||
* научиться применять весовые окна. | * научиться применять весовые окна. | ||
+ | |||
+ | == Задача 4.1 == | ||
+ | |||
+ | '''Постановка задачи''': | ||
+ | |||
+ | Угадайте частоту загаданного сигнала и выведите значение в Гц в Command Window: | ||
+ | |||
+ | <source lang = matlab> | ||
+ | clear all; close all; clc; | ||
+ | |||
+ | Fd = 40e3; % [Hz] | ||
+ | Td = 1/Fd; % [sec] | ||
+ | Tmod = 0.3; % [sec] | ||
+ | t = 0:Td:Tmod; % [sec] | ||
+ | |||
+ | df = 100; | ||
+ | S = cos(2*pi* (500 + df * rand(1,1)) * t); | ||
+ | |||
+ | figure; | ||
+ | plot(t, S) | ||
+ | |||
+ | % freq of S - ? | ||
+ | </source> | ||
+ | |||
+ | Попробуйте применить оконную обработку для улучшения результатов. | ||
+ | |||
+ | Подсказка: <code>Tmod = T - Td</code> | ||
+ | |||
+ | == Задача 4.2 == | ||
+ | |||
+ | '''Постановка задачи''': | ||
+ | |||
+ | Производится обработка отсчетов АЦП в радиоприемнике. Модель полезного сигнала: | ||
+ | :<math>S_n = N(0, \sigma_S^2)</math>, | ||
+ | |||
+ | частота дискретизации <math>f_d = 44.2</math> МГц. | ||
+ | |||
+ | Помимо полезного сигнала присутствует аддитивная гармоническая помеха с частотой <math>f_0</math> и мощностью на <math>J/S</math> = 30 дБ выше полезного сигнала. | ||
+ | |||
+ | Сигнал АЦП обрабатывается режектором узкополосных помех на базе быстрого преобразования Фурье (объем выборки <math>N</math> = 64). | ||
+ | |||
+ | Требуется построить осциллограммы и спектры сигналов на входе и выходе режектора для различных значений <math>f_0</math>, с использования оконной обработки (окно Парзена) и без неё. | ||
+ | |||
+ | '''Пример листинга программы''': | ||
+ | <source lang = matlab> | ||
+ | clear all; clc; close all; | ||
+ | |||
+ | use_window = 0; | ||
+ | |||
+ | Fd = 44.1e6; % Hz | ||
+ | N = 64; | ||
+ | T = 1/Fd * N; | ||
+ | t = ( (1:N) - 1 ) / Fd; | ||
+ | f = ( (1:N) - 1 ) / T; | ||
+ | stdS = 8; % RMS of signal | ||
+ | JtoS_dB = 30; %dB, jammer-to-signal | ||
+ | JtoS_amp = 10^(JtoS_dB/20); | ||
+ | |||
+ | S = randn(1, N) * stdS; % Signal | ||
+ | |||
+ | f0 = Fd / 8; % Jammer intermediate frequency | ||
+ | A_jam = stdS * JtoS_amp; % Amplitude of jam | ||
+ | Jam = A_jam * sin(2*pi*f0*t); % Jam | ||
+ | |||
+ | y = S + Jam; % ADC output | ||
+ | |||
+ | % Graphics | ||
+ | figure(1); | ||
+ | subplot(5,2,1) | ||
+ | stem(t*1e6, S) | ||
+ | xlabel('t, \mus'); | ||
+ | ylabel('S'); | ||
+ | |||
+ | subplot(5,2,2) | ||
+ | stem(f/1e6, abs(fft(S))) | ||
+ | xlabel('f, MHz'); | ||
+ | ylabel('fft(S)'); | ||
+ | |||
+ | subplot(5,2,3) | ||
+ | stem(t*1e6, Jam) | ||
+ | xlabel('t, \mus'); | ||
+ | ylabel('Jam'); | ||
+ | |||
+ | subplot(5,2,4) | ||
+ | stem(f/1e6, abs(fft(Jam))) | ||
+ | xlabel('f, MHz'); | ||
+ | ylabel('fft(Jam)'); | ||
+ | |||
+ | subplot(5,2,5) | ||
+ | stem(t*1e6, y) | ||
+ | xlabel('t, \mus'); | ||
+ | ylabel('y'); | ||
+ | |||
+ | yf = fft(y); | ||
+ | subplot(5,2,6) | ||
+ | stem(f/1e6, abs(yf)) | ||
+ | xlabel('f, MHz'); | ||
+ | ylabel('fft(y)'); | ||
+ | |||
+ | h = 400; | ||
+ | signal_clear = 0; | ||
+ | |||
+ | if use_window | ||
+ | yw = y .* parzenwin(N)'; | ||
+ | else | ||
+ | yw = y; | ||
+ | end | ||
+ | yfw = fft(yw); | ||
+ | |||
+ | subplot(5,2,7) | ||
+ | stem(t*1e6, yw); | ||
+ | xlabel('t, \mus'); | ||
+ | ylabel('y after window'); | ||
+ | |||
+ | subplot(5,2,8) | ||
+ | stem(f/1e6, abs(yfw)); | ||
+ | xlabel('f, MHz'); | ||
+ | ylabel('fft(y after window)'); | ||
+ | |||
+ | yf_rej = yfw; | ||
+ | for k = 1:N | ||
+ | if abs(yf_rej(k)) > h | ||
+ | yf_rej(k) = 0; | ||
+ | else | ||
+ | yf_rej(k) = yf_rej(k); | ||
+ | end | ||
+ | end | ||
+ | y_rej = ifft(yf_rej); | ||
+ | |||
+ | subplot(5,2,9) | ||
+ | stem(t*1e6, real(y_rej)); | ||
+ | xlabel('t, \mus'); | ||
+ | ylabel('y after rejector'); | ||
+ | |||
+ | subplot(5,2,10) | ||
+ | stem(f/1e6, abs(fft(y_rej))); | ||
+ | xlabel('f, MHz'); | ||
+ | ylabel('fft(y after rejector)'); | ||
+ | </source> | ||
+ | |||
[[Категория: ММ РУиС (дисциплина)]] | [[Категория: ММ РУиС (дисциплина)]] |
Текущая версия на 16:44, 25 марта 2015
Тема занятия: Преобразование Фурье. Режектор узкополосных помех.
Цели занятия:
- научиться выполнять преобразование Фурье в MATLAB;
- научиться правильно интерпретировать результаты дискретного преобразования Фурье;
- рассмотреть пример использования ДПФ в алгоритмах обработки сигналов;
- научиться применять весовые окна.
[править] Задача 4.1
Постановка задачи:
Угадайте частоту загаданного сигнала и выведите значение в Гц в Command Window:
Fd = 40e3; % [Hz]
Td = 1/Fd; % [sec]
Tmod = 0.3; % [sec]
t = 0:Td:Tmod; % [sec]
df = 100;
S = cos(2*pi* (500 + df * rand(1,1)) * t);
figure;
plot(t, S)
% freq of S - ?
Попробуйте применить оконную обработку для улучшения результатов.
Подсказка: Tmod = T - Td
[править] Задача 4.2
Постановка задачи:
Производится обработка отсчетов АЦП в радиоприемнике. Модель полезного сигнала:
- ,
частота дискретизации МГц.
Помимо полезного сигнала присутствует аддитивная гармоническая помеха с частотой и мощностью на = 30 дБ выше полезного сигнала.
Сигнал АЦП обрабатывается режектором узкополосных помех на базе быстрого преобразования Фурье (объем выборки = 64).
Требуется построить осциллограммы и спектры сигналов на входе и выходе режектора для различных значений , с использования оконной обработки (окно Парзена) и без неё.
Пример листинга программы:
use_window = 0;
Fd = 44.1e6; % Hz
N = 64;
T = 1/Fd * N;
t = ( (1:N) - 1 ) / Fd;
f = ( (1:N) - 1 ) / T;
stdS = 8; % RMS of signal
JtoS_dB = 30; %dB, jammer-to-signal
JtoS_amp = 10^(JtoS_dB/20);
S = randn(1, N) * stdS; % Signal
f0 = Fd / 8; % Jammer intermediate frequency
A_jam = stdS * JtoS_amp; % Amplitude of jam
Jam = A_jam * sin(2*pi*f0*t); % Jam
y = S + Jam; % ADC output
% Graphics
figure(1);
subplot(5,2,1)
stem(t*1e6, S)
xlabel('t, \mus');
ylabel('S');
subplot(5,2,2)
stem(f/1e6, abs(fft(S)))
xlabel('f, MHz');
ylabel('fft(S)');
subplot(5,2,3)
stem(t*1e6, Jam)
xlabel('t, \mus');
ylabel('Jam');
subplot(5,2,4)
stem(f/1e6, abs(fft(Jam)))
xlabel('f, MHz');
ylabel('fft(Jam)');
subplot(5,2,5)
stem(t*1e6, y)
xlabel('t, \mus');
ylabel('y');
yf = fft(y);
subplot(5,2,6)
stem(f/1e6, abs(yf))
xlabel('f, MHz');
ylabel('fft(y)');
h = 400;
signal_clear = 0;
if use_window
yw = y .* parzenwin(N)';
else
yw = y;
end
yfw = fft(yw);
subplot(5,2,7)
stem(t*1e6, yw);
xlabel('t, \mus');
ylabel('y after window');
subplot(5,2,8)
stem(f/1e6, abs(yfw));
xlabel('f, MHz');
ylabel('fft(y after window)');
yf_rej = yfw;
for k = 1:N
if abs(yf_rej(k)) > h
yf_rej(k) = 0;
else
yf_rej(k) = yf_rej(k);
end
end
y_rej = ifft(yf_rej);
subplot(5,2,9)
stem(t*1e6, real(y_rej));
xlabel('t, \mus');
ylabel('y after rejector');
subplot(5,2,10)
stem(f/1e6, abs(fft(y_rej)));
xlabel('f, MHz');
ylabel('fft(y after rejector)');